Assigning instruments in MIDI file


So I got this problem that I’m trying to make a MIDI file which I will use in Unity to playback background music. We are using MS GS Wavetable Synth cause that works in Windows environment of course.

The problem is that how I can assign specific sound on MIDI file track so that I can transform that on Unity. I used Halion in Cubase but if I playback that MIDI file on Unity it doesn’t translate right cause the sounds are different. So I want first track to use Slap Bass sound and the next one Drums etc.

Try the General MIDI 1 Sound Set. Here you can see what MIDI Program Changes should be sent to call up your desired instrument. You can enter these manually into a Cubase track using the list editor, or on a controller lane in the keyboard editor, or you can go to “File/Preferences/MIDI/MIDI File” to change your Cubase “MIDI Export” settings so it will insert relevant program changes based on what you have set in the ‘track inspector’. Note, if you want to change programs in the middle of a song (I.E. swapping between pizzicato and arco strings), then you’d need to enter the Program Change events in the sequence (use a controller lane in key edit, or assign it to a symbol or text in an expression map via score editor, or key them in in using a list editor).

It’s possible to have Cubase play back directly to the MS GS Wavetable Synth itself. You’d simply direct the tracks’ MIDI output to the MS Wavetable Synth.

In Cubase, MIDI Track inspectors allow you to punch in a base Program Bank and Program Number for the track. For GM1 you can ignore bank select messages. If you want to take advantage of GM2 programs then add the relevant bank select calls. Note that Cubase Inspector bank select messages are a special sort of command that combines the MSB and LSB of a bank. If your listing has them seperated here is how to convert them into the sort of bank select entry supported in a Cubase track inspector:

If you like, you can go into “Devices/MIDI Device Manager” and assign a convenient GM sound-bank to the MS Synth MIDI output. This causes Cubase to offer a searchable pop-up list of instruments you can choose by name to the MIDI track inspector. At that point, you’d see the instrument names pop up right there in the track inspector.

There is a GM1 map shipped with Cubase, and if you need a GM2 map you can find one here (Simply import it as a new MIDI Device, and direct it to your Microsoft synth). I made this map so it’s easy to see which instruments are supported by all GM instruments, and which ones are GM2. Note, if you call a GM2 patch on a GM1 instrument, it’ll simply ignore the bank-select message and call up a very similar base instrument (I.E. Grand Piano instead of Grand Piano Wide). Also note that GM1 instruments only accept drum kits on channel 10. GM2 instruments can take kits on either/or/both channels 10 and 11. (19.2 KB)
Also note that Hailion does provide a GM1 Mode or Sound Set. In addition to having the GM1 program list, it supports the CC91 (Reverb) and CC93 (chorus) send level offerings of GM2 (of course you’ll need to choose and set up the fine tuning of these effects manually to your liking in Halion…I.E. Do you want a big hall reverb, or a small room reverb?). Sequences made using Halion in this mode should come out with the right instruments, and be pretty well mixed when played in the Microsoft synth.

If you’re using Halion SE or Sonic, you can put the VSTi into GM mode in the Halion’s “Options”. If you are using a full version, such as Halion 5, then you’d load the General MIDI Multi Template. Halion generates its own ‘patch list’ for the track inspector, so you do not need to do anything special in the “MIDI Device Manager” to get its patch list.

Halion SE GM Mode:

Halion Sonic GM Mode:

Halion 5 General MIDI Multi Setup:

Have a look at THIS Microsoft SITE, and THIS MMA SITE for more information on how to prepare a Standard General MIDI file.

It’s also a pretty common practice to put SYSEX commands at the start of the file that’ll put many instruments out there into GM1 mode.

F0 7E 7F 09 01 F7

Optionally at the end of the file one can send this to have the instrument exit GM mode.

F0 7E 7F 09 02 F7

