MT 32 synthesis - dwhinham/mt32-pi GitHub Wiki

mt32-pi contains the Munt synthesizer engine, which provides a faithful emulation of the Roland MT-32 and CM-32L synthesizer modules. To enable it, you must add some MT-32 or CM-32L ROM images to the roms directory of your SD card. These are not included with the release for copyright reasons.

⚠️ Note: To use the MT-32 synthesizer, you must either set it as the default synth in the config file, or switch to it at runtime using a custom SysEx message or button press.

ROM support

mt32-pi can make use of all ROMs that Munt supports, and allows switching between ROM sets on-the-fly for greater compatibility with various games. For further information about which games work best with each ROM set, consult the MT-32 game compatibility list.

A ROM set consists of:

  • a control ROM (contains the code that runs on the MT-32's CPU).
  • a PCM ROM (contains the sound samples).

For simplicity, mt32-pi categorizes the known control ROMs into three ROM sets:

  1. MT-32 (old): The original version of the MT-32, ROM versions 1.xx.
  2. MT-32 (new): The later version of the MT-32, ROM versions 2.xx.
  3. CM-32L: A "computer music" module compatible with the MT-32, but with additional sound effects for games, and the LCD/buttons removed.

As for PCM ROMs, there are only two known versions - the MT-32 version (common to both models of MT-32), and the CM-32L version.

To summarize, to get the most out of mt32-pi, you'll need 5 ROM files in total - old/new/CM-32L control ROMs, and MT-32/CM-32L PCM ROMs.

The following tables lists all compatible ROM files:

Control ROMs

Name mt32-pi ROM set SHA-1 hash
MT-32 v1.04 Old 5a5cb5a77d7d55ee69657c2f870416daed52dea7
MT-32 v1.05 Old e17a3a6d265bf1fa150312061134293d2b58288c
MT-32 v1.06 Old a553481f4e2794c10cfe597fef154eef0d8257de
MT-32 v1.07 Old b083518fffb7f66b03c23b7eb4f868e62dc5a987
MT-32 BlueRidge Old 7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92
MT-32 v2.04 New 2c16432b6c73dd2a3947cba950a0f4c19d6180eb
MT-32 v2.06 New 2869cf4c235d671668cfcb62415e2ce8323ad4ed
MT-32 v2.07 New 47b52adefedaec475c925e54340e37673c11707c
CM-32L v1.00 CM-32L 73683d585cd6948cc19547942ca0e14a0319456d
CM-32L v1.02 CM-32L a439fbb390da38cada95a7cbb1d6ca199cd66ef8
CM-32LN v1.00 CM-32L dc1c5b1b90a4646d00f7daf3679733c7badc7077

PCM ROMs

Name mt32-pi ROM set SHA-1 hash
MT-32 PCM Old/New f6b1eebc4b2d200ec6d3d21d51325d5b48c60252
CM-32L PCM CM-32L 289cc298ad532b702461bfc738009d9ebe8025ea

ROM scanning

On startup, mt32-pi will scan the roms directory and load the first ROM it encounters that matches each category. In other words, if you have two "old" control ROMs (e.g. version 1.05 and 1.07), only one of them will be used and assigned to the "old" category slot. Therefore, it's recommended that you only place one ROM per category in the roms directory.

The file names or extensions of the ROMs don't matter and will have no effect on the ROM scanner; mt32-pi will scan and detect their types automatically using the SHA-1 hash of the file.

When multiple ROM sets are available, the default set to load on startup can be set in the configuration file.

Switching ROM sets

You can use a custom SysEx message to make mt32-pi quickly swap ROM sets at runtime. If the ROM set is available and loaded, the emulated MT-32 will be restarted with the new ROMs active.

It may be useful to create scripts (e.g. a DOS batch file) that send mt32-pi ROM set swap messages before launching a game.

If you add a control surface to your Raspberry Pi, ROM sets can be switched using Button 2.