Autodidact guide to electronic music making on digital computers
[music
synth
autodidact
analog
dsp
]
In the beginning, the LORD created modular synthesizers, and they were good. He sent his Prophets, Bob and Don and Serge, who told all the peoples “Make a joyful noise unto the LORD all the earth, but thou shalt not eat of the fruit of the tree of the digital computer.” But the people hardened their hearts and did not listen. So the LORD sent his prophet Dieter, a voice crying in the wilderness, who said “Repent, repent! For the Eurorack is at hand.” But the people said: “We have no King but Gordon.” And so it came to pass that digital computers became numerous upon the face of the earth. Then angel of the LORD came down and created a multitude of programs to confound their language, so that they may not understand one another’s code. “Now are you happy?” said the angel of the LORD. And the people said: “Do do do, do do do do, do do do do do…”. A list of resources…
Analog synthesizers
This is the way
- Build one! I did…
- Great HN thread on Introductions to Analog Synths — the GA Tech videos on ECE4450 L1: Analog Circuits for Music Synthesis: Introduction (Georgia Tech course) look especially nice
- (June 2024) The new Mki x Erica Synth labor kit would be a nice way to experiment with prototyping different circuits
- (book) Pinch, Analog Days: The Invention and Impact of the Moog Synthesizer
- (June 2024) Just found Prof. Lanterman’s EECE4050: Analog Circuits for Music Synthesis lecture videos
Field-Programmable analog arrays (added 27 June 2023)
This is also the way
- ZRNA software-defined analog boards for $89 including shipping (assuming they are available). Built around the AN231E04 analog array, you get 4 comparators, 8 opamps, switched-capacitors and some auxiliary hardware that you can configure programmably (e.g., via python)…although the availability says “restocking” and the last commit to the github repo was in 2019 which suggests to me that this might be unobtanium
Analog/modular simulators
If you are interested only in committing venial sins, VCV Rack is a pretty decent open-source modular synthesis simulator.
It is certainly easier to copy paste a few more VCOs than it is to solder up a few more modules, but nobody said sloth was a virtue…
Max/MSP visual programming environments
It seems that Max/MSP is a popular choice. It costs money (but not too much on an academic license), but the tutorial within the free trial is enough to give you a sense of how it works. The main problem (for me) is that you need to like clicking and dragging boxes into visual arrangements. And the order of evaluation depends on the location of those boxes. (Hint: It is right to left.) I can see the appeal, but it’s not my style, because I like words and typing. Or fooling LLMs into doing the words and typing for me.
Supercollider
And there came a voice to him, Rise, Peter, make music with your computer. But Peter said, Not so, Lord; for I have never made music with anything digital. And the voice spake unto him again the second time, What the LORD hath cleansed, that call not thou common. … And then Peter laid aside his soldering iron and went down to Joppa…
It seems that supercollider is an open-source, text-based music programming environment (it’s the successor to CSound).
Under the hood, it is a client/server model (like Max/MSP), programmed with an object-oriented programming language, with support for many primitives related to sound generation and processing.
There’s a hardcopy book, but it’s allegedly pretty outdated.
The (online) built in Getting Started With SuperCollider tutorial is okay, but emphasizes programming (rather than sonic) qualities.
Thor Magnusson’s Scoring with Supercollider website/book is a more thorough introduction to the the musical aspects, with practical descriptions of audio tasks.
What I like about it is that he gets you into making sounds (and understanding complex combinations of sound generation) in a more direct way.
The user community as scsynth.org seems active.
Here’s a cute example of a Twitter composition for Supercollider (from the intro to Thor’s book); ordinarily one would add (nonsemantic) whitespace to make it more legible to the humans:
play{HPF.ar(({|k|({|i|SinOsc.ar(i/96,Saw.ar(2**(i+k))/Decay.ar(Impulse.ar(0.5**i/k),[k*i+1,k*i+1*2],3**k))}!6).product}!32).sum/2,40)}
It really shines for explaining concepts. For example, the role of harmonics (Blip
creates a signal with some number of equally weighted harmonics, and freqscope
displays a live plot of the frequencies):
{Blip.ar(256, MouseX.kr(1, 20))}.freqscope // using the Mouse left-right to have
Additionally things like ProxySpace as a way of interaction are really impressive. The thought given to synthesis definition, patterns, and tempo clocks is quite sophisticated, and designed around the needs of sound makers.
Open Sound Control (OSC) is also pretty neat, and I bet you could build a Eurorack module based on the RPi Pico W that could hang out and and send/retrieve OSC messages. Somebody has written an OSC client for the Pico (receive messsages only) so that’s a start…
And if 1-bit music is your thing, the Impulse
and Dust
(random impulse) Ugens will be your thing.
Sonic Pi
Sonic Pi is a livecoding environment built on top of supercollider
Mathematica?
There’s a fairly rich set of audio processing functionality in Mathematica.
For example, I’ve posted a few bytebeat examples. Other classics, like Karplus-Strong string synthesis are pretty easily generated using the available primitives:
freq = 60;
feedback = 0.99;
(* padding runs the audio longer than the brief initial impulse *)
AudioDelay[
AudioGenerator["Pink", .01], 1/freq, feedback,
PaddingSize -> 5]
(* another version with a low-pass cutoff filter *)
AudioDelay[
AudioGenerator["Pink", .01], 1/freq, feedback,
PaddingSize -> 5, Method -> {"LowpassCutoff" -> Quantity[8000, "Hertz"]}]
There’s some powerful audio analysis tools, and of course you get the rest of the lovely functional Mathematica stack to play with, and there’s a lot of general signal processing and transformation that you can do.
But it’s not clear to me that it will scale up to do ambitious audio projects in the way supercollider is set up, nor will you have specialty audio modules like supercollider’s MoogFF
(a digital implementation of the Moog VCF)
Haskell?
I find the idea of the Haskell School of Music amusing, but it seems like the ultimate yak-shave if your goal is making music….
Alternatively tidalcycles is a Haskell-based domain specific language for driving supercollider (comparable to, but with some differences from Sonic-Pi, mentioned above)
Glicol
- (15 July 2024) Glicol is a minimalist programming language for music generation, designed for live coding. Really slick: You specify a graph, not unlike modular synthesis. Has built-in oscillators and filters. Specifying notes and duration is not so clear in the tutorial, but a youtube video and the author’s GPT-4 prompt help clarify some of this.
Digital Signal Processsing
- (03 Oct 2024) Jonathan Dubois asks: I do have a dumb question about analog synthesizers though.. Aside from the cool factor of actual analog, where are the open source digital patch panels? it doesnt seem like it should be that hard to compute pretty much anything you want in real time.
Indeed, it’s a thing.
-
I’ve seen the DaisySeed-based [https://electro-smith.com/products/patch] as one example.
-
Somewhat less polished in terms of final product is the Pico Audio Development Kit
-
Closely related: The VultDSP language (supported on the PicoADK)
-
The Digital Signal Processing Primer has been languishing in my cart for a few years, as has Hamming’s Digital Filters book.