This kind of algorithmic music has been a thing for decades. I have a funny memory of going to a university open day as a child in the late 80s/early 90s and a presentation by some boffin with a synthesizer was what made me want to grow up and become a computer programmer.
Back in the early days, I think CSound[0] was the big software, not because it can make especially interesting sounds compared to more "musical" software synths, but because it's a proper programming language which gives people the freedom to do these higher level abstractions.
In the hardware world, a lot of this developed out of arpeggiators and analog sequencers. I remember years ago I had a "P3" sequencer[1] which implemented a lot of these sorts of algorithmic pattern generaton tools - you could do things like quantize to a scale, then set a sequence of percentages that themselves impacted the likelihood of a particular note being played. I see there is a new version of this sequencer[2] too.
Lots of analog sequencers provide similar features, and if you have a modular setup you can ramp the tempo way down and have them control chord progressions or swells instead of 16th note patterns. Pretty sure this is how a bunch of live ambient music was done back in the day.
That was a fairly niche corner of electronic composition, but even in the mainstream of 20 years ago stuff like the Emu Proteus sound modules featured pretty advanced programmable arpeggiators where you could essentially write the skeleton of a musical sequence and then modify what notes of it actually ended up getting played by deciding which original notes to start from. I always came at this more from that minimal/techno/sequence-based side, but then I went to a wedding and saw a wedding singer playing an "accompaniment" keyboard which showed the other side - entire chord sequences and backing instrumentation getting generated in real-time based just on what chord the keyboard player chose to hit with their left hand. It's surely only a small step forward from there to being able to input a higher level algorithm that could develop a whole song.
Back in the early days, I think CSound[0] was the big software, not because it can make especially interesting sounds compared to more "musical" software synths, but because it's a proper programming language which gives people the freedom to do these higher level abstractions.
In the hardware world, a lot of this developed out of arpeggiators and analog sequencers. I remember years ago I had a "P3" sequencer[1] which implemented a lot of these sorts of algorithmic pattern generaton tools - you could do things like quantize to a scale, then set a sequence of percentages that themselves impacted the likelihood of a particular note being played. I see there is a new version of this sequencer[2] too.
Lots of analog sequencers provide similar features, and if you have a modular setup you can ramp the tempo way down and have them control chord progressions or swells instead of 16th note patterns. Pretty sure this is how a bunch of live ambient music was done back in the day.
That was a fairly niche corner of electronic composition, but even in the mainstream of 20 years ago stuff like the Emu Proteus sound modules featured pretty advanced programmable arpeggiators where you could essentially write the skeleton of a musical sequence and then modify what notes of it actually ended up getting played by deciding which original notes to start from. I always came at this more from that minimal/techno/sequence-based side, but then I went to a wedding and saw a wedding singer playing an "accompaniment" keyboard which showed the other side - entire chord sequences and backing instrumentation getting generated in real-time based just on what chord the keyboard player chose to hit with their left hand. It's surely only a small step forward from there to being able to input a higher level algorithm that could develop a whole song.
[0] https://csound.com/
[1] https://www.soundonsound.com/reviews/sequentix-p3
[2] https://www.sequentix.com/shop/cirklon-hardware-sequencer