Mu declares music. It provides a simple type for representing music and combinators to define and compose it.
Music values are interpreted by renderers. Mu has built-in support for rendering music values to MIDI files.
mu
mu.player
Mu_player
Play MIDI music (temporary hack).mu.tportaudio
and mu.tportmidi
Tportaudio
Thin bindings to the portaudio library.Tportmidi
Thin bindings to the portmidi library.`Lazy
case to music values and switch to Stdlib
.Seq instead of lists in a few places. However reading HSoM 8.3.1, it seem finiteness is a good property in the end, e.g. for timing correctness. But it's useful, for e.g. repeating a pattern as much as needed. We should likely add a M.loop ~dur m
combinator. Also infinite parallel is not that useful, maybe simply add a Stdlib
.Seq.t case.Mu.Music.Ctrl.t
is a good candidate, this would allow clients to define custom music annotations. What about Mu.Instrument.t
and Mu.Percussion.t
?