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 |
at the top of your song file. You can use any integer 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.
The BEATS option specifies the beats in each bar to apply skipping to. This is set with a option value setting:
Bass Rskip Beats=1,3 10 20 40 50 |
The above command will set random skipping for notes exactly on beats 1 and 3. The percentage of skipping will vary between each bar of the sequence (10%, 20%, 40% and 50%). It is not possible to set different beats for different bars; the beats option applies equally to each bar in the sequence. Beats are reset to None each time RSKIP is invoked.
One of the biggest problems 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.
Notes:
In a similar manner that the RTIME command, discussed above, sets the start point for a note, this command adjusts the duration of a note.
The RDURATION argument is a percentage value by which a duration is adjusted. A setting of 0 disables the adjustment for a track (this is the default). In its simplest usage:
Bass RDuration 10 |
the command will adjust the duration of every note in a BASS track plus or minus 10%. So, if the duration set starts off as 192 MIDI ticks (a quarter note), the command can change it to anywhere between 182 and 202 ticks.
You can further fine-tune the RDURATION settings by using a minimum and maximum value in the form MINIMUM,MAXIMUM. Note the COMMA! For example:
Chord RDuration 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.
Notes:
Scale RDuration 5,10 0 / 20 |
When creating alternate melody background effects it is nice to be able to add unpredictability to some of the notes. Using an ARIA track (details here) is one way, but it might be a bit much.
The RPITCH option lets you create a predicable set of notes and, at random times, change some of them. Whenever a note is generated (this applies to all notes including chords, melody/solo, harmony and ornaments) the RPITCH setting for the track is evaluated and the note is modified.
The setting is simple:
Bass-Alt Rpitch Offsets=-2,-1,1,2 |
In this case the each note in the BASS-ALT track may be modified. In the offset list, each value sets the number of semitones to increment or decrement the current note by. “-2” means subtract 2 semitones and “2” means to add 2 semitones, etc.
You can have any number of value modifiers. Just remember to have all the values joined by commas. You can set a range of values by joining 2 numbers with a single “-”. So, -3-4 would be the same as “-3,-2,-1,0,1,2,3,4”.
A number of options are available for the RPITCH command:
|
A complete command line might look like:
Solo RPitch Scale=Chord Rate=30 Bars=1,3 Offsets=-2-2 |
Chord-1 RPitch None |
or, with less typing:
Bass-Stuff Rpitch |
In addition to the above, the following commands should be examined: