Yesterday I released
Hacksilver, an album of
procedurally generated "algorave" music. Some people had questions about
the technology used to write it so I thought I'd write this up.
The beats and melodies were generated using
drillbit, a LISP codebase written
in a Python variant called Hy. The project outputs Impulse Tracker mod
files which are then
played and mixed live.
The interesting parts of that codebase are in the generators folder. For
example the drill-n-bass choppage generator is
here.
Each generator has three functions:
make-sample-set
: which generates IT wav tables that are used by
the generator (e.g. individual drum kit or synth sounds)
make-pattern-settings
: which sets up parameters & context that
will be re-used by the pattern generator to provide similarity across
pattern variations
make-pattern
: which outputs the pattern data in a format easily
consumed by the Impulse Tracker file writer
Mixing and live-effects are performed in Pure
Data. Originally I was using a fully software
based mixer. However I discovered that
a nicer mode of operation is to have individual bits of sound
generating/filter hardware chained together. So I started using this
Raspberry Pi based mixer + FX unit from another
project to mix live.
One other bit of software in there is
jsfxr which is wrapped by the LISP
code and outputs 8-bit synth sounds (which are then used by the pattern
generator). Because the synth definitions are simple JSON hash maps
there is a fun pseudo-evolutionary technique I was able to use where you
interpolate between the values of two synth definitions to generate new
sounds based on two synth definitions that you like.
I also built a little hardware Impulse Tracker renderer based on a
Raspberry Pi running XMP with my
friend Dimity. It has a Pocket Operator style sync output and runs
directly into the mixer that both share the same timing and the fx can
be quantised to the music which is playing.
If you're interested in the music hardware that Dimity and I are
building and selling you can stay updated at
bzzt.studio.
In the image at the top of this post the hardware Impulse Tracker
renderer is the little box on the right hand side. The RPi mixer/fx unit
is to the top right of the C64 keyboard. The Korg Nanokontrol2 strapped
to the C64 keyboard is controlling the fx and mixing parameters on the
RPi. They keyboard itself was for playing live synth sounds (a very
simple arpeggiating subtractive synthesizer built in Pd).