::|CONTENTS
- Capabilities
- Quick set up
- Polyphony on the MT-32
- MIDI Parameters on the MT-32
- Custom MT-32 Voices & Settings
- See also
The
Roland MT-32 is a
MIDI sound module that was released in 1987 for the low low price of $695!
(Don't worry, there are emulation alternatives we'll be using here for the BotB format.) This module uses a mixture of samples and Roland's patented "LA synthesis" (Linear Arithmetic) for its iconic suite of sounds. It was created a few years before the
General MIDI standard, so while its functions will be familiar to you if you've worked with MIDIs before, it differs in a few key ways as well:
1) Unlike GM, which specifies at least 16 simultaneous channels, the MT-32 only uses up to 9.
2) The MT-32's maximum polyphony of 32 is tied to so-called "partials" rather than actual notes - different instrument voices use anywhere from 1 to 4 partials for a single note, so depending on your choice of voice, maximum note polyphony could be anywhere from 8 to 32.
3) The instrument/program list is in a different order than GM. This means if you try to listen to an MT-32 .mid file through some other synth or module, such as the classic
MSGS on Windows, the parts won't correspond to the correct instruments. Your MIDI will likely sound totally different.
Capabilities
The sound module has
128 melodic voice patches and 1 drum patch, ordered in a way that differs greatly from General MIDI. The patches are all listed
here along with their respective partial counts.
What's a partial count, you ask? The module sports a
32 partial voice polyphony overall. What this means is that the module can theoretically support up to 32 voices, but the actual polyphony depends on the voices that you use in your song. Voices range from 1 to 4 partial layers; more layers in a voice often means a more luscious sound, but at the expense of polyphony. Eight simultaneous notes from a voice that uses 4 partial layers would consume the entire polyphony of the module!
The MT-32 only supports up to
9 MIDI channels at once. By default, it is set to use channels 2-9 for melodic instruments and 10 for drums; 1 and 11-16 are unused. Though all the parts can be remapped to any midi channel, altering this requires sysex commands to be stored at the start of your midi file for it to play correctly, so it probably isn't worth the effort in most cases.
A built-in global reverb effect is applied to the sound. Tweaking the level, depth and type of the reverb/delay is accessible via the front panel of a physical MT-32 module. If you don't have one of those, SysEx can be used manually, or via an editor, as detailed in
the MT-32 manual. Modifying these settings will require an expert knowledge of MIDI as the data must be correctly placed inside your midi file, for them to take effect when the song is played.
Quick set up
Since it is unlikely that most BotBrs will actually have the physical module (it is long been discontinued and can only be obtained through auction sites), the quickest way for one to get started with composing for the MT-32 is through an
emulation of the module called Munt.
Munt can be downloaded
here. To hear sound through Munt, you will need to look around for downloads of the module's PCM and control ROMs, though a Google search should suffice.
(Be sure you are grabbing the ROMs for the MT-32 and not its related offshoot CM-32L.)
Another option for working with the MT-32 within your DAW of choice is
MuntVsti, a VST that utilizes Munt's emulation, through which MIDI info can be fed. You will still need to locate the MT-32 PCM and control ROMs to hear sound in the VST.
Configuring Munt
Quick outline: download Munt → download PCM and ROMs → assign PCM and ROMs → route your program's MIDI out to Munt
Once you have installed Munt on your computer, you'll want to locate the PCM and Control ROMs to get the module up and running. Upon attempting to start up the module (mt32emu-qt.exe by default), you will be prompted with a ROM Selection window. Alternatively, you can see this window under Options > Configuration. Go to the directory where you stored your PCM and Control ROMs (it's advised that you keep both in the same folder) and the program will auto-select the necessary ROMs. If the ROMs do not show up, try hitting Refresh.
Once you have the ROMs confirmed, you're ready to compose! One thing that you should verify in the Synth Properties box (accessed by clicking the Properties button below the emulated LCD display) is the MIDI Delay Mode: to ensure that your MIDIs play without any odd truncations in the beginning of your MIDI, change this option to "Process all MIDI events immediately."
Lastly, even though Munt and MuntVsti can be configured to use more than 32 partials, the real hardware does not support this, which means you should not use it for entries here. Like other BotB formats, we want our submissions to be playable on real hardware.
Setup Example - OpenMPT
With Munt running and the ROMs loaded, create a new module in OpenMPT. Navigate to View > Plugin Manager, and insert MIDI Input Output to FX01. Next, on the Instruments tab, select the MIDI plugin editor button. Select your midi controller (if applicable) as the input device, and set the output device to MT-32. If OpenMPT is successfully connected, you should see a notification popup or simply a line item within Munt showing OpenMPT as the MIDI input. You're good to go! Now back on the Instruments tab select MIDI channel 2-10 as desired, and map to the
desired instruments in the MIDI program box.
Setup - FL Studio
If you happen to use FL Studio, BotB's own
MelonadeM has created
a template for use with MuntVsti or Munt, as well as a
helpful setup image. The idea is to use multiple MIDI Out channels set to a chosen port (in her case, 5) that matches a port number chosen for one instance of MuntVsti or Munt, as shown in the linked image.
Polyphony on the MT-32
The most important thing to keep in mind with this format is the 32-partial polyphony restriction, which is easy to brush up against. Your choice of voices can make a huge difference, especially where chords are concerned. If you consult with
the list of MT-32 patches, you will notice that many instruments have several variations that use different numbers of partials - take patches 79-82 for example, Saxophone 1 through 4. There are options that use 4, 3, 2, and even 1 partials. You may want to utilize the versions with lower partial counts in your piece.
In most cases,
only the initial attack of the note will utilize the full partial count. If the note is held, most of the time the partial count will reduce. (For example, Saxophone 1 uses four partials, but the fourth goes away immediately, and the third goes away fairly quickly too. The held note only continues to consume two partials.) Many patches have a "
release envelope" equivalent too, where one or more partials are left ringing for some period of time (like a bell), even after the note has stopped. This can be particularly dangerous with fast arpeggios on some patches.
In both Munt and MuntVsti, you can keep an eye on the polyphony consumption and identify when potential problems occur. In MuntVsti, an Active Partial count is given at the top-left of the VST interface. Try soloing a single instrument to see how many partials it uses and for how long. The most extreme example is patch 37 "Soundtrack", which even after release will eat up partials for several more seconds.
Munt allows you to view the polyphony status under the "Partial State" section, with more detail than the VST:
* A red square indicates an active note that is currently in its sample-based attack state.
* A yellow square indicates an active note that is currently in its synthesized decay or sustain state.
* A green square indicates a note that is currently in its release state.
So what happens if you
exceed the maximum polyphony of the device? Sounds will drop out unintentionally and/or abruptly cut off; though the inner workings of the device are a bit arcane in this regard, there are a few things you can keep in mind:
* Similarly to
MSGS, the notes with the highest priority will be in the first melodic channel (i.e. channel 2), then the second channel, and so on. This means that notes in the last few melodic channels will be
more likely to be cut; it's best to put the most important stuff in the earlier channels to ensure that content doesn't get cut. The drum channel, however, does not maintain the lowest priority of all; it will be prioritized over the later melodic channels. (Where exactly is uncertain...)
* Notes with very high velocities may still take precedence over others.
* Be careful with triggering very many notes all at the same time. You may need to slightly offset them.
It is possible to redefine the partial assignments for each part/channel with sysex, but setting this up should only be attempted if you are comfortable working with this data & integrating it correctly into your midi file.
Compared to MSGS MIDI, it is more difficult to create duplicate channels for "delay" effects or instrument doubles. Choose your patches carefully if you wish to try this!
MIDI Parameters on the MT-32
Note
velocity (i.e. how loud the note will be) on the MT-32 follows a somewhat different formula than MSGS (and different from XG as well). The lowest velocities do not get as quiet as one would expect, and their differences are very slight. The loudest velocities meanwhile make a significant difference.
Stereo
panning can be utilized on the MT-32 (via MIDI CC#10). It is notably
reversed from what would become the usual GM implementation; a value of 0 pushes the sound all the way towards the right. Panning is less granular than the values 0-127 would imply; only a few positions exist on either side.
Pitch bend doesn't have any more complicated implementation. Notably though, at least one patch (37 Soundtrack) doesn't respond to pitch bend at all. Like MSGS, there is no "portamento/pitch slide" CC; you will have to pitch bend the desired amount away from the note to achieve the pitch slide effect.
Channel
volume (CC#7) and the related CC#11
Expression (which is a percentage of Volume) can be used to change the levels of sound in any given channel. Not all patches will respond to this in the middle of a note; some will only apply the change after a new note is triggered. CC#11 is only applied to the volume of a note when the note is in the sustain phase and when the sustain level of the partial(s) is relatively high. Because of this, CC#11 works fine on organ timbres but not on piano timbres.
CC#1
Modulation can be used in much the same way as other MIDI implementations to enable a certain depth of auto-vibrato.
Custom MT-32 Voices & Settings
It is possible to create totally new and unique voices or modify the existing ones via MIDI System Exclusive messages (sysex) using an external editor.
The MT-32 is a surprisingly deep and highly editable instrument, but relies entirely on software for this task. Consequently, there were many editors released when it was a contemporary product, but nearly all of them are for legacy computers/OS's such as Atari ST, X68000, early Macintosh and DOS.
Of these numerous options from the past, only SoundDiver and one or two others will still run
natively on a present-day OS. SoundDiver is currently the best option, as it provides complete access to all parameters, clearly visualizes the voice architecture and has a *relatively* modern UI.
This has been utilized many times by BotBr
now_its_dark; if you want to hear some of the sorts of sounds that could be created, check out their MT-32 works!
Software Editors
SoundDiver (Windows & stable via WINE),
A venerable, older software editing suite by the long defunct emagic, it is capable of editing literally hundreds of different devices, via panels called Adaptations. The included adaptation for the MT-32 provides complete access to the functions of the device. It can be downloaded
here.
MT-32 Sound Editor (Windows only)
A fairly new option— this editor is still in development, but could replace SoundDiver as the de facto option, with its more modern UI and somewhat simpler setup. However, as of 08.2023, it is not yet at feature parity with SD and currently is limited to a modern Windows OS. (via WINE might be possible, but was unable to get it running). The latest release can be downloaded at
vogons.org or via
github.
There is a common misconception that the MT-32 is simply a more primitive version of later PCM-based sound modules, such as the Sound Canvas series, but this is pretty far from the truth. In terms of sound design potential, the synthesis available here is rather different and in some ways, much deeper than the pure romplers which followed. There is tons of possibility to explore, even potential for it to sound quite modern, with a unique and synthetic character, far beyond the expected.
Here is some basic info to get started with SoundDiver & editing:
Terms & Concepts
LA Synthesis = A method of digital synthesis, layering multiple voice elements within a single composite voice. These four elements each have a discrete, subtractive signal path and can use either a real-time synthesized digital waveform or PCM audio sample. The elements are linked in pairs of two (1+2 and 3+4), each of which holds the definition for a structure. Structures can route and define interactions between the two elements in a pair.
(that was phrased in general terms, to be applicable to different LA synths, which vary in their naming conventions and feature sets).
In the case of the MT-32, it is defined and implemented in the following way:
Partials = the individual, editable synthesized voice elements within a timbre, akin to operators in FM, or the single oscillators within a traditional subtractive synth voice. The assignment of a partial type (Wave Generator or PCM) is not directly assigned to the partial, but established via a structure, alongside a second partial within the timbre.
Timbres = synthesized voices comprised of partials. A timbre can be set to utilize between one and four partials. Within a timbre, partials are represented in pairs of two. Each pair contains a structure type, which defines the partial types used in that pair (WG or PCM) and different behaviors for them, such as stereo routing and ring modulation.
Structures = There are 13 available structures, with two used per-timbre. Structures serve a couple purposes— they define the partial type of the upper and lower sets of partials (1+2 and 3+4) within a timbre, they also define how those two partials are mixed and whether they utilize ring modulation. See below for a list of them.
Patches = store references to timbres with additional configs such as reverb switch, volume, pan and tuning. Patches exist in memory in the numerical order associated with the 128 available midi program change numbers.
Parts = A section with an assignable midi channel # and partial reserve allocation, to ensure that the part has enough polyphony for an intended use.
List of structures:
S = Synth / WG
P = PCM
(upper + lower)
01. S+S Mixed output
02. S+S Ringmod mixed with top partial output
03. P+S Mixed output
04. P+S Ringmod mixed with top partial output
05. S+P Ringmod mixed with top partial output
06. P+P Mixed output
07. P+P Ringmod mixed with top partial output
08. S+S Top partial direct to L channel, bottom partial direct to R channel.
09. P+P Top partial direct to L channel, bottom partial direct to R channel.
10. S+S. Ringmod only
11. P+S. Ringmod only
12. S+P. Ringmod only
13. P+P. Ringmod only
Summary:
So to recap, structures
define partial type and routing behavior. Partials are individual voice layers, they are
components within timbres. Timbres are top-level synthesized voices which are
referenced by patches. Patches are associated sequentially to the 128 midi program change numbers. Patches must be
assigned to one of the 8 parts to be used, either by being copied to one of the temporary patches in an editor, or via a MIDI program change.
It can be challenging to familiarize oneself with the system architecture of this synth. If text isn't your thing and/or that was not enough info—
this book does an excellent job of breaking it down visually. Jump to page 31 "Advanced Operation".
What can be edited:
- System settings such as reverb type, per-part channel mapping and partial reserve.
- 8x temporary timbres + 64 user-specific timbre memory slots
- 8x assignable temporary patches + 128 assignable patch memory slots
- 64x assignable drum timbre slots (from C1 — E♭6) + adjustable params per-slot.
- 8x parts, mapped to whichever 8 patches currently reside in the patch temporary memory area.
Regarding SoundDiver + Munt
The standalone munt application can be edited with SoundDiver like real hardware, with the limitation that you cannot request the current parameter state from munt. It is inconvenient at times, but it does function correctly other than this (confirmed working on mac+WINE and windows 10 natively).
If you are editing with munt, make sure that munt is running prior to starting SoundDiver or the midi port will not be detected.
If you want to edit the factory MT-32 patches, rather than start from scratch, you will have to import them from a file.
Here is a complete and organized SoundDiver Library file which contains this data..
Note: the user memory area only holds 64 timbres, while the permanent storage / ROM on the device holds 128 timbres. This means that it is only possible import half of them into user memory at a time. For this reason, they are broken up into two sets, see the included readme for more info.
SoundDiver Setup
Once you have the program installed, here are the steps to start programming with it:
Note: Never try to open the help section (unless you're running on a legacy OS), it will typically crash the program. If you are running in WINE, you cannot open most of the settings either. Fortunately, these are not crucial for our purposes. It is a surprisingly stable experience in Windows 10 or MacOS under WINE, other than those caveats.
1. Open the Install window from the menubar, then scroll down the (long) list to "Roland MT-32", single-click it and then click the "add" button on the left sidebar.
2. The MT-32 device icon will now be visible in the Library window. Double-click the it and you will be presented with the system/global view of the editor panel.
3. Take note of the left sidebar, where the MIDI input & output are assigned— to control the synth, you must select the midi port on your interface, or the virtual MIDI port created by munt.
It is a weird drop-down, you have to click to the left of where you would expect for it to stay open.
If you are editing hardware, also select the appropriate MIDI input port. With munt, this is irrelevant, as it cannot send midi, only receive it. This is the one leg-up that a hardware device imparts to this process: unsaved edits can be requested and recovered, in case of a software or host system crash, so long as the device is left powered on.
Understanding Memory Areas & Creating/Editing Timbres
To begin editing or creating a timbre, click once to select one of the 64 timbre memory area slots. To start fresh, initialize it and give it a name of some kind. If initialized, will default to the Slap Bass sound.
Click on one of the 8 timbre temp area slots to make it the active slot.
Click the timbre you just named and it will populate that active slot.
Note: The temp areas hold the current settings for sounds, when you play notes on channels 2-9. Timbres outside of the temp area cannot be heard or edited without being instanced to a slot in the temp area (overwriting whatever was there before).
Put another way— the temp area refers to a position in ram which is not intended for storage use. Data in this area of memory is used to set the currently active timbre parameters of the synthesis engine. Though, you could use it for storage, as the starting state, or if you have no intention of changing it during a song— since there is no permanent storage anyway, the concept of "permanent" is only relevant for the duration that the device is active and hasn't been reset or had the data overwritten.
Double-click the instance of your timbre from the temp area and it will open a voice editor panel. If you are sending note data to the instrument from a separate source, you will be able to hear your changes reflected immediately on the corresponding channel when you modify it.
Once you are happy with the timbre, close the editor panel. A dialog will appear, asking if you want to save it. If you select 'yes', it will sync the changes to the origin timbre memory slot. If you select 'no', your changes will only apply to the temp area instance of the timbre, and won't be copied back to the origin timbre memory: the two slots will then be different, not synced.
Patch Assignment
If you want to be able to reference your timbres using midi program changes, they will need to have a corresponding patch assignment. All 128 patches can be reassigned. If there are factory patches you want to use, make sure not to assign your partials to those patch numbers, or assign a different patch to the desired factory timbre. Patches include settings for enabling reverb and adjusting volume and pan, among other things.
Saving & Exporting
It is a good habit to build a SoundDiver library file (.LIB) of custom sounds and settings you create as soon as you are happy with them, since
it is maddeningly easy to accidentally overwrite things or lose edits if the software crashes, especially with munt. Plus, it is pretty satisfying to build up a nice library of your own sounds for future use.
Once you have finished creating or altering timbres / patches / system settings / effects / drum map etc, hold 'ctrl' and click to select only the entries you have changed, not the entire memory— since it has to load at the start of your song when it plays, you'll likely want as little data as possible. Then click the top menubar and select "Entry > Export > Selected Entries" You can export as raw SYX (system exclusive data) or SMF (.mid file, with the data already sequenced to transmit at a defined rate).
SYX or SMF export? Which of these you choose will depend in part on your workflow— if you work in a DAW / midi sequencer which supports import of system exclusive events, you could export the raw data and place it into your project timeline; be sure to start the first note / controller event after the sysex data block concludes.
If your DAW does not support sysex messages, SMF might be easier to work with, and has some additional benefits: it ensures that the data will be sent at a defined, safe speed, without any additional setup later. Another benefit, is that any midi file player can send the data in this format. This is potentially a nice convenience, if you compose several songs using the same instrumentation, since you can include this midi file in a playlist, preceding any/all of those songs, without having to append it to each of them during the composition process. Generally, MT-32-compatible games which used custom instrumentation took this approach, sending all, or the majority of sysex data when the game initially loaded.
However you work with this data, make sure to define a minimum 50ms delay between messages, or it may cause a buffer overflow error, when sending to a real device; the "old" first generation models are particularly susceptible to this.
There are various methods and tools for working with this data once it is exported, but however you do it, the goal is to append the sysex data to the beginning of your midi song file. Traditionally one would use a midi event list editor or insert the data in a track of your DAW (for those which still support it), but you could also just record it into munt, then play your song data in right afterward, if you don't mind your midi file showing the wrong bpm etc.
Editing and sound design
Automating parameters
Though there is no direct way to manipulate the various synthesizer parameters in real-time via midi CC (and sending sysex during playback will block notes from sounding), there is a workaround— several useful parameters can be assigned to note velocity: Filter cutoff, Pulse Width, Pitch and the usual Amplitude. Additionally, if your timbre has multiple partials, velocity can be used as a mixer between them, since negative velocity is possible.
Of course, this does limit the ability to vary the loudness of the sound in the usual way. Expression CC is probably the cleanest way to retain this alongside parameter automation, leaving Volume free for dialing-in the overall mix. Some DAWs will allow for remapping of velocity to another parameter, so if you have played-in notes with velocity data you wish to preserve, this could be worth looking into.
The drum map is really great
Any timbre can be assigned to the drum map! You can lock a timbre's pitch so it won't matter which note in the map it is assigned to, or alternately, choose the note(s) in the drum map to sound the timbre at your intended pitch(es). The drum map is low-key, one of the most powerful aspects of this instrument.
You could technically make an entire song using only the drum map, or perhaps more useful— you could sound a greater number of melodic timbres at once than the maximum eight, by allocating an octave of the drum map to the bass part, for example.
Particularly if you are only using a timbre on a single / very few notes, or as an effect, placing it in the drum map may be the way to go.
Another great use of the drum map is to create duplicate versions of the same sound and change their pan and reverb settings. This allows for a single sound to jump around in stereo and switch from dry to reverberant without any patch switching or worrying about part economy.
Sysex things
Sending text to the screen
You can display text on the LCD via sysex. This works with MUNT as well as hardware. To do so, convert your text or other supported ASCII characters to hex, preceded by the necessary IDs and address:
roland ID: 41h
device ID: 10h
model ID: 16h
cmd ID: 12h
address for the
text data type: 20 00 00
Next goes your text data. After the text, a Roland checksum is needed. As with any sysex, the full message must be opened with sysex start (F0) and closed with sysex end (F7).
This tool will calculate the checksum for you.
So for example, if you wanted to print “Battle of the Bits” it needs to be padded with 2 spaces (20h), as the total number of chars must always be 20 (the total number the display supports). So it becomes “ Battle of the Bits “ keeping it centered.
In hex this is:
20
42 61 74 74 6C 65 20
6F 66 20
74 68 65 20
42 69 74 73 20
Before calculating the checksum, first add the address:
20 00 00 20 42 61 74 74 6C 65 20 6F 66 20 74 68 65 20 42 69 74 73 20
_______
Then paste that into your checksum calculator. In this case, we get the value “3C”. So all that is left, is to add the leading sysex and close it off with F7:
F0 41 10 16 12 20 00 00 20 42 61 74 74 6C 65 20 6F 66 20 74 68 65 20 42 69 74 73 20 3C F7
Additional Resources (some are mentioned above)
-
Using The Roland MT-32 Multi-Timbre Sound Module Superb guide to fully understand the MT-32 + nice visuals.
-
MT-32 Overview Synopsis the of MT-32 voice architecture from Sound on Sound, July 1988 Issue.
-
Sysex Checksum Calculator Useful for creating custom sysex commands
-
Sealed's MT-32 Easy Editor SoundDiver adaptation, an alternate MT-32 editor interface (not a standalone app).
See also
-
Munt (including source code!)
-
MuntVsti
-
Specification of General MIDI and Roland MT-32 patches - Lists all MT-32 patches and their respective partial counts. Likewise for channel 10 percussion instruments.
-
Mel's MIDI Patches List - Another way to view the MT-32 patch list with partial counts; color coded and sortable by partial count!
-
MT-32 Owner's Manual (text searchable version
here)
-
MIDI
-
midi (format) - The article for BotB's MSGS MIDI format.
-
SoundDiver - Create your own sounds!
-
List of computer games that utilized the MT-32
-
Retrospective on the MT-32 w/ some nice scanned ephemera @ DTM Station (jp)