SuperCollider – A platform for audio synthesis and algorithmic composition
supercollider.github.io
supercollider.github.io
Tidal is another interesting project in that vein (though without the visual part): https://tidalcycles.org
The range of practical tasks for which this kind of tool would be my first choice is very narrow, but even if you have no clue what you'd do with it, it can be worth checking out for an afternoon just to experience a neat little declarative language that happens to go "beep boop [beep boop]" (yes, that is a snippet of valid code) as a side effect.
The documentation makes installation/setup quick and easy enough that it's worthwhile even if you have no other use for SuperCollider and just do it for the language tourism, using the included default sound bank. For example you could try code-golfing a rumba clave.
For someone like me, who doesn't have much time to context switch when playing around with making music, sticking with Clojure, which I've settled on as my language of choice, is a no brainer.
I enjoyed playing with overtone very much a few years ago. Haven't been at it in while.
Are there any new learning resources or pieces of the ecosystem I should know about?
The whole project looks unbelievably beautiful and useful -- but especially what I outlined above!
Remember that everything in audio has analogous aspects in Physics, Electronics, Electrical Engineering, etc., etc.
In other words -- I believe this has broader applications than audio alone...
I just tried searching "Jupyter audio live coding" for fun and it unearthed quite a few interesting results, but the real-time ones tend to involve SuperCollider or something similar. E.g. I discovered NSynth [0], which seemed like magic for a minute (they use Tensorflow to make a synthesizer, there's even an intrument for Ableton Live!) until I found out how they ‘cheat’ (pre-computing a wave-table for multisampling).
Upon digging a bit deeper it turns out using vanilla SciPy for real-time DSP is totally a thing.
Live-coding adds some additional demands regarding a different kind of latency — pre-computations need to happen as quickly as possible — but it seems feasible.
But I have two noteworthy links:
https://warrenweckesser.github.io/papers/weckesser-scipy-lin...
Particularly “Filtering a long signal in batches” on page 6, where it shows how to apply the Butterworth filter from the previous section to individual windows while preserving its state across invocations. As I'm familiar with NumPy, but very ignorant about scipy.signal, this was the ‘Bingo!’ moment for me :)
https://scikit-dsp-comm.readthedocs.io/en/latest/
> This allows in particular demodulation of radio signals and downsampling to baseband analog signals for streaming playback of say an FM broadcast station.
I didn't dig into where it does the heavy lifting for that (sample rates in the MHz range) — there may be some C/C++ involved. But the docs show some nice examples of how to do streaming audio DSP with NumPy, SciPy and PyAudio inside Jupyter:
https://scikit-dsp-comm.readthedocs.io/en/latest/nb_examples...