A music language that comes with a fully-loaded set of string capabilities, including regular expressions, would allow users to develop their own methods for notating music. For example, here is a horizontal representation for rhythm guitar.
@0 strum('C', '/... /... /./. /...') @4 strum('Dm', '/... /... //// /./.') @8 strum('G7', '/... /... ///. ../.') @12 strum('C', '/... /... /... ///.')
The slash triggers an event and advances time by a 16th note. The dot just advances time by a 16th note. A space does nothing.
These 4 lines of code represent 24 events. Not only does this shorten the score and save keystrokes, but is far more readable than if each individual event was explicitly written. In fact, I bet there are many guitar players out there that could play this as it’s written, providing he or she was given a brief explanation about the notation.
What about a system for triggering drums? Here’s the all-to-familiar 4-beat rock pattern with 8th note hats.
trigger(hat(), 'x.x. x.x. x.x. x.x.') trigger(snare(), '.... x... .... x...') trigger(kick(), 'x... .... x... ....')
Once again, the music is notated horizontally. Instead of 12 lines of code, there are only 3. Let’s take a look at the vertical equivalent:
@0 hat() @0 kick() @0.5 hat() @1 hat() @1 snare() @1.5 hat() @2 hat() @2 kick() @2.5 hat() @3 hat() @3 snare() @3.5 hat()
In theory, people could write slipmat modules that mimic other text-based notation systems, such as the Csound score language.
import CsoundScore as CS from MyLibrary import bassFM from MyLibrary import pad # For mapping slipmat instruments to a Csound-styled score instrs = {"i1": bassFM(), "i2": pad()} # A Csound-styled score score = ''' i 1 0 2 0.5 7.00 i 1 + . . 6.05 i 2 0 8 0.333 8.09 0.77 1000 ''' CS.playScore(instrs, score) # Play Csound-styled score
That would translate to:
@0 bassFM(2, 0.5, 7.00) @2 bassFM(2, 0.5, 6.05) @0 pad(8, 0.333, 8.09, 0.77, 1000)
Much of this can be done with some of the existing music languages out in the wild. The guitar strum and drum trigger examples can be accomplished in pure Csound code (see dseq — A Drum Machine Micro-Language). Even more so, Csound combined with the Python API can do some truly amazing things along these lines. Though it probably wouldn’t be nearly as fluid as a language that had this in mind when being designed from the ground up.
If you haven’t done so yet, take a moment to ponder the possibilities. And be sure to think about the things others will dream up that can be simply imported into your own compositions/synthesizers/sequencers/etc…
Pingback: Slipmat » x Trigger Notation