The Haskell School of Music (2012) [pdf]
cs.yale.edu
cs.yale.edu
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.
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".
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.
This book looks more like the start of the CSound manual. That said, awesome, but not where I would run to to get started making sounds.
Also, I didn't know there was any way to systemically describe just intonation. I'm one of those bubble children that hears wolf intervals all the time and can never get a guitar tuned. I got that from having piano and woodwind lessons simultaneously as a kid
substitute "frequencies" for "pitches" in this sentence:
The good news is that with Overtone (the Clojure interface to SuperCollider) you can specify individual pitches rather than MIDI note numbers.
since you have access to the actual frequencies, you can build any arbitrary abstraction on top, including any tuning system known to humanity. (and since it's Clojure that abstraction can be unusually concise.)
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...
Since you can read RWH online, you should, but you should also check out the FPcomplete.com tutorials. Also Simon Thompson's 3rd edition Haskell book is good, probably the only thing I could call a gentle intro to haskell.
also: http://shuklan.com/haskell/
__________
Finally, there's some ridiculous number of tutorials on the haskell wiki
http://www.haskell.org/tutorial/
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.
I really find this book an insight into how to transpose one model into another. It could apply to so much more that music theory, it's just that the author has a predisposition to music and therefore uses it as the illustrative example.
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 gilesb@gmail.com.
re music theory, I think I could basically write your dream book, with some caveats. my own grasp of music theory doesn't extend as far as Mozart or Miles Davis. I can say some things about Bach, thanks to brilliant work by Chris Ford, Douglas Hofstadter, and David Cope, but if I wrote a "ground up" type of thing, I think I could get you far enough to understand the majority of popular music today, but not into the intellectual stratosphere of formal art musics like jazz or modern "classical." Likewise I can't say a ton about non-Western musical forms. I can deliver a ton of specifics on electronic dance music, so that's probably what I'd do.
But, short answer is, yeah, I could sort of write that. I have to admit that it didn't totally occur to me that a book like that would be interesting. I was mostly thinking about the AI aspect (writing code which writes music) and a straightforward user's guide to Overtone (because it is pretty complicated in places). But I think what you're talking about is the way to go, or at least a good place to begin.
Regarding your publishing system, is it something you can point me towards?
link to the latest revision of this book (2013)