Subsections


Randomizing

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.

RndSeed

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.


RSkip

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.


RTime

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:


RDuration

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:


RPitch

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:

Scale
By default the SCALE (or alternately SCALETYPE) is set to CHROMATIC. However, you can also use CHORD or SCALE. In this case a note is selected from the appropriate list of chord or scale notes using a random value from the offset list. The current note is incremented (or decremented) by that value. Use of CHORD or SCALE should all but eliminate dissonance in the selected notes (not always since the original note might be dissonant). Be cautious using large values: it can very easily generate notes completely out of the current octave range.

Offsets
As detailed above, this is a simple list of values. Any values greater than 12 or less than -12 will be reported as ``large'' (this is a warning, not an error). Using a number of ``0'' values will reduce the number of note changes (adding 0 has no effect). And, you can use a range like ``0-3'' or even ``-2-0,4-7''.

Bars
By default this option is applied to all bars in the current sequence. Using the BARS option will limit the effect to the specified bars.

Rate
By default 25% of notes are modified. However, you can reduce or increase the effect by setting a different rate. The specified value is a percentage in the range 0 to 100 (using 0 effectively turns the option off).

A complete command line might look like:

Solo RPitch Scale=Chord Rate=30 Bars=1,3 Offsets=-2-2

Other Randomizing Commands

In addition to the above, the following commands should be examined:



Footnotes

... values13.1
Yes, this is a contradiction of terms.
Bob van der Poel 2017-03-25