Between the dotted lines is the contents of the file theme.solfa. It is written in SF, the solfa music input language. The goals of SF are (1) to provide a pure text method of representing a single melodic line; (2) to keep keystrokes to a minimum; (3) to maximize legibility and expressiveness, subject to the constraints naturally imposed on such a language. I will give a complete description of the language in a future post. Note that there is great freedom in inserting non-language elements such as composer information and marks for use humans to parse the text. Anything that is not recognized as SF text is ignored. Thus we can insert measure numbers, bar lines, etc, ad libitum.
====================================
SONATINA
M. CLEMENTI
Op. 36 No. 1
We set do = C at 261 Hertz:
fundamental:261
decay:0.7
attack:0.01
release:0.04
allegro:
legato:
m:1 || f: q do2 . e mi2 do2 . q stacc: sol, sol |
m:2 | leg: do2 . e mi2 do2 . q stacc: sol, leg: sol2 |
m:3 | e fa2 mi2 re2 do2 . ti do2 ti do2 |
m:4 | re2 do2 ti la . q sol, x |
m:5 | p: q do2 . e mi2 do2 . q stacc: sol, sol |
m:6 | leg: mi2 e sol2 mi2 q stacc: do2, e mi2 do2 |
m:7 | re2 ti do2 la . ti sol la fi, |
m:8 | cresc:4:f sol la ti do2 re2 mi2 fi2 sol2, |
m:9 | f: q la stacc: la2, la2 la2 |
m:10 | cresc:4 e ti do2 re2 mi2 fi2 sol2 la2 ti2, |
m:11 | q do2 stacc: do3, do3 do3 |
m:12 | e re2 sol2 ti2 re3 do3 ti2 la2 sol2, |
m:13 | fi2 mi2 sol2 fi2 la2 sol2 fi2 mi2, |
m:14 | decresc:4:mp mi2 re2 do2 ti re2 do2 ti la |
m:15 | h sol x ||
WE OMIT THE REPEAT …
====================================
Notes: (1) x is a rest whose length is equal to the current rhythm value — the value of the last-read rhythm symbol. (2) The symbols | || . are ignored. The period with space on either side is used to group SF text for readability. (3) A comma attached to a pitch symbol S indicates a phrase ending. A token S, is interpreted by the SF machine as follows. Instead of emitting a tuple (frequency, duration, decay, amplitude) with frequency and duration determined by the current pitch symbol and rhythm value, two tuples are emitted. The frequency of the first is the same as that determined by the current pitch symbol, but its duration is smaller. The frequency of the second is zero. The sum of the two durations is the same as the current rhythm value. That is the sum is the same as what one would have without the phrase ending. We “keep the beat.”
I may explore a different way of expressing phrase endings. Currently attack and release parameters are set as SF registers. The value of these registers is passed to quad2samp, which produces (and therefore shapes) the sampled waveform determined by a tuple. A more flexible solution is for the SF engine to emit sextuples (frequency, duration, amplitude, decay, attack, release) which are then taken as input by quad2samp.
Leave a Reply