The Artemis Orchestra Competition uses LilyPond as its musical input description language. LilyPond is primarily a means to produce beautifully typeset music scores; but it can also produce MIDI (musical instrument digital interface) output for 'proofhearing' the scores. Unfortunately, LilyPond's MIDI output is not very good: it obeys the notes and any explicit metronome and dynamic markings, but that's about it.
The result sounds like this.
Obviously, to enter the Artemis competition, we needed something that used a lot more of the detail available from the LilyPond input.
LilyPond has an extension language (Scheme, a statically scoped variant of LISP). So I (Peter Chubb) wrote some scheme code that interpreted some of the more commonly used marks in a musical score. The idea was to rewrite the LilyPond input before LilyPond interpreted it, so, for example, slurs and phrases were obeyed, and trills were fully expanded.
After using articulate, the result sounds like this.
The resulting script is called articulate (indications such as staccato or tenuto are termed articulations).
ac:normalFactor (default 7/8) ac:staccatoFactor (default 1/2) \appoggiatura c8 d2. the c will take the time of a crotchet)ac:maxTwiddleTime variable. The simplest way to use Articulate is to use the lilywrap shell script in the tarball, viz:
$ lilywrap inputfile.ly
$ timidity inputfile.midi
lilywrap rewrites the input file by adding an \include "articulate.ly line after any \header block, then inserts \unfoldRepeats \articulate before the body of any \score block. \include "articulate.ly"
\score {
\unfoldRepeats \articulate <<
\context Staff {
\set Staff.midiInstrument="clarinet"
\relative c' {
\time 4/4 \tempo 4=100
c4-. c4( d e |
f\trill) g\turn a b |
c1--
}
}
>>
\midi {}
}
Articulate was first released to the lilypond-user mailing list — see the thread starting there for discussion, etc. Updates will also be sent there, or to the lilypond-devel mailing list.
Alternatively, a snapshot can be downloaded from here