47
simply, our parser now controls the amount of musical time between events, depending
on whether events occur and on the current state of a variable (the “note delta time”,
afterwards NDT). As a result, time only advances when ‘active’ symbols are read from
the string, though the actual distance between events is determined by parametric
information. The mapping table for the note delta times in the musical example that
follows is also a bit more sophisticated than simply adding and subtracting to the duration
of notes, as we were doing previously. For this parser, we decide on a 4/4 metric grid.
NDT values in the range below four beats (an entire measure) change by increments of
exponential values. For example, if our current NDT is a half note, a symbol ‘+’ will
increment the pacing to a quarter note. Further ‘+’ symbols will speed up the NDT to
eighth notes, sixteenth notes, thirty-second notes, up to a salience threshold we can define
ahead of time. NDT values above four beats in length, however, change in linear
increments of quarter notes, so that successive ‘-’ symbols will change an NDT of four
beats to five beats, six beats, seven beats, etc.
Secondly, we’ve made the four symbols featured in the production list ‘active’ as
well as parametric. The symbols ‘F’, ‘G’, ‘Q’, and ‘Y’ all generate a note in the music,
but they determine their pitch by making a relative intervallic jump from the previous
note’s position prior to sounding. By placing the transposition before the actual note, we
perform the musical equivalent of a prefix rather than a postfix operation on the current
pitch height. As a result, the symbol ‘F’ will always sound a minor third above the
previous note. If we had done this the other way around (sounding the note, then
transposing), the pitch sounded by an ‘F’ would depend entirely on the transposition level
set by the previous ‘active’ symbol, which would miss the point.