One criticism of computer generated music is that all to often it's too predictable or mechanical sounding. Again, in MMA we're not trying to replace real, flesh and blood musicians, but applying some randomization to the way in which tracks are generated can help bridge the human--mechanical gap.
All of the random functions (RTIME, RSKIP, etc.) in MMA depend on the Python random module. Each time MMA generates a track the values generated by the random functions will be different. In most cases this is a “good thing”; however, you may want MMA to use the same sequence of random values13.1 each time it generates a track. Simple: just use:
RndSeed 123.56 |
at the top of your song file. You can use any value you want: it really doesn't make any difference, but different values will generate different sequences.
You can also use this with no value, in which case Python uses its own value (see the Python manual for details). Essentially, using no value undoes the effect which permits the mixing of random and not-so-random sections in the same song.
One interesting use of RNDSEED could be to ensure that a repeated section is identical: simply start the section with something like:
Repeat
RndSeed 8 ...chords |
It is highly recommended that you do not use this command in library files.
To aid in creating syncopated sounding patterns, you can use the RSKIP directive to randomly silence or skip notes. The command takes a value in the range 0 to 99. The “0” argument disables skipping. For example:
Begin Drum
Define D1 1 0 90 Define D8 D1 * 8 Sequence D8 Tone OpenHiHat RSkip 40 End |
In this case a drum pattern has been defined to hit short “OpenHiHat” notes 8 per bar. The RSKIP argument of “40” causes the note to be NOT sounded (randomly) only 40% of the time.
Using a value of “10” will cause notes to be skipped 10% of the time (they are played 90% of the time), “90” means to skip the notes 90% of the time, etc.
You can specify a different RSKIP for each bar in a sequence. Repeated values can be represented with a “/”:
Scale RSkip 40 90 / 40 |
If you use the RSKIP in a chord track, the entire chord will not be silenced. The option will be applied to the individual notes of each chord. This may or may not be what you are after. You cannot use this option to generate entire chords randomly. For this effect you need to create several chord patterns and select them with SEQRND.
One of the biggest problem with computer generated drum and rhythm tracks is that, unlike real musicians, the beats are precise and “on the beat”. The RTIME directive attempts to solve this.
The command can be applied to all tracks.
Drum-4 Rtime 4 |
The value passed to the RTIME directive is the number of MIDI ticks with which to vary the start time of the notes. For example, if you specify “5” the start times will vary from -5 to +5 ticks) on each note for the specified track. There are 192 MIDI ticks in each quarter note.
Any value from 0 to 100 can be used; however values in the range 0 to 10 are most commonly used. Exercise caution in using large values!
You can specify a different RTIME for each bar in a sequence. Repeated values can be represented with a “/”:
Chord RTime 4 10 / 4 |
You can further fine-tune the RTIME settings by using a minimum and maximum value in the form MINIMUM,MAXIMUM. Note the COMMA! For example:
Chord Rtime 0,10 -10,0 -10,20 8 |
Would set different minimum and maximum adjustment values for different sequence points. In the above example the adjustments would be in the range 0 to 10, -10 to 0, -10 to 20 and -8 to 8.
RTIME is guaranteed never to start a note before the start of a bar.
In addition to the above, the following commands should be examined: