Instrument File Format
Instrument File Format
The Instrument File Format (IFF) isUsed to specify instrument maps for physical devices and aids in translating MIDI program changes and bank numbers into legible, easy-to-read strings. IFF files appear as .ini files in the Instruments folder of the directory where you have FORTE installed. IFF files for several common MIDI synthesizers are provided in this folder.Users can create their own map files for other instruments using the guidelines in this document.
One special note about the Yamaha XG files: the file "Yamaha XG.ini" contains a list of the complete set of what Yamaha terms "basic voices." The file "Yamaha XG Ext.ini" includes all the voices in the basic set, plus the voices which Yamaha terms "extended voices." Please note, however, that not all XG instruments support the complete basic set. If you have a Yamaha XG instrument which supports less than the full set, you may want to make a copy of the basic XG file, and then simply remove those voices which your instrument does not support.
The IFF file is a standard Windows INI file which is organized according to sections, keys and values, like so:
Note that there cannot be any spaces around the equality ("=") sign.
There are several required sections: [Info], [Groups], and [Banks]. In addition, each value in the [Groups] section corresponds to an additional section that describes voices in that group. Each of these sections is detailed in the following paragraphs.
The [Info] section contains basic header information about the instrument, such as its name and how it handles bank selection.
The value for this key is the actual filename of the INI file (without the INI extension). If your instrument file is called "My Instrument File.INI", for example, the entry should read:
Name=My Instrument File
This key indicates the type of device and isUsed to indicate the bank selection protocol followed by the instrument. Some instruments ignore all bank change messages. Some instruments recognize only bank change MSB (controller 0), and some recognize both bank change MSB and LSB (controller 32). The key must be one of the following:
If you are unsure, use a value of NoBank.
This section isUsed to group voices with similar characteristics together. For example, all piano variations can be placed under a single group called "Piano". The General MIDI (GM) specification breaks the 128 different program changes down into 8 different groups. Other grouping categories can be defined as needed to best organize the different voices on a particular instrument. It should be noted, however, that the GM specification is a widely adopted standard and should be used whenever possible for grouping different voices. For a listing of specific groups in the GM specification, see the "General Midi.ini" file located in the Instruments directory.
The key for each entry in this section (e.g. 1, 2, 3 above) is ignored but must be unique.
This section lists bank names, which areUseful if you view the instrument file organized by banks.
Unlike the [Groups] section, the key for each entry is NOT ignored and represents the MIDI bank number (from 0-127). In this example, bank 0 would be labeled "General Midi" in the instrument view.
A file of type NoBank has one bank entry (yes, we know it doesn’t make sense, but, you know, computers…). Examples of this type are "General Midi.ini" and "Korg M-1 Native.ini".
A file of type BankMSB may have several bank entries. An example of this type is "Alesis QS-8.ini".
A file of type BankMSBLSB will probably have many bank entries. The key value in this type is the decimal equivalent of the bank MSB and LSB represented as a 14-bit number. To calculate this number, multiply the bank MSB by 128 and add to it the bank LSB. The result is the key value. Some examples to illustrate this:
MSB LSB calculation key
0 12 (0 * 128) + 12 12
40 3 (40 * 128) + 3 5123
127 127 (127 * 128) + 127 16383
The file "Roland SC-88 Pro.ini" is an example of this type.
For each value in the [Groups] section there must be a corresponding section containing voices for that group. Using the values above we must therefore have sections entitled [Pianos], [Basses], [Strings], and so on.
Each voice entry represents the name of the voice, the bank number and the program change number, in that order. Note that bank numbers are zero-based (0-127) whereas program changes are one-based (1-128). The preferred method is to separate each value by a comma, as follows:
0=Acoustic Grand Piano, 0, 1 ; Bank 0, Program Change 1
1=Bright Acoustic Piano, 3, 1 ; Bank 3, Program Change 1
2=Electric Grand Piano, 6, 2 ; Bank 6, Program Change 2
3=Electric Piano 2, 13, 5 ; Bank 13, Program Change 5
If an entry does not have a bank and program number, bank zero is assumed, and the program number is taken from the key (the number of the left side of the "=" sign). In this case the key number is significant and should be 1-based rather than 0-based:
1=Acoustic Grand Piano ; Bank 0, Program Change 1
2=Bright Acoustic Piano ; Bank 0, Program Change 2
5=Electric Piano 2 ; Bank 0, Program Change 5
If an entry has a bank value but does not have a program change value, the key isUsed as the program change. For example:
1=Standard, 0 ; Bank 0, Program Change 1
9=Room, 8 ; Bank 8, Program Change 9
17=Power, 16 ; Bank 16, Program Change 17
An entry must NOT be empty. In other words, don’t do this:
2= ; This entry is INVALID!
EnterprisingUsers who manage to create a well-behaved IFF file and who wish to share it with other owners of the same instrument are encouraged to e-mail the fruits of their labor to email@example.com. We will include it with future releases of our products.