Most of the content of this course 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 entire document since it represents work-in-progress and will undoubtedly evolve somewhat as the course progresses. Once an official reading assignment is given, those chapters can be safely printed. I will also make announcements whenever updates are made.
A useful reference for coding in Haskell is the “Haskell Cheat Sheet” — 14 pages of useful summaries of Haskell’s main features. Another useful tool is Hoogle, a nice app that allows you to search many standard Haskell libraries by either function name, or by approximate type signature.
Finally, a nice on-line tutorial of basic music theory can be found at musictheory.net. This tutorial contains way more information than you need for this course, but the first few lessons will be useful if you’re not familiar with the basics.
We will use Euterpea, a Haskell library for computer music applications, for all of the assignments and final project in this course. Complete instructions for installing Haskell and Euterpea on your computer can be found here.
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.