Subsections


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 yamaha.mma 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.
Wrong!

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.


VoiceTr

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.


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:

ToneTR

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


VoiceVolTr

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
End

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.

To disable all volume translations:

VoiceVolTr // Empty table


DrumVolTr

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

bob 2008-09-28