Working with and Creating Proper GM Files

The Setup Measure is one measure in front of any music data. This measure is typically used to prepare the receiving device for the data. General MIDI was designed as a protocol that could address a standard list of Voices that could be edited by CC (Control Change) and System Exclusive messages. Because the protocol […]

By Bad Mister

Tagged Under

The Setup Measure is one measure in front of any music data. This measure is typically used to prepare the receiving device for the data. General MIDI was designed as a protocol that could address a standard list of Voices that could be edited by CC (Control Change) and System Exclusive messages. Because the protocol can do this, GM modules could be made very inexpensively because manufacturers could avoid the expensive DRAM where Voice data could be stored in USER Banks. While there are certainly some synthesizers with the official GM logo stamp that also can store User Voices, it is just that it is not a requirement for a tone generator to have User storage for custom sounds.

Therefore, the first measure of a GM file will be full of MIDI messages designed by the author to reprogram a connected GM module. And because all official GM modules will respond to the commands in a similar fashion – the protocol is used widely in all kinds of consumer devices. There are very strict rules about number of layers and the kinds of effects available.

The difference between a GM module and synthesizer like the MX, MOXF, Motif XF, S90XS/S70XS etc., and a synthesizer with the official GM Logo, is that the Yamaha synthesizers pay homage to GM Voice list without using a separate tone chip or engine. Yamaha figures that the customer for these programmable synthesizers would prefer to ‘REVOICE’ the GM file – that is, we think that the synthesizer customer would want to select fully programmed 8 Element sounds with a wide variety of cutting edge effects to replace the rather tame (by comparison) GM bank found in most synthesizers.

So the Yamaha synthesizers do not carry an official GM logo. They do however, have a pseudo-GM bank that follows the basic selection program change protocol – but you are free to substitute your favorite sounds in the place of those found in the GM list, if you wish. The thing is the pseudo-GM bank of the MX, MOXF, Motif XF, and S90XS/S70XS is the same fully programmable tone engine of the host product. So you are free to customize the Effects, apply Insertion Effects to PARTS you wish to feature, etc., etc.

If you are looking for plug-and-play GENERAL MIDI – that it really not what is on offer here. There is an art to REVOICING a GM file for use in the synthesizer and it can be fun and rewarding work. Plus when you have completed your work there is a feeling of accomplishment and that you have truly made the sequence your own. This article will provide you some of the fundamental information you will need to successfully translate a GM, XG or even a GS file to a Yamaha professional synthesizer.

In it you will find a GM Reset command – which will ‘zero out’ the previous data. All the initial Program Change events are found in this Setup measure – by the rules of the protocol, there must be between 100ms between the GM RESET and the next event. Program Changes should be kept away from MIDI Note-On events this is so they do not hiccup on the downbeat of your composition. Imagine changing 16 instruments and playing all happening on the same clock tick – obviously, that cannot happen. It is called a SEQUENCER because the EVENTS (commands) must be recorded and read back in a specific sequence… in a specific order. If you send a NOTE-ON Event after the PROGRAM CHANGE you can expect that NOTE-ON to sound with that new Program. But if it is before the PROGRAM CHANGE, it will not play from that sound – and you need to allow a small amount of time for the instrument change to actually occur. So Program Changes should always precede the first note asked to play from the selected Voice. So 100ms after the RESET, the first Bank Select and Program Change message will be place.

This RESET is very important because in GM the last settings persist… if the song faded out, the MASTER volume will be zero until a message countermanding that zero is received. If tons of reverb were used on track 12 (cc91), you will inherit that from the previous song, and so on. Therefore, GM rule #1 place a GM Reset command as the first event on track 1 of the file.

At the very first clock tick of the SETUP MEASURE, on track 1 is typically where you will find the GM RESET command (as a rule system exclusive messages are kept on track 1 – but the track number does not matter really – they are system-wide messages – but the convention is to use track 1 this makes it easy for anyone editing the file to find them). It will affect all 16 PARTS of the Tone Generator.

GM RESET Command is a hexadecimal message: F0 7E 7F 09 01 F7


This is the GM RESET. It will automatically return all PARTS to GM Bank’s 001 Program: Grand Piano, except PART 10 which will select the GM Drum Kit. It also will return all volumes to 100, set all reverb sends (cc091) to 0, all chorus sends (cc093) to 0, all pan (cc010) to center, flatten all filter settings (cc071, cc074), return MW (cc001) to zero, sets the Pitch Bend to +0000, etc., etc. It returns all GM devices receiving this message to an agreed upon neutral state. This is very important within the protocol, because (as mentioned) there is no required User Bank storage on-board – so a neutral or nominal state has been agreed upon as the starting point.


