I imagine that live-coding music is the closest one can get to feeling like a hacker cruising through cyberspace engaging ICE (Intrusion Countermeasures Electronics) in hand-to-hand combat that looks like a dance.
The musician, Switch Angel, has created a microgenre that runs off vicarious enjoyment of this. Jack in:
The tool that she’s using in that video is Strudel. Its most striking feature is the use of pattern microformats1 to define rhythm and melody.
1 The specific microformats Strudel uses are lifted directly from Tidal Cycles a Haskell-based tool that pioneered this whole approach to live coding, albeit building on decades of previous work from the SuperCollider community and others.
The sounds we hear, though, are generated by a fixed function synthesizer that combines a sampler and standard pipeline of audio FX units. When Switch Angel invokes duck to make the kick drum pump through the bassline, she’s configuring one of those standard FX units.
At first blush, the inflexible and monolithic nature struck me as poor design.
In fact, it’s the genius of the thing.
Knob-per-function
Up until the 80s synthesizers had a simple fixed signal pipeline. Every parameter you could control had a lovely big knob to twist.
In contrast, the digital synths of the 1980s and 90s offered more power, but at a price: there were so many parameters now that to save space, they moved behind primitive menu-based UIs.
The loss of immediacy translated into a professionalisation of sound design. Early dance music runs on random sequences punched into a 3032. The hallmark of 90s dance music is the preset – think of the iconic DX7 piano or D50 Pizzagogo.
2 Realistically, as long as there’s dance music we’ll have the squelch of a 303.
From the 2000s onwards there was a marked swing back to “knob-per-function”. It continues to this day with instruments like Hydrasynth. Most knobs never get used, but they’re there and you can tweak them. You can play the instrument.
APIs you can play
Strudel, then, has something of this character. The API exposes each parameter of the monolithic monosynth as a separate method. They can be folded together into a single expression that can be executed with a swipe at the enter key.
This runs against normal design instincts in software where we favour modularity, abstraction, and separation of concerns.
Libraries for interactive data analysis share this instinct: pandas and numpy have big, flat top-level namespaces stuffed with functions to tweak data as it flows through the notebook.
By flattening the synthesizer into a monolith, Strudel makes a conscious trade: the infinite flexibility of the underlying DSP for the immediate kineticism of an analog front panel.
You lose the ability to rebuild the instrument from scratch mid-set, but you gain the ability to play it.