Article History
 
 
 
Discussion
 
17799 views
 
46% damifortune
midi (format) View HTML Version
 

Generally speaking, '[b]MIDI'[/b] (Musical Instrument Digital Interface) is a protocol that allows multiple electronic instruments and musical devices to communicate and synchronize with themselves. Though MIDI was first invented in the early 1980s as synthesizers grew into a burgeoning industry, the General MIDI spec was defined in 1991 and is still frequently adhered to today! A composition saved as a MIDI is a sequence of notes and commands that will be played back by the computer's own MIDI drivers. Since this makes a .mid file much smaller than an audio file, MIDI files have a rich history of use in computer games, software, and websites.

This article, though, is about the '[b]MIDI BotB format'[/b], which is for a specific and iconic implementation, '[b]MSGS MIDI'[/b] - the Microsoft GS Wavetable Synth, infamous for coming bundled with Windows since time immemorial (i.e. '[l[https://news.microsoft.com/1996/10/22/microsoft-licenses-sound-canvas-sounds-from-industry-leader-roland-corp/[1996]). If you have spent much time around computers in the last 20-something years, you will probably be familiar with some of these sounds. They are what you hear if you open a .mid file in Windows Media Player. They are also closely related, though not identical, to Roland's SC-55 sound module.


'[#[Tools for creation]
Anything that can sequence MIDI notes and (optionally yet preferably) pipe the results to a MIDI output for testing will suffice. This includes most DAWs such as '[l[https://reaper.fm/[REAPER] (which is not free but can be evaluated indefinitely), Logic, FL Studio, and Cubase. Many standalone applications have also been created over the years to work with MIDI, such as Cakewalk and (more recently) '[l[https://openmidiproject.osdn.jp/index_en.html[Sekaiju] and '[l[https://github.com/Hans5958/Domino-English-Translation/releases[Domino]. Although piano roll interfaces reign supreme in the realm of MIDI, '[l[https://openmpt.org/[OpenMPT] can be used for this format, and a unique tracker by BotB's own '[l[https://battleofthebits.com/barracks/Profile/Jangler/[Jangler] called '[l[https://github.com/jangler/faunatone[Faunatone] (offering optional microtonal support) can be utilized. Notation software like Finale, Sibelius or '[l[https://musescore.org/en[MuseScore] (which is free) can also be utilized.

If you're not sure where to start, some of the most highly recommended free options are Reaper (which is also a full-fledged DAW), Sekaiju and Domino. More tools are listed at the bottom of the article!

For REAPER users, '[l[https://defensemech.com/GM_template.rpp[a template] has been created by '[l[https://battleofthebits.com/barracks/Profile/DefenseMechanism/[DEFENSE MECHANISM]. Note that it is best to use this with a VST such as '[l[https://falcosoft.hu/softwares.html#bassmidi_vsti[BassMidiVST] and an MSGS soundfont to avoid the inherent latency when routing to MSGS directly. A tutorial video on using this template can be found '[l[https://www.youtube.com/watch?v=WxOmQ_EwvwU[here].

For FL Studio users, '[l[https://cdn.discordapp.com/attachments/239107754575265803/811093063732297748/FL_Midi_Setup.flp[a template] has been created by '[l[https://battleofthebits.com/barracks/Profile/bluenocturne/[BlueNoc]. FL has its own plugin implementation named "Fruity LSD" that this template is set up with. Make sure not to use Fruity LSD's "reverb" and "chorus" options; these are not supported by the format and won't appear in your exported MIDI file. Also, patches are best controlled through the MIDI Out channels' "Patch list" rather than LSD itself.


'[#[Format info]
MSGS MIDI uses '[b]16 channels of sound'[/b], with channel 10 being reserved for drums. 128 melodic patches exist, as well as 9 different drumkits. Some of the melodic patches also have variants; read more about this in the "GS Extension" section below. The sound is noticeably raw and free of any DSP effects such as reverb, chorus, distortion etc (unlike our other formats '[[xg (format)[XG] and '[[mt32 (format)[MT-32]).

The '[b]maximum note polyphony'[/b] of contemporary MSGS is 32, although it used to be 64 during the Windows XP days. No one is sure why this was nerfed! FL Studio's Fruity LSD is one useful way to avoid the newer limit, if you own that software. Otherwise a virtual machine may be helpful. With the exception of drums, MSGS's note priority system favors the earliest channel number, so if you're brushing up against the limit, you will want the most important information in Channel 1, then Channel 2, etc.

'[b]On each channel, several standard MIDI parameters can be controlled'[/b]: '[b]Volume'[/b], '[b]Panning'[/b], '[b]Pitch'[/b] (used for detuning, pitch bends, or "portamento"), '[b]Expression'[/b] (a fraction of volume), and '[b]Modulation'[/b] depth (auto-vibrato). Individual notes also have a "velocity" parameter which sets the note's loudness.

Most programs have already implemented most or all of these parameters within their interface, but you may need to send/automate a piece of data known as a "'[b]Control Change'[/b]" (CC for short) to set or alter some of them (such as Modulation or Expression). CCs are simply a value between 0 and 127 that control a specific parameter. Consult with your software's manual on how to set up MIDI CCs if necessary!
In MSGS, only a few CCs are utilized:
* CC#1 - '[b]Modulation'[/b] - controls auto-vibrato for the channel. In MSGS, the vibrato triggers at different times depending on the patch.
* CC#7 - Channel Volume
* CC#10 - Channel Panning (0 = all the way left, 127 = all the way right)
* CC#11 - '[b]Expression'[/b]
(Notably, channel pitch is separate and not a CC.)

'[b]Pitch Bend Range'[/b] (which defaults to +/-2 semitones but can be increased to 12) can also be controlled via a slightly more elaborate CC setup. Set both CC#100 and CC#101 to 0, then use CC#6 to control the pitch bend range. If desired, CC#38 offers fine-tuning of the range. Some software (such as FL Studio) may have this implemented already.

The selected patch for a MIDI channel can be changed using a "'[b]Program Change'[/b]" event. You aren't locked into the patch for the whole song!


'[#[Composing for MSGS MIDI]
Though its sound is often regarded as flat and unexciting, some traditions have emerged for getting the most out of the MSGS sound set and its virtually nonexistent access to DSP effects.

* One common technique is to utilize a second or even third channel that contains duplicate note information from another channel, but offset by a small length of time. This is called a "'[b]delay channel'[/b]" because it is a basic simulation of a "delay" effect plugin. Most of the time, the delay channel will be at a much softer volume, and potentially it can be panned towards the left or right to give a fuller stereo image. Delay channels are also fairly easy to use within MSGS's channel and polyphony limits, though overuse will still result in overshooting the polyphony limit anyway, especially with chords or arpeggios.

* Similarly to delay channels, additional "cloned" channels containing the same notes can be used to create a '[b]chorusing'[/b] effect by slightly altering the Channel Pitch of the cloned channels (and likely turning their volumes down). Try two duplicate channels tuned at -10 and +10 cents for example. Instrument doublings are also helpful towards beefing up a sound.

* In a similar ethos to other chiptune formats, strong and judicious use of '[b]vibrato'[/b] can also go a long way towards breathing life into these sounds. MIDI CC#1 (Modulation depth), which controls auto-vibrato for a given channel, is useful in this regard, but frequent use of the "Channel Pitch" setting for additional vibrato control is highly recommended as well. Don't forget that you can do the same with Channel Volume and Channel Panning to create "tremolo" effects (possibly useful on guitar patches)!

* Something to keep in mind: If you try to trigger the same note that's already playing in a channel (like playing a C5 over the top of an existing C5 in the same channel), the previous instance of the note will '[b]immediately cut off'[/b]. This behavior also means that a note of velocity 0 can immediately stop a note from playing - even killing its release envelope, if it would have one.

* Don't shy away from using the '[b]alternate drumkits'[/b] - even though there's lots to work with in the Standard drumkit already, the other kits make various changes to the "drumset" portion of the instruments which may suit your style a little more. Notably, there is a TR-808 kit, an SFX-only kit, an Orchestra kit which includes a range of timpani notes, and a Power kit with a beefier snare. Check them out! Change channel 10's patch number '[l[https://battleofthebits.com/lyceum/View/Specification%20of%20General%20MIDI%20and%20Roland%20MT-32%20patches#Channel%2010%20Percussive%20Instruments[as indicated here]. Additionally, don't be afraid to try Channel Pitch on the drum channel!

* If you're bored with how the patches sound out of the box, see if you can get any '[b]new/cool sounds'[/b] out of them by playing them very high, very low, with rapidfire notes (think blast-beats), or with extremely short notes. You may find new textures that you enjoy! Additionally, switching through Program Changes quickly - i.e. changing the patch over and over - may produce interesting sounds when used in a controlled manner.


'[#[GS Extension]
Since Microsoft GS Wavetable Synth is a stripped-down Roland Sound Canvas SC-55, it has a support for '[b]GS extension instrument variations'[/b], accessible by '[b]changing the Bank number'[/b] ("coarse") associated with a MIDI channel (check the link below for that info). However, it's disabled by default and won't respond to those extension events at all unless you tell it to. In order to make it respond to GS extensions, you need to send a "GS Reset" SysEx message, which is:
'[t[mono]F0 41 10 42 12 40 00 7F 00 41 F7'[/t]

Some MIDI editors such as Domino will automatically do this after you create a new file that targets this system; if yours doesn't, '[b]you will have to add this SysEx message to the beginning of your MIDI'[/b]. This is easy to accomplish in Sekaiju - open the Event List Window, insert a new event at the beginning of the type "SysEx (Normal)", then type the above message into the box and re-save your MIDI.

For FL Studio users - FL doesn't support SysEx messages at all, so you will have to add the GS Reset message using other software after exporting your MIDI. This is in spite of the fact that GS extension instruments are accessible with Fruity LSD. Your exported MIDI won't contain the GS Reset required to hear them in any other software. Be careful!

'[[https://battleofthebits.com/lyceum/View/Specification%20of%20General%20MIDI%20and%20Roland%20MT-32%20patches#Roland%20GS%20extended%20patches[Here is the list of instruments] you could use after enabling the extension, as well as the required changes to the Bank numbers for each patch!


'[#[Restrictions on submit]
The filetype for this format is '[b].mid'[/b] or much more rarely .midi. All MIDIs must be 1MB or less in size and must utilize only the sounds of the Microsoft GS Wavetable Synth. Otherwise, there are no extraneous restrictions to the format, which means you're free to create whatever with the patches provided by the GS Wavetable so long as it fits within the file size limit.

If you normally do not have access to render to MSGS, please use '[l[https://defensemech.com/MSGS_Fixed.sf2[this SF2 soundfont] with your media player.


'[#[Playback (for voting)]
A variety of tools exist for the sake of MIDI playback, though some of the preferred programs for playback include, but are not limited to:
- Windows Media Player
- '[l[http://falcosoft.hu/softwares.html#midiplayer[Falcosoft Midi Player (FSMP)] (very feature-rich, supports hardware out ports, hosts VSTi, supports multiple SoundFont banks, capable of recording directly to disk, runs in Wine)
- '[l[http://www.winamp.com/[Winamp]
- '[l[http://www.grandgent.com/tom/projects/tmidi/[TMIDI Player]

Some other cross-platform options include:
- '[l[http://www.fluidsynth.org/[FluidSynth]
- '[l[http://timidity.sourceforge.net/[TiMidity++]

FSMP, FluidSynth and TiMidity++ can be configured to use SF2 soundfonts, including the MSGS soundfont linked above.


'[#[Render to MP3]
If your DAW supports direct playback of the GS Wavetable within the DAW (as in you connected to "Microsoft GS Wavetable Synth" in your software), you can do a render of your entry simply by exporting to MP3. FSMP, FluidSynth and TiMidity++ also have options for rendering to a .wav file.

In other cases, a Stereo Mix recording of the MIDI (perhaps through Audacity) will also suffice, so long as the MIDI in question can be played with as little issues (read: few to no dropped notes) as possible. If you're on Windows, a great way to test out your MIDI is Windows Media Player.


'[#[See also]
- '[[MIDI]
- '[[Specification of General MIDI and Roland MT-32 patches]
- '[[mt32 (format)]
- '[[xg (format)]
- '[l[https://www.fourmilab.ch/webtools/midicsv/[midicsv] (converts midi to csv and back, command-line based)

'[t[b2]More thorough tools list:'[/t]
- '[l[https://reaper.fm/[REAPER]
- '[l[https://openmidiproject.osdn.jp/index_en.html[Sekaiju]
- '[l[https://github.com/Hans5958/Domino-English-Translation/releases[Domino]
- '[l[https://openmpt.org/[OpenMPT]
- '[l[https://github.com/jangler/faunatone[Faunatone] (microtonal support)
- '[l[http://ariamaestosa.github.io/ariamaestosa/docs[Aria Maestosa]
- '[l[http://musescore.org/en[MuseScore] 
- '[l[http://www.rosegardenmusic.com[Rosegarden] 
- '[l[https://lmms.io/[LMMS] 
- '[l[https://ardour.org/[Ardour]
- '[l[https://www.steinberg.net/cubase/[Cubase]
- '[l[https://www.image-line.com/[FL Studio]
- '[l[https://motu.com/en-us/products/software/dp/[Digital Performer]
- '[l[https://yaru.itch.io/jazz[JAZZ]
- '[l[http://www.anvilstudio.com/index.html[Anvil Studio] 
- (Android) '[l[https://play.google.com/store/apps/details?id=com.gamestar.perfectpiano&hl=en&gl=US [Perfect Piano] (saves in midi format, has a virtual piano keyboard, MIDI/USB controllers can be used)
- (Android) '[l[https://play.google.com/store/apps/details?id=com.futuresculptor.maestro [Maestro] (notation software, saves midi format) 

 
C A T E G O R I E S
 
 
Battle Formats