mathr / blog / #



Inspired by algorithmic symphonies from one line of code I wrote an evolutionary system that evaluates noisy expressions according to desired audio characteristics and cross-breeds and mutates the best ones.

I'll be playing live with BitBreeder at the Slave To The Algorithm launch next Saturday 13th April 2013, check the link for the full details.

Implemented in Haskell (user interface with GTK, visual expression display with OpenGL) and C (for realtime audio generation and audio descriptor number crunching), BitBreeder presents you with a bunch of sliders to adjust target value and weighting for a number of audio analyses (such as loudness, tonality, spectral centroid, ...).

Most of the analyses come in three flavours: the average value over time, the variability over time, and the special secret sauce of "granularity". The granularity measures the time scales over which variations occur - when it is small variations over short periods dominate and it becomes more homogeneous over longer periods. When it is large, there are variations even over long periods of time.

You can get the source code from BitBreeder on Gitorious BitBreeder on Be aware that the dependencies are quite heavy and there isn't much documentation, and it's necessary to edit Config.hs to make the visual expression display appear in the right place at the right size for your physical display setup.