Next you can expect to see the setup data. General MIDI protocol requires that you allow approximately 100ms of time to pass before you transmit any other MIDI messages to the system. Some recommend 50ms, some recommend as much as 200ms – not to worry – we have a whole measure so there is plenty of time. This pause is to ensure that the receiving device has time to switch and react to the Reset command. RESET is not a casual message – it is a total system reset.

Bank Select – Program Change
In General MIDI Files the Bank Select-Program Change events should appear on each track that you use. These messages are considered “Channel messages”. These are fairly easy to work with on Yamaha sequencers – as Yamaha uses what is called a “packed” event (be sure to check the documentation of your sequencer, if you are using an external device to sequence/edit your data).

Bank Select is a two byte message – a MSB (most significant byte) and a LSB (least significant byte) these two Control Change message each will have a value. This value identifies the bank. Messages will be between 000 and 127. The Bank Select information is followed by a Program Change number (also a number between 000 and 127)

The format is “xxx-yyy-zzz”
‘xxx’ is the MSB value
‘yyy’ is the LSB value
‘zzz’ is the Program Change value

You also will find some sequencers use the long form which involves Control Change 0 (MSB) with a value, followed by Control Change 32 (LSB) with a value, followed by the Program Change event value.
Check your sequencer’s documentation for how to input Bank Select and Program Change commands.
All normal GM sounds are in MSB = 000, LSB = 000

The GM Drum kits are in MSB = 127, LSB = 000


So a Program Change message in the Yamaha sequencer that is:
000-000-000 will recall the GM bank piano: Concert Grand
127-000-000 will recall the GM bank drum kit: Stereo GM Kit (shown above)

You may notices that the PROGRAM CHANGE numbers are one digit off from the Program List. Please note: Program Change events start from 000 and go through 127, Program numbers on the synthesizer are listed from 001 through 128. This happens because when asked to count to ten, most people start with 1, computers start (properly) with 0. This is your first bit of MUST HAVE information. Although the main GM piano is the first sound, its Program Change number is 000.

The long form for the GM piano would be:

Control Change 0, value 0
Control Change 32, value 0
Program Change 0
A Program change message in a Yamaha sequencer that is:

127-000-000 will recall the GM Drum Kit
The long form for the GM Drum Kit would be:
Control Change 0, value 127
Control Change 32, value 0
Program Change 0

So how much time after our GM RESET do we leave before we input the Bank Select/Program Change event….? I recommend that you place your Program Change event on beat 2 (that is 001:2:000)
At a tempo of 120 beats per minute a single beat is 500ms – so we have left plenty of time.
So start with track 1, say you have an acoustic bass sound on track 1. This is GM sound number 33… but is going to be Program Change 032 (remember Program Changes start with 000 so they are off by 1 count).

And in this manner you will do the same to each track. Make sure you place them on Beat 2 of measure 001 – so that they do not interfere with the GM RESET and do not interfere with your music data – which will start at measure 002.

Additionally, in your SETUP MEASURE you can customize your mix with other CONTROL CHANGE messages. Control Change messages can ‘edit’ the sound associated with the track. This is because each track is transmitting to a specific MIDI Channel – and these are Channel messages.

It is highly recommended that any ‘edit’ messages follow the Program Change event. (It would be silly to edit a sound and then change it…)

You can come up with your own scheme as to where these messages occur (if you prepare lots of files this can be helpful in quickly being able to correct and edit them – if you know where to look). When working on the XG Library we had a system where at 005 clock pulse intervals we would program particular events… but you can come up with your own… for example.

At 001:2:005 you might place a command for the track’s volume (cc007)…
…and at 001:2:010 you might place a command for the track’s pan position (cc010), etc., etc
With a system like this you always know where to look to correct some aspect of the GM mix.

Some common CC message you might want to use:

cc001 Mod Wheel
cc007 (channel) Volume
cc010 Pan
cc011 Expression
cc071 Filter Resonance (Harmonic content)
cc072 Release
cc073 Attack
cc074 Filter Cutoff (Brightness)
cc075 Decay
cc091 Reverb Send
cc093 Chorus Send

Remember: the GM RESET neutralizes all of these to predetermined state to where they are not influencing the music. You can simply set the ones where you want some change from the normal setting. In other words, it is not necessary to input a ModWheel command cc001 = 000 because the GM RESET automatically zeroes out the MW. It is not necessary to set the Filter Cutoff back to normal cc074 = 064 because the GM RESET automatically does this… by the way, filter cutoff since it can be “opened” or closed has a neutral point in the middle. Remember MIDI commands go from 000 through 127 so “064” is approximately the middle – and is the filter at neutral – it is not brightening nor darkening the sound.

Hope this short tutorial is helpful – remember the more fastidious you are with your Setup Measure, the better you are able to ensure that the listener will have successful playback on whatever system they play it.

Keep Reading

© 2024 Yamaha Corporation of America and Yamaha Corporation. All rights reserved.    Terms of Use | Privacy Policy | Contact Us