Most of the lectures will come directly from The Haskell School of Music: From Signals to Symphonies, which is available for free download from here. However, I do not recommend printing the document since it represents work-in-progress and will undoubtedly evolve somewhat as the course progresses. I will make announcements whenever updates are made.
We will use Euterpea, a Haskell library for computer music applications, for all of the assignments and final project in this course. You can learn all about Euterpea by clicking on the “Euterpea” link at this website. Included are complete instructions for installing Haskell and Euterpea on your computer.
We will also use Audacity, a free, open-source software application for recording, displaying, and editing audio files. You will find it is useful both as an educational tool, and a debugging tool. You can download it from here.
The machines in the Zoo (the Computer Science Department’s computer cluster) will be installed with Haskell and Euterpea. In addition, the Euterpea Studio (a computer music lab) has three computers and some digital instruments to possibly use in your final project. A more thorough description of the Euterpea Studio can be found by following the link above.
If you have not figured it out by now, this course is very “language centric.” This partly reflects my own research interests, but more importantly is a way to ensure that you learn some computer science concepts, and not just “how to make music with a computer.” In fact, computer music has a long legacy of computer music languages — see http://www.nosuch.com/tjt/plum.html for a rather comprehensive list. In this course, we will study Euterpea (previously called Haskore, the name that appears in the list above), a computer music language (actually library) that is based on Haskell.
Haskell is one of the most advanced programming languages in the world. It is purely functional — meaning that it does not have side effects such as assignment statements and conventional IO. This requires a different mindset in programming, but has many advantages: simple semantics, facilitates formal reasoning, and allows elegant abstraction mechanisms, to name but a few. It is especially suitable for computer music applications, both at the note level and at the signal level. At the signal level (which is what this course is about), it allows us in many cases to literally transcribe the mathematical equations that describe a signal, into Haskell code. This reduces the infamous “semantic gap” between problem specification and code to a crack in the sidewalk.