Sadly I don't see MIDI exporting support. I looked at making one of these music generation programming languages before, but just ran out of time for it. My goal was quite ambitious though:
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
You need an accurate timing resolution of less than 1ms for useful groove nudging, and it's really tough to get PCs or Macs to be that precise on any OS.
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.
It seems you're forgetting that everything is buffered and all events are timecoded. This is how pretty much all music software works, and it means the final audio is synchronized down to sample precision, regardless of any hardware latency. If the hardware is too slow and you're doing realtime, the audio will stutter, but this doesn't affect timing precision within the audio stream.
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.
Regardless of the complications of real-time audio with Ruby, I wasn't intending that. I was talking about generating MIDI files (with very fine resolution timing) and then playing back the already generated MIDI files, so I had no worries about that. I was only trying to figure out an easier way than drawing on a piano roll
MIDI I/O is always a nice feature, and having programmed around MIDI quite a bit, I think you make it sound more difficult than it is. It's difficult if you need to write all the MIDI from scratch, but it's easy if you have access to a helper library that does all the low-level for you, which I believe is available for Clojure. It also lends itself well to progressive implementation, for example starting with simple exporting of notes and progressively adding more complete exporting features.
(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.)
It looks like they are planning on adding a MusicXML export from this issue https://github.com/alda-lang/alda/issues/44. Is there any tool which convert from MusicXML to MIDI?
It would be useful if it had a tool to convert MIDI files to source code (ideally with some sane automatic structuring). I've sequenced some 15 megabytes of MIDI files, and would love to have them in a form suited for version control.
I'm really surprised at how many programming languages for music there are.
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.
Nice to see something like this - reminds me of my initial love of programming in QBasic. My oh my the noise that was going on in the classroom that day. Quite an impressive looking way to simplify and open up two worlds. Hope to give it a try eventually.
Yeah with lilypond you have support for world music notation most of these music frameworks assume you're only working with standard western music styles, lilypond is really powerful.
I've found Frescobaldi to be a terrific interface for Lilypond with some useful shortcuts if you're not an experienced user. Lilypond is indeed a marvellous piece of software.
https://news.ycombinator.com/item?id=10177716
https://news.ycombinator.com/item?id=10662598