A music programming language for musicians
github.com
github.com
Sébastien Rannou has published a tutorial on how he live coded his fabulous cover of Aerodynaic by Daft Punk. https://aimxhaisse.com/aerodynamic-en.html
More lead sheet, less orchestral score.
1. Support MIDI exporting (so you could get it into a DAW)
2. Support timing nudges and randomization (ie, with drums it's common to play slightly ahead or behind the beat, and somewhat random timing for humanness factor)
3. Be easier to write than it is to manually do on a piano roll
So far though, this is a pretty hard set of things to do all at once. I have a design while using Ruby as a DSL, but it's just difficult to make it all come together
edit:
To elaborate a bit more on timing nudges, I mean play on beat for measures 1-4, then on measures 5 and 6 play slightly ahead of beat (but using the same actual playing pattern etc).. Most of my ideas were focused on drums rather than general instruments because drums are the only thing I've had to use MIDI for so far
Shameless plug of the day, check!
(I know, you're gonna tell me "add it yourself"! Which is a good point, but wait, let me find an excuse... Clojure isn't exactly my cup of tea, and my current audio programming interests aren't really in line with the direction this project is taking.)
athenaCL also supports working with nifty things like Xenakis sieves (https://en.wikipedia.org/wiki/Iannis_Xenakis) and Markov chains
If you use a high level language like Ruby, js, or Python the actual timing will be randomised anyway.
For maximum accuracy you need a low level scheduler written in C++ with a few special tricks. Of you can farm out the timing to something like JUCE - which isn't quite perfect, but is good enough for most applications.
For example, when a VST plugin is asked to process a block of audio, it receives a buffer and an array of events with their exact positions in the buffer. All components are connected to each other in this manner. So even if you're using a slow language, timing will definitely not be randomized, though perhaps, as you add more code, you will reach the point where it's too slow for realtime slightly earlier than if you were using a highly efficient compiled language.
What I think is interesting is how few of them seem to be aware of tracking style interfaces and how those might be better extended to do many of the kinds of things these languages offer.
I remember showing some programming friends some examples of what trackers look like and the response is usually something like "you have to program the music?" or "oh! it's like asm for music!"[1]
It's a much nicer way of laying down notes quickly and has some pretty mature ideas behind it as a music composition paradigm and offer a huge variety of possibilities for music composition.[2][3]
Writing with trackers is also fast. When you get really good with these tools it's possible to sketch out a 2-3 minute song in 30-60 minutes - softsynths and all.
1 - https://www.youtube.com/watch?v=u3xHPIuX3s4 2 - https://www.youtube.com/watch?v=45BH12-O_94 3 - https://www.youtube.com/watch?v=iUx8PrDqUiY
Related: have you seen this? https://maraoz.com/2016/02/02/abc-rnn/