Algorithmic electroacoustic music by Risto Holopainen.
Kolmogorov Variations, aka Eleven Hard Pieces, are a collection of algorithmic compositions. Every aspect from sound synthesis to large scale form has been generated by one single program for each composition.
Kolmogorov complexity measures how complex an object is by looking at the code size of a program that generates a description of that object; it is defined as the length of the shortest program that outputs the description. Of course the code size depends on the programming language used, so one would have to find the shortest program given a certain language.
With this complexity measure in mind, I tried to write complex music using as little code as possible. That goal has been met with varying degrees of success. In some pieces I must have forgotten my ambition of writing terse code, in others the music is perhaps not very complex. An experienced code golfer surely would be able to squeeze the code to a fraction of its current size. But there is more to the pieces than merely an excercise in concise code writing, each one explores its own set of ideas.
Some exotic synthesis techniques are used, such as cross-coupled feedback FM systems with up to six oscillators and linear ordinary differential equations with quasiperiodic coefficients. These are explained elsewhere.
One might compare the programs to the score of a composition. They allow you to regenerate the raw material for the Kolmogorov Variations, much like notation makes it possible to recreate someone else's composition by performing it.
The source code (80 kB zip file) is available for download. Libsndfile is required for output to soundfiles and is not included. Apart from that only standard C and C++ libraries are used. The project is licenced under GNU GPL v.3.
All programs are as simple as they get and serve a single purpose—to output a specific composition. Some of the linked header files might contain some classes and functions of more general interest.
Beware, best practices of software engineering are not nessessarily followed. There is no guarantee of any kind and the documentation is sparse.
The source code is provided mainly for documentation, study, or research purposes. Running the programs will produce output soundfiles. Since there are no command line parameters the output will always be the same (with one exception where randomness plays its part). In fact, the output will be highly similar to the raw, unmixed versions of the pieces.
The project folders (except the one called util) contain .cpp files and additional .h header files. None of the header files are separated into declaration files and implementation files. It is all very simple and stupid: you just compile and run the programs. Be sure to read the comments at the top of the .cpp files for further instructions and explanations.
An album release of the eleven pieces is coming up shortly. The final mixes differ somewhat from the raw output of the programs. All pieces were treated with acoustic processing and some analog filters, spring reverbs, ring modulation and other effects.
The titles are:
There is a forthcoming article that discusses several of the pieces in detail. Making Complex Music with Simple Algorithms, is it Even Possible? will appear in Revista Vórtex, and then, eventually, it will be posted here too.
© Risto Holopainen 2021