Fine Tuning (Translations)

A program such as MMA which is intended to be run of various computers and synthesizers (both hardware keyboards and software versions) suffers from a minor deficiency of the MIDI standards: mainly that the standard says nothing about what a certain instrument should sound like, or the relative volumes between instruments. The GM extension helps a bit, but only a bit, by saying that certain instruments should be assigned certain program change values. This means that all GM synths will play a "Piano" if instrument 000 is selected.

But, if one plays a GM file on a Casio keyboard, then on PC soft-synth, and then on a Yahama keyboard you will get three quite different sounds. The files supplied in this distribution have been created to sound good on the author's setup: A Casio WK-3000 keyboard.

But, what if your hardware is different? Well, there are solutions! Later in this chapter commands are shown which will change the preselected voice and tone commands and the default volumes. At this time there are no example files supplied with MMA , but your contributions are welcome.

The general suggestion is that:

  1. You create a file with the various translations you need. For example, the file might be called and contain lines like:

    VoiceTR Piano1=Piano2
    ToneTr SnareDrum2=SnareDrum1
    VoiceVolTr Piano2=120 BottleBlow=80
    DrumVolTr RideBell=90 Tambourine=120

    Place this file in the directory /usr/local/share/mma/includes.

  2. Include this file in your ~/.mmarc file. Following the above example, you would have a line:

    Include yamaha

That's it! Now, whenever you compile a MMA file the translations will be done.

All of the following translation settings follow a similar logic as to ``when'' they take effect, and that is at the time the VOICE, VOLUME, etc. command is issued. This may confuse the unwary if GROOVES are being used. But, the following sequence:

  1. You set a voice with the VOICE command,
  2. You save that voice into a GROOVE with DEFGROOVE,
  3. You create a voice translation with VOICETR,
  4. You activate the previously defined GROOVE.

does not have the desired effect. In the above sequence the VOICETR will have no effect. For the desired translations to work the VOICE (or whatever) command must come after the translation command.


In previous section you saw how to set a voice for a track by using its standard MIDI name. The VOICETR command sets up a translation table that can be used in two different situations:

VOICETR works by setting up a simple translation table of ``name'' and ``alias'' pairs. Whenever MMA encounters a voice name in a track command it first attempts to translate this name though the alias table.

To set a translation (or series of translations):

VoiceTr Piano1=Clavinet Hmmm=18

Note that you additional VOICETR commands will add entries to the existing table. To clear the table use the command with no arguments:

VoiceTr // Empty table

Assuming the first command, the following will occur:

Chord-Main Voice Hmmm

The VOICE for the Chord-Main track will be set to ``18'' or ``Organ3''.

Chord-2 Voice Piano1

The VOICE for the Chord-2 track will be set to ``Clavinet''.

If your synth does not follow standard GM-MIDI voice naming conventions you can create a translation table which can be included in all your MMA song files via an RC file. But, do note that the resulting files will not play properly on a synth conforming to the GM-MIDI specification.

Following is an abbreviated and untested example for using an obsolete and unnamed synth:

VoiceTr Piano1=3 \
Piano2=4 \
Piano3=5 \
... \
Strings=55 \

Notes: the translation is only done one time and no verification is done when the table is created. The table contains one-to-one substitutions, much like macros.

For translating drum tone values, see DRUMTR.


It is possible to create a translation table which will substitute one Drum Tone for another. This can be useful in a variety of situations, but consider:

To set a translation (or set of translations) just use a list of drumtone values or symbolic names with each pair separated by white space. For example:

ToneTR SnareDrum2=SnareDrum1 HandClap=44

will use a ``SnareDrum1'' instead of a ``SnareDrum2'' and the value ``44'' (actually a ``PedalHiHat'') instead of a ``HandClap''.

You can turn off all drum tone translations with an empty line:


The syntax and usage of DRUMTR is quite similar to VOICETR.


If you find that a particular voice, i.e., Piano2, is too loud or soft you can create an entry in the ``Voice Volume Translation Table''. The concept is quite simple: MMA checks the table whenever a track-specific VOLUME command is processed. The table is created in a similar manner to the VOICETR command:

VoiceVolTr Piano2=120 105=75

Each voice pair must contain a valid MIDI voice (or numeric value), an ``='' and a volume adjustment factor. The factor is a percentage value which is applied to the normal volume. In the above example two adjustments are created:

  1. Piano2 will be played at 120% of the normal value,

  2. Banjo (voice 105) will be played at 75% of the normal value.

The adjustments are made when a track VOLUME command is encountered. For example, if the above translation has be set and MMA encounters the following commands:

Begin Chord
   Voice Piano2
   Volume mp
   Sequence 1 4 90

the following adjustments are made:

  1. A look up is done in the global volume table. The volume ``mf'' is determined to be 85% for the set MIDI velocity,

  2. the adjustment of 120% is applied to the 85%, changing that to 102%.

  3. Assuming that no other volume adjustments are being made (probably there will be a global volume and, perhaps, a RVOLUME) the MIDI velocity in the sequence will be changed from 90 to 91. Without the translation the 90 would have been changed to 76.

This is best illustrated by a short example. Assume the following in an input file:

Solo Voice TenorSax
Solo Volume f
Print Solo Volume set to $_Solo_Volume
VoiceVolTr TenorSax=90
Solo Volume f
Print Solo Volume set to $_Solo_Volume

which will print out:

Solo Volume set to 130
Solo Volume set to 117

The second line reflects that 90% of 130 is 117.

To disable all volume translations:

VoiceVolTr // Empty table


You can change the volumes of individual drum tones with the DRUMVOLTR translation. This command works just like the VOICEVOLTR command described above. It just uses drum tones instead of instrument voices.

For example, if you wish to make the drum tones ``SnareDrum1'' and ``HandClap'' a bit louder:

DrumVolTr SnareDrum1=120 HandClap=110

The drum tone names can be symbolic constants, or MIDI values as in the next example:

DrumVolTr 44=90 31=55

All drum tone translations can be disabled with:

DrumVolTr // Empty table


Some minor values can be adjusted via the TWEAKS command. Each item is set as an OPTION=VALUE pair. Currently the following are valid:

Sets the default (initial) voice to use in DRUM, SOLO and MELODY tracks. You can use a numeric value, a mnemonic name, or even an extended voice name (see here). Examples:

Tweaks DefaultDrum=22
Tweaks DefaultDrum=8.9.22

and, assuming you have set up a PATCH SET (see here):

Tweaks DefaultDrum=MyDrumKit

Be careful when using this option with Solo/Melody tracks set to DRUMTYPE. If you set a VOICE (to use a different drum set) before setting a SOLO or MELODY track as DRUMTYPE this option will overwrite your changes.

Sets the default (initial) voice to use in tracks other than drum. The same extended voicing options as detailed for DEFAULTDRUM apply. Examples:

Tweaks DefaultVoice=99
Tweaks DefaultVoice=MyFunkyPiano

Set the type of chord produced with the ``dim'' chordtype. By default a diminished chord is a ``dim7''. However you can toggle this behaviour with:

Tweaks Dim=3
Tweaks Dim=7

You can place several TWEAK commands on a single line; they are processed in order.

In most cases the best place to apply these tweaks, if needed, is in your mmarc file.

Bob van der Poel 2017-03-25