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:
VoiceVolTr Piano2=120 BottleBlow=80
DrumVolTr RideBell=90 Tambourine=120
Place this file in the directory /usr/local/share/mma/includes.
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:
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 \
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:
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:
Sequence 1 4 90
the following adjustments are made:
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
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:
and, assuming you have set up a PATCH SET (see here):
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.
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