If you think as a programmer you might be happier around low-level things, take a look at Soundpipe, which contains those same fundamental elements again - often with the same or similar names to their equivalents in the above programs - but in plain C code.
https://paulbatchelor.github.io/proj/soundpipe.html
For something a little more 'live' and high-level built on that library by the same author, check out Sporth, or another guy's browser-based embedding of it called AudioMasher - which has some very nice examples.
https://paulbatchelor.github.io/proj/sporth.html https://audiomasher.org/
SonicPi/Overtone or Gibber are also nice also as they are based off of existing languages.
You can make midi interfaces in Python and plugins in LADSPA and other things with Jack ... lots of programs are fairly extensible these days.
so for instance, instead of a physical instrument connected to a usb port, your software is feeding the midi input into some other software, say something simple like seq42 (https://github.com/Stazed/seq42)
Synthesizers have some interesting things too. https://zynaddsubfx.sourceforge.io/ uses an XML format for its synthesis definition. It also has "learnable midi" as in parts of the interface can be instrumented from a midi controller - so you turn a knob in physical space and it turns in the software accordingly.
So let's go back to the previous part, the part about software defined midi. You can now emit the mutation of the sound and the sound itself into software like that. Here's a 2005 linux journal article with a screen shot (https://www.linuxjournal.com/files/linuxjournal.com/linuxjou...) essentially the stack I just said. https://www.linuxjournal.com/article/8304 ... "2005" you say? yeah, old pianos also still work.
The linux space is littered with generic audio tools that don't really work on their own and must be pasted together with other tools in order to get anywhere, much like in the shell. I did a bit of editing on the linux audio wiki about 3 years ago, it's probably the best place to look: https://wiki.linuxaudio.org/wiki/introduction
It's still just a bunch of hacks on top of hacks. Things break all over the place and latency is a bitch ... I dunno, there's a lot out there.
I think like Haskell and R it's designed for a different profession so to people like me who are programmers first I am scratching my head the whole time. I can do some thing in it, yeah eventually, usually...
The documentation appears complete and I'm sure the compilers are well written, an enormous amount of effort went into it, it's just a problem with me here.