I’m not sure, but I believe the GS set might make this synth GM2 compatible. GM2/GS offers more sound choices, as well as some FX banks for basic reverb and chorus. Since alternate variations of instruments are based on the same program number (but with added bank select messages) GM2 files should play fine on GM1 instruments and vice-verse, but GM1 mode instruments will not have the added enhancements (FX, and multiple drum kits). It’s worth a try:

The sysex message to put compatible instruments into GM2 mode is:

F0 7E 7F 09 03 F7

Again, turning off GM mode is:

F0 7E 7F 09 02 F7

For all the details on both GM sound sets, I recommend grabbing the full GM spec sheets from the site referenced above.

Finally, if you want to be able to audition the track(s) in a different VSTi that does NOT have a GM instrument mapping available, then it is possible to copy the track and then use a “MIDI Logic Editor” to quickly and easily convert all your program changes from GM to whatever your next VSTi needs. I.E. Make a quick Logic Editor to change all Program Changes on a track set at 49, to 37. It’s also possible to do this in real time via MIDI transformers, but for simplicy sake, just work with copies of the tracks, neatly organized in folders for each VSTi you’d like to hear it on :slight_smile:

Bumped due to numerous edits and additions to my initial post above…

Hi Brian,

Thank you so much for the detailed information. I’m currently in a trial period with a company that sells MIDI transcriptions of popular music, and they’d like to see what I am capable of as far as my transcription skills go in order to determine whether or not they would like to hire me. I’m new to arranging GM, and so after some tinkering around during my initial test with the company, I ended up using HALion Sonic SE 2 as it contains a version of the GM 1 Soundset. My problem however, is that the sounds are substantially different in HALion when compared to the output of the MS Wavetable Synth when heard through Windows Media Player. This shouldn’t be a problem given the fact that I should be able to output directly to the MS Synth while composing the file in Cubase, however when I select it as the output for the MIDI track, I hear nothing. It would really help me to be able to hear what I was composing as opposed to having to export it, listen to it externally, and make changes based on that. Any help would be greatly appreciated.



It should work. Make sure whatever speakers you have set as the ‘default’ for your Windows sound are turned up. The synth isn’t going to play back through the ASIO drivers in Cubase. Instead it’s going to play back through the Windows DS Mixing Matrix.

In short, the MS Synth is NOT a true plugin…Cubase is more or less using it as an external stand-alone app. It just hooks to it and sends it some MIDI data. The MS Synth decides where to send its audio from “Windows’s” audio settings rather than from Cubase’s.

MS Synth is going to use whatever audio device Windows itself uses by default (Direct Sound?). Meanwhile, many audio applications like CuBase prefer to access a device directly via some other driver method (ASIO/WDM/etc.).

In my case I have Cubase set to use a different sound card from what every thing else in Windows is using.
Cubase is using ASIO drivers to play back through a nice sound card to my studio amp. Windows is set to use the sound chip built into the motherboard and it plays through some cheap computer speakers.

The windows wavesynth driver plays through my cheap computer speakers rather than over my studio amp. To change this behavior, I’d need to swap my default audio output for Windows to use the same audio device as Cubase is using.

Imagine that I have Cubase set to use my Delta 1010 audio device, which is connected to my big amp and studio monitors. If I want the MS synth to also play over these speakers, then I’ll need to redirect Windows default playback device to my Delta 1010 as well.

  1. Right click the speak Icon in my Window’s Task Bar:

  2. Find and right click My Delta 1010 outputs going to my Amp/Speakers and set it as the default Windows Playback Device.

Now when I use the MS Synth I hear it through my Studio Monitors instead of over the cheap speakers connected to my motherboard’s Audio.

Be aware that general Windows noises will also come through as well unless you find a way to mute them (perhaps via the Windows Volume Mixer?). Don’t forget to change it back to where you normally like things when you’re done using the MS Synth. You might also find that the MS Synth pops up in the Windows Mixer when it’s in use and actually playing something. To get to the Windows Mixer, right click the speaker icon in the task bar and choose
“Open Volume Mixer”. In my case it pops up, but shows as a Cubase process, and plays through whatever device is set as default for Windows itself: