The '[b]Roland MT-32'[/b] is a '[b]MIDI sound module'[/b] that was released in 1987 for the low low price of $695! '[o](Don't worry, there are emulation alternatives we'll be using here for the BotB format.)'[/o] 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 '[l[https://en.wikipedia.org/wiki/General_MIDI[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 '[[midi (format)[MSGS] on Windows, the parts won't correspond to the correct instruments. Your MIDI will likely sound totally different. '[#[Capabilities] The sound module has '[b]128 melodic voice patches and 1 drum patch'[/b], ordered in a way that differs greatly from General MIDI. The patches are all listed '[[Specification of General MIDI and Roland MT-32 patches[here] along with their respective partial counts. What's a partial count, you ask? The module sports a '[b]32 partial voice polyphony'[/b] 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 '[b]9 MIDI channels'[/b] 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 '[l[https://archive.org/details/synthmanual-roland-mt-32-owners-manual/[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 and the means to hook it up in hand (the module has 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 '[b]emulation of the module called Munt'[/b]. Munt can be downloaded '[l[https://sourceforge.net/projects/munt/[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. '[o](Be sure you are grabbing the ROMs for the MT-32 and not its related offshoot CM-32L.)'[/o] Another option for working with the MT-32 within your DAW of choice is '[l[https://www.kvraudio.com/product/munt-vsti-by-falcosoft[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. '[t[b2]Configuring Munt'[/t] '[t[t lilBox]Quick outline: download Munt → download PCM and ROMs → assign PCM and ROMs → route your program's MIDI out to Munt'[/t] 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. '[t[b2]Setup Example - OpenMPT'[/t] 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 '[[Specification of General MIDI and Roland MT-32 patches[desired instruments] in the MIDI program box. '[t[b2]Setup - FL Studio'[/t] If you happen to use FL Studio, BotB's own '[l[https://battleofthebits.com/barracks/Profile/MelonadeM/[MelonadeM] has created '[l[https://drive.google.com/file/d/16cCEOGMwMHn5Fu75z_A7g5lHe5y_Srtm/view?usp=sharing[a template] for use with MuntVsti or Munt, as well as a '[l[https://i.imgur.com/hqe0JuC.png[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 '[[Specification of General MIDI and Roland MT-32 patches[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, '[b]only the initial attack of the note will utilize the full partial count'[/b]. 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 "'[b]release envelope'[/b]" 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. '[b]In both Munt and MuntVsti, you can keep an eye on the polyphony consumption'[/b] 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 '[b]exceed the maximum polyphony'[/b] of the device? Sounds will drop out unintentionally; 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 '[[midi (format)[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 '[o]more likely to be cut'[/o]; 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 '[b]velocity'[/b] (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 '[b]panning'[/b] can be utilized on the MT-32 (via MIDI CC#10). It is notably '[b]reversed'[/b] 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. '[b]Pitch bend'[/b] 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 '[b]volume'[/b] (CC#7) and the related CC#11 '[b]Expression'[/b] (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 '[b]Modulation'[/b] 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 modify the existing voices and create new ones via SysEx by using an old program named SoundDiver, which can be downloaded '[l[https://archive.org/details/emagicsounddiver3.0.5.4[here]. This has been utilized many times by BotBr '[l[https://battleofthebits.com/barracks/Profile/now_its_dark/[now_its_dark]; if you want to hear some of the sorts of sounds that could be created, check out their MT-32 works! The MT-32 is actually quite a 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. Only SoundDiver and one or two others will still run natively on present-day Windows. SoundDiver is the best of these, as it does a great job of visualizing the voice architecture and has the closest thing to a modern UI. 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, and potential for it to sound quite modern, with a unique and synthetic character. '[b]A more formal guide is in the works, but here is some basic info to get started with SoundDiver & editing:'[/b] '[t[b2]Terms & Concepts'[/t] '[b]LA Synthesis'[/b] = 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). '[b]In the case of the MT-32, it is defined and implemented in the following way:'[/b] '[b]Partials'[/b] = 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. '[b]Timbres'[/b] = 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. '[b]Structures'[/b] = 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. '[b]Patches'[/b] = 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. '[b]Parts'[/b] = A section with an assignable midi channel # and partial reserve allocation, to ensure that the part has enough polyphony for an intended use. '[b]List of structures:'[/b] 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 '[b]Summary:'[/b] So to recap, structures '[b]define'[/b] partial type and routing behavior. Partials are individual voice layers, they are '[b]components within'[/b] timbres. Timbres are top-level synthesized voices which are '[b]referenced'[/b] by patches. Patches are numerically associated to midi program changes and can be '[b]assigned'[/b] to parts. 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— '[l[https://esher.ru/blog/872.html[this book does an excellent job of breaking it down visually.] Jump to page 31 "Advanced Operation". '[b]What can be edited:'[/b] - System settings such as reverb type, per-part channel mapping and partial reserve. - 8x temporary timbres + 64 user-specific timbre memory slots - 8x temporary patches + 128 global patch memory slots - 64x drum map slots (from C1 — E♭6) + additional params per-drum slot. '[t[b2]Regarding SoundDiver + Munt'[/t] 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. '[l[https://archive.org/details/sounddiver-mt-32-factory-sounds[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. '[t[b2]Getting started with SoundDiver'[/t] '[b]Once you have the program installed, here are the steps to start programming with it:'[/b] * Open "Install" and double-click Roland MT-32 from the massive list. * It will attempt to scan for the synth on all available midi interfaces. This is impossible with munt (and slow even with real hardware) so click "skip". It will hang for a bit and then present you with the system-level UI (these panels are called "adaptations" in SoundDiver). * 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. '[b]It is a weird drop-down, you have to click to the left of where you would expect for it to stay open.'[/b] * If you are editing hardware, also select the appropriate input. With munt, this is irrelevant, as it cannot send midi, only receive it. '[b]Note:'[/b] Never try to open the help section (unless you're running on a legacy OS), it will crash. 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 limitations. * 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. '[b]Note:'[/b] The temp area holds the current voices which will sound 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 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. * Double click the instance of your new timbre from the temp area and it will open a voice editor panel. 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 timbre memory slot with which it is linked. If you select 'no', your changes will only apply to the temp area instance of the timbre: the two versions will not be synced. * 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 numbers. Patches also let you set the reverb, volume and pan among other things. * It is a good habit to build a library file of things you create as soon as you are happy with them, since '[b]it is maddeningly easy to accidentally overwrite things or lose edits if the software crashes, especially with munt'[/b]. 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, select and export 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. You can export as .syx (system exclusive data) or .mid. If you export as .mid, be sure you have set a minimum of 50ms delay between messages, or it will cause buffer overflows when sending to the device later. * 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. '[t[b2]MT-32 sound editor'[/t] There's also the fairly new sound editor (Windows only) '[l[https://github.com/sfryers/MT32Editor[MT-32 sound editor]. The latest release can be downloaded at '[l[https://www.vogons.org/viewtopic.php?f=29&t=93609[vogons.org]. '[t[b2]Editing and sound design'[/t] '[b]Automating parameters'[/b] 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. '[b]The drum map is really great'[/b] 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. '[t[b2]Sysex things'[/t] '[b]Sending text to the screen'[/b] 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). '[l[https://shingo45endo.github.io/sysex-checksum/[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 '[b]42 61 74 74 6C 65'[/b] 20 '[b]6F 66'[/b] 20 '[b]74 68 65'[/b] 20 '[b]42 69 74 73'[/b] 20 Before calculating the checksum, first add the address: '[b]20 00 00 '[/b]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) - '[l[https://esher.ru/blog/872.html[Using The Roland MT-32 Multi-Timbre Sound Module] Superb guide to fully understand the MT-32 + nice visuals. - '[l[http://www.muzines.co.uk/articles/roland-mt32-update-and-editors/3940#:~:text=Contact%20Details).-,MT32%20OVERVIEW,-All%20MT32%20sounds[MT-32 Overview] Synopsis the of MT-32 voice architecture from Sound on Sound, July 1988 Issue. - '[l[https://shingo45endo.github.io/sysex-checksum/[Sysex Checksum Calculator] Useful for creating custom sysex commands - '[l[https://web.archive.org/web/20100402230016/http://homepage.mac.com/synth_seal/html/mt32c.html[Sealed's MT-32 Easy Editor] SoundDiver adaptation, an alternate MT-32 editor interface (not a standalone app). '[#[See also] - '[l[https://sourceforge.net/projects/munt/[Munt] (including source code!) - '[l[https://www.kvraudio.com/product/munt-vsti-by-falcosoft[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. - '[l[https://docs.google.com/spreadsheets/d/1wzCzymKyAXZobQqsGkxwWAxOylRi-4L_hZM_BfiGZjo/edit#gid=64832245[Mel's MIDI Patches List] - Another way to view the MT-32 patch list with partial counts; color coded and sortable by partial count! - '[l[https://archive.org/details/synthmanual-roland-mt-32-owners-manual/[MT-32 Owner's Manual] (text searchable version '[l[https://archive.org/stream/synthmanual-roland-mt-32-owners-manual/rolandmt-32ownersmanual_djvu.txt[here]) - '[[MIDI] - '[[midi (format)] - The article for BotB's MSGS MIDI format. - '[l[https://archive.org/details/emagicsounddiver3.0.5.4[SoundDiver] - Create your own sounds! - '[l[https://www.vogonswiki.com/index.php/List_of_MT-32-compatible_computer_games[List of computer games that utilized the MT-32] - '[l[https://www.dtmstation.com/archives/31544.html[Retrospective on the MT-32 w/ some nice scanned ephemera @ DTM Station (jp)]