This is by Paul Hudak, one of the creators of Haskell. I took one of his classes that corresponds with this book. This is how I was introduced to Haskell.
Now I'm hooked on Haskell! The book is a truly excellent introduction to Haskell, and I suggest that anyone who is interested read it. The book goes into some interesting topics, including proofs by computation and induction, UIs and functional reactive programming, and arrows. And it elegantly explains some of the advantages of functional programming and the Haskell language.
Just note that this book is a work in progress; he is always updating and modifying the book as he teaches the corresponding classes.
somewhat related: this paper describes the haskell innards of Chordify, a web service that annotates chord structures of songs from videos or sound clips
The reason i picked up the book: I was thinking whether it was possible to annotate just intonation from equal temperament, but I think that's a limitation of MIDI that it can't do that. Also, eagerly awaiting §11.4, "Soundness and Completeness of Music Algebras".
I recently attended an academic workshop on algorithmic music in Common Lisp and wrote some relevant code in Clojure while there. A lot of people there had strong music theory backgrounds and were very interested in both alternate tunings and the "set theory" approach to pitch sets.
The good news is that with Overtone (the Clojure interface to SuperCollider) you can specify individual pitches rather than MIDI note numbers. People at this workshop who wanted to work with pitch sets or unusual tunings had to resort to controlling the pitch bend programmatically, which, while it certainly works, involves a lot more effort and results in less elegant code.
I shared same excitements as other folks here, but soon after I started reading, I discovered that it is very daunting unless you already know the music theory. This is not explicitly mentioned in the foreword. Actually, I was hoping to learn music theory with this book, along with deepening and refreshing my Haskell knowledge.
It is demanding, you have to know/learn a lot of stuff: music composition, probability distributions, generative models (MCMC), DSP, MIDI, haskell. For haskell alone, I like Hutton's little green/yellow book, and the Stanford course notes
I didn't read the haskell paper yet, but one talk about music and programming that I enjoyed a lot is 'functional composition' by chris ford, using clojure. http://www.youtube.com/watch?v=Mfsnlbd-4xQ
It simply groups and layers simple waves until he can describe a full theme. In case you didn't saw it and have 30 minutes of free time.
It's a very nerdified take on music theory which is only popular with "computer music" researchers at universities. It would be a poor way to learn music theory in the way that musicians think about it.
blatant self-promotion: I'm considering writing a book like this, as a product for sale, but using examples in Ruby, CoffeeScript, and Clojure (using Overtone, which is fantastic).
background: I just quite recently went to a two-week workshop on this topic at the University of Santa Cruz:
We were taught in Common Lisp but I did my projects in Clojure. The professors showed some amazing stuff, including very sophisticated harmonizers and counterpoint generators (e.g. Gradus Ad Parnassum in code, for those of you with a music theory background). I had the most hacker knowledge of anyone there, I think; most everyone else had a strong background in music but little or nothing in terms of code.
I also built a video series on making music with CoffeeScript and JavaScript, in 2012, and a very effective breakbeat improviser in Ruby, way back in 2008. I'm not 100% satisfied with the video series, but you can see it at singrobots.com if you're curious, and I did a presentation on the breakbeat improviser which was very well-received:
Kind of ancient history, though, so this next thing is more up to date. You can see a kind of rave-o-matic bassline improviser in Clojure, which is to say Clojure/Overtone code which cooks up original syncopated basslines, on GitHub:
That's one of the things I wrote at this workshop. If you're interested in this stuff I HIGHLY recommend attending next year (if they continue to run it!). I might go back for a second round myself. It was a phenomenal experience.
Anyway, to finish up that blatant self-promotion bit, if you're interested in a book like this, which you'd have to pay for, but which would give you examples in Clojure, Ruby, and JavaScript (and/or CoffeeScript) instead of Haskell, my email is [email protected].
As mentioned elsewhere in this thread, you seem to be expected to know a deal of music theory for this book. Are you considering a similar approach? If you explained music theory from the ground up using Clojure with Overtone, that'd be my dream book. Have you considered leanpub?
Same here. I'm going to read this book and hope to learn more about functional programming and the Haskell language, while (hopefully) not being bothered with the kind of trivial examples that you commonly encounter in tutorials.
[+] [-] thetwiceler|12 years ago|reply
Now I'm hooked on Haskell! The book is a truly excellent introduction to Haskell, and I suggest that anyone who is interested read it. The book goes into some interesting topics, including proofs by computation and induction, UIs and functional reactive programming, and arrows. And it elegantly explains some of the advantages of functional programming and the Haskell language.
Just note that this book is a work in progress; he is always updating and modifying the book as he teaches the corresponding classes.
[+] [-] gtani|12 years ago|reply
http://ismir2012.ismir.net/event/papers/lbd2.pdf
http://chordify.net/pages/official-launch-of-chordify/
______________
The reason i picked up the book: I was thinking whether it was possible to annotate just intonation from equal temperament, but I think that's a limitation of MIDI that it can't do that. Also, eagerly awaiting §11.4, "Soundness and Completeness of Music Algebras".
[+] [-] tessierashpool|12 years ago|reply
The good news is that with Overtone (the Clojure interface to SuperCollider) you can specify individual pitches rather than MIDI note numbers. People at this workshop who wanted to work with pitch sets or unusual tunings had to resort to controlling the pitch bend programmatically, which, while it certainly works, involves a lot more effort and results in less elegant code.
[+] [-] zura|12 years ago|reply
[+] [-] kroger|12 years ago|reply
Dave Benson's "Music: a Mathematical Offering" [1] or my own "Music for Geeks and Nerds" [2]
[1] http://homepages.abdn.ac.uk/mth192/pages/html/maths-music.ht...
[2] http://musicforgeeksandnerds.com
[+] [-] gtani|12 years ago|reply
http://www.cs.nott.ac.uk/~gmh/book.html
http://www.scs.stanford.edu/11au-cs240h/
[+] [-] agumonkey|12 years ago|reply
It simply groups and layers simple waves until he can describe a full theme. In case you didn't saw it and have 30 minutes of free time.
[+] [-] rdouble|12 years ago|reply
[+] [-] unknown|12 years ago|reply
[deleted]
[+] [-] jdn|12 years ago|reply
[+] [-] tessierashpool|12 years ago|reply
background: I just quite recently went to a two-week workshop on this topic at the University of Santa Cruz:
http://arts.ucsc.edu/programs/wacm
We were taught in Common Lisp but I did my projects in Clojure. The professors showed some amazing stuff, including very sophisticated harmonizers and counterpoint generators (e.g. Gradus Ad Parnassum in code, for those of you with a music theory background). I had the most hacker knowledge of anyone there, I think; most everyone else had a strong background in music but little or nothing in terms of code.
I also built a video series on making music with CoffeeScript and JavaScript, in 2012, and a very effective breakbeat improviser in Ruby, way back in 2008. I'm not 100% satisfied with the video series, but you can see it at singrobots.com if you're curious, and I did a presentation on the breakbeat improviser which was very well-received:
http://www.infoq.com/presentations/archaeopteryx-bowkett
Kind of ancient history, though, so this next thing is more up to date. You can see a kind of rave-o-matic bassline improviser in Clojure, which is to say Clojure/Overtone code which cooks up original syncopated basslines, on GitHub:
https://github.com/gilesbowkett/markov-bass-lines
That's one of the things I wrote at this workshop. If you're interested in this stuff I HIGHLY recommend attending next year (if they continue to run it!). I might go back for a second round myself. It was a phenomenal experience.
Anyway, to finish up that blatant self-promotion bit, if you're interested in a book like this, which you'd have to pay for, but which would give you examples in Clojure, Ruby, and JavaScript (and/or CoffeeScript) instead of Haskell, my email is [email protected].
[+] [-] goldfeld|12 years ago|reply
[+] [-] rasur|12 years ago|reply
[+] [-] noloqy|12 years ago|reply
[+] [-] heifetz|12 years ago|reply
link to the latest revision of this book (2013)
[+] [-] Schiphol|12 years ago|reply
[+] [-] lelf|12 years ago|reply