| ScoreCode | HomePage PageList |
|
Back to PatternCascade A musical score where single characters in a string describe a musical sequence. Designed to be generated and processed in realtime, rather than as a musical record or document. Basic Tokens 'o' : note on 'x' : note off '+' : pitch up one semitone '-' : pitch down one semitone '!' : reset pitch to root frequency '.' : rest '/' : pan right '\' : pan left '|' : center pan '^' : reset all following patterns in cascade to start '<' : reset following patterns in cascade to start '[' : push freq state ']' : pop freq state '@' : stop pattern (resets on pattern above in cascade sending a "<" or "^") The score is designed to allow music to be generated by algorithmic processes, so implementations should silently ignore unknown characters which may be a side effect of the process that generated them. Polyphony Multiple notes can be triggered at once, simply by calling them one after another, for example: !o++++o+++o Will play a C major chord (consisting of C4,E4 and G4 where the root note is C4) !o++++o+++o...+o++++o+++o... Will play C major chord, rest for 3 beats and then play C# major (C#,E# and G#) Tuning No specific tuning is specified in the score, note intervals may be equal temperament (as illustrated above) or some other system entirely. The current implementation specifies the note interval in a seperate control, that can be changed in realtime to alter the melody live. Percussion Percussion can be specified in a fairly standard way by assigning notes to percussion sounds. Therefore the following matrix: hihat: # # # # # # # # # snare: # - - - # - - - - kick: - - # - - # - # - can be represented as: !o+o.!o.!o++o.!o.!o+o.!o++o.!o.!o++o.!o Extension 1.1 Pattern message cascading Patterns talking with each other will provide a more connected cause/effect feel to the music. The message passing system is inspired by the loop trigger events in the spiralloops application. Patterns themselves are considered to be part of a list, executed in order, where messages are passed from one pattern to the other (cascade) down the chain. Some patterns will act upon the state of variables set by these messages. Messages Messages allow communication between patterns. They take the form of upper case letters, and will be true if previous patterns have activated them in their current tick. The variable is set in all patterns following (not including?) the current one. Branches Branches are conditional bits of code that will be executed if a specified variable is set. Support for else? logic combinations? Maybe not, need to keep this simple. Example score Pattern 1: o.A.o Pattern 2: ......[Ao+o+o]... Pattern 2 will only enter the branched section "o+o+o" when A is flipped to true at that time. More complex Pattern 1: o.A.o Pattern 2: ......[AB.B.B]... Pattern 3: [B+]o.o.o.o.o Pattern 3 will increase the note when pattern 2's B state is flipped to true, in turn controlled by pattern 1's A message. And so on... Extension 1.2 Arbitary parameter control Any values on a device such as a synth patch, or sampler - controlled via scorecode scripts. Lower case letters mapped to parameters: a+ : increase parameter "a" a- : decrease parameter "a" a! : reset parameter "a" |
|
This work is licensed under a Creative Commons License |