Monday, January 6, 2014

Harmonikit

Rich Hickey presented Harmonikit at the 2013 Clojure conj. Here's the code, and here's the hour-long video (embedding disabled, because apparently ClojureTV hates the Web or something?).

Harmonikit's an additive synthesizer built in Clojure on top of Overtone. Harmonikit gives you additive synthesis and uses core.async for control. Hickey says in the presentation that core.async proved "a fantastic fit" for handling MIDI and OSC.

Although Hickey calls Overtone "awesome" in the video, Harmonikit departs from the emacs-centric Overtone style. Hickey says, "emacs is one of the last things you want to have around when you're making music. You need emacs for making music like you need it for having sex." (To prevent any confusion, he clarifies that this means you don't need emacs at all in either of these contexts.) So although Overtone gets well-deserved praise, and plays an important role in the design, overall, Harmonikit represents a different direction.

If you're not well-versed in synthesis paradigms, the additive synthesis which Harmonikit implements is relatively obscure. You can find it in NI Razor or the very classic, very old-school Hammond Organ. Subtractive synthesis is the dominant paradigm, and frequency modulation is a more popular alternative than additive synthesis. Where subtractive synthesis uses filters to carve out interesting sounds from fundamental waveforms like the sine or the square, additive synthesis piles on many many waveforms to create complex aggregate waveforms similar to those generated by pre-electronic instruments. This gives additive synthesis an advantage in terms of harmonic complexity, but a corresponding disadvantage in terms of programming complexity.

I haven't played with it yet, but I'm guessing that using the library to its full effectiveness would probably require skill with, and a full understanding of, synthesizer programming. The video's fun to watch; Hickey demonstrates controlling Harmonikit with a QuNexus keyboard and the Lemur app running on an iPad. The Lemur UI comes off as both complex and intuitive.