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 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.

The SETUP Bar
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

GMreset

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.

EventList

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

GMdrum

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.

Synthesizer Basics with the MX – Part II


Quick review: The Sawtooth wave, as we heard, can be used to build string and brass like sounds, as well as mellow to bright synth lead sounds. Technically speaking, the Sawtooth wave contains all whole integer multiples of the fundamental pitch. Trranslated to musician-talk means that all the tones in the harmonic series are represented in the resulting tone. You hear the fundamental tone as the loudest – say you plucked an “A” string on a guitar – you hear the pitch as A110, but also your ear/brain is hearing fx2, fx3, fx4, fx5…  where “f” is frequency… each in decreasing volume. So you hear the harmonics at 220, 330, 440, 550Hz – but each is less loud. The proportional volumes of these upper harmonics is one of the things your ear/brain use to recognize, identify and categorize the resulting sound. While the Sawtooth waveform resembles the teeth on a carpenter’s saw, the Pulse wave is a simple ON or OFF situation. Rather than gradually rising and dropping off immediately (Sawtooth Up) or rising immediately and gradually dropping off (Sawtooth Down), the Pulse wave is either maximum or minimum; ON or OFF.  The percentage of the time it is ON versus OFF is critical in what we hear. 

The Pulse wave, as we mentioned last time, is responsible for everything from hollow sounds to nasal sounds and can do some metallic tones as well. When the Pulse wave’s ON status equals the amount of time it is OFF we call this special case a Square Wave. This makes sense because we all went to elementary school where we learned about Squares having equal sides. A square was the one special case of a Rectangle where all sides were equal. You will hear a Square Wave referred to along with the number 50 – as in 50% ON, then 50% OFF, repeat. As you “narrow” the pulse toward 10% ON and 90% OFF, the sound moves from what we describe as ‘hollow’ toward ‘nasal’. The quintessential hollow or Square wave sounds very much like the tone of a Clarinet – even without much editing of the “envelopes” you can hear the very Clarinet-ish/ woody tone of the square wave. As you decrease the amount of ON time in the pulse, the sound gets ‘pinched’, as if you were pinching your nose when you speak, the sound becomes decidedly “nasal”. Think Oboe or Clavinet – these are pinched tones we describe as being nasally.  

All Squares are Rectangles but only not all Rectangles are Square

So while all Square Waves are Pulse Waves, only one special case of the Pulse can be square. Only when the movement is 50/50 ON to OFF. Pulse waves sound distinctly different to our ears from the Sawtooth wave… technically speaking they only reproduce every other whole integer multiple of the Fundamental (f) pitch. That translated to musician-talk means that only the odd harmonics are represented in the resulting tone. fx1, fx3, fx5… each in decreasing volume as you go higher in frequency. It is the relationships between the volumes of the harmonics that the brain uses to identify any particular sound. The harmonics and their relative volumes create a signature as unique as a fingerprint. The closer you are able to emulate this relationship, the more accurate your result will sound.

SquareP50

Contrast this with a P10-1 Wave which is a pulse wave with a short ON time and a long OFF time:

Pulse10 1

PMW
or Pulse Width Modulation. Imagine a Waveform that was designed to continuously change from 50/50 to 40/60, to 30/70, to 20/80, to 10/90 then move back, 20/80, 30/70, 40/60, 50/50 and repeat. This change in the Pulse Width causes a unique and interesting complex sound.

We will also have an example that combines pulse waves of different widths. By adjusting the tuning/phasing you can emulate metallic tones. It is interesting that hollow, nasal, metallic tones, can all be generated from the same waveform source. It is a matter of the loudness of the upper harmonics relative to each other.

On a sample playback synthesizer – we can “sample” any of the waveforms and build Voices directly from them. The results are not generated in the same way as a Voltage Controlled analog synthesizer. An Voltage Controlled analog synth used a different method to generate the basic tone. Things like PWM and Oscillator Sync (we’ll cover that in a future installment) are some wholly “synthy” things that are really unique to analog (voltage controlled) tone generation. But because we’ve sampled a wave going through this undulating motion we can construct sounds that although not generated in the same way, give us a result that “emulates” the voltage-controlled analog instrument. Sampled waveforms can start from a difference point. Don’t confuse this with the differences in “behavior” – a difference in behavior is more about what happens as you manipulate it by applying change (modulating) Pitch, Timbre, or Loudness.

What we will show you is some of the possibilities when building a Voice that starts with a sampled analog waveform as a source…  including some things that simply were not available in the “voltage control” age.

Pulse Waveform Example

Let’s start by exploring a group of very different sounding VOICEs made from the Pulse Wave family

USER:A06 Pulse10 
Pulse10

Here is a your basic 10% ON, 90% OFF Pulse wave. This is a very “pinched”, “nasal” tone. The time of the pulse being On is only 10% and visually makes a very narrow profile for the ON time.

USER:A07 PulseSq50
PulseSq50

Here is your basic perfect square, 50% ON, 50% OFF. This is described as a “hollow” tone. The time of the pulse being On is 50% and visually makes an equal time on/time off profile. 
Using the Editor, click on the checkmark in the USE column to turn OFF and ON Element 2. See how adding a second Waveform, slightly detuned adds dimension and movement to the sound.

Lets combine two pulse waves (a Sqaure 50% and a tighter Pulse 25%) to create a metallic tone

USER:A08 CP SteelPan

SteelPan

Explore this sound in the Editor. The AEG is creating a very “percussive” envelope – the sound dies away rather quickly even if a note is held. Again two Elements are detuned and are an octave apart. The Filter EG is a quick percussive envelope with the FEG DEPTH providing much of what we consider the metallic ring. The FINE (tune) parameter indicates that the second Element is up and octave and detuned a good deal flat of true pitch, this adds to our perception of a clanging, ringing, metallic tone!

Below find the ZIPPED download _ this file includes the Sawtooth data from the previous article and adds the new examples shown above. New USER VOICES are always added to the end of the list according to their Category.  So the “Steel Pan” Voice is in the CP or Chromatic Percussion Category; The “PulseSq50” Voice is in the LD or Lead Synth Category; while the “Pulse10” Voice which resembles a Clavinet, is in the KB or Keyboard Category.

Extra Credit: Even though the examples are geared toward the Motif XS/XF, MOXF, and S90XS/70XS you may find some of the discussion applies to all synthesizers – please see the following overview of SYNTH BASICS in my Blog (Bad Mister’s Blog).

Want to ask questions or share your experiences? Join the conversation on the Forum here!

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