Patchmap Files
MultitrackStudio uses patchmap (*.pmp) files to define the names of patches and drum instruments of hardware synths, so they can be displayed instead of plain bank:program numbers where appropriate.External MIDI Instrument window Patchmap menus have an Import option to import your patchmap. Alternatively you can drop the file on an External MIDI Instrument window. If you've edited the file you can simply import it again.
Tip: you can search the web for a .ins (instrument definition) file for your synth. It will be converted to .pmp when it's imported.
Under the hood
Windows: User patchmap files are stored in the 'C:\Users\Username\AppData\Roaming\MtStudio\PatchMaps' folder.
Mac: User patchmap files are stored in the user's 'Library/Application Support/MultitrackStudio/PatchMaps' folder.
Patchmap files can be edited using NotePad (Windows) / TextEdit (Mac) . The following examples demonstrate how to create patchmap files for your own hardware synthesizer. The italic texts are comments, these shouldn't be in the actual patchmap files.
Example 1: Banks and Patch Names
This example shows a plain simple patchmap having just two banks.[patchmap] | mandatory identifier | |
[bank 0] | This sections holds the first bank. Note it's 0, not 1. Also note the space. | |
bank=1280 | The MIDI bank it applies to. This number equals 128 * MSB + LSB. | |
MSB and LSB correspond to MIDI controllers #0 and #32 respectively. | ||
In this example MSB=10 and LSB=0. | ||
0=Piano | MIDI program 0 is a piano | |
1=Bass | MIDI program 1 is a Bass | |
These values can go up to and including 127 | ||
[bank 1] | This sections holds the second bank. Banks must be numbered sequentially | |
bank=1281 | MSB=10 and LSB=1 | |
32=Guitar | MIDI program 32 is a guitar | |
33=Violin | MIDI program 33 is a violin |
Example 2: Drum Instrument Names
Assume our synth has one drum patch. Let's add both the patch and the drum instrument names to the patchmap:[patchmap] | ||
[bank 0] | ||
bank=1280 | ||
0=Piano | ||
[bank 1] | ||
bank=1281 | ||
32=Guitar | ||
33=Violin | ||
64=Acoustic Drum Kit | The drum patch is on program number 64 | |
[drum 0] | ||
bank=0 | The drums are in bank 0. This equals 128 * MSB + LSB, | |
see explanation in [bank 0] section of example 1. | ||
patch=8 | The drums are on MIDI program 8 | |
36=Bass Drum | Note 36 is a bass drum | |
40=Snare | Note 40 is a snare |
Additional drum kit sections must be numbered sequentially ([drum 1], [drum2] etc.)
Example 3: Percussion Channel
Assume it's a GM synth, which has one bank only, and drums on channel 10:[patchmap] | ||
[bank 0] | ||
bank=-1 | -1 means "all banks", we do this because GM doesn't support banks | |
If you omit the "bank=" statement then it will default to 0 because it's | ||
the [bank 0] section. [bank 1] defaults to 1 etc. | ||
channel=1,2,3,4,5,6,7,8,9,11,12,13,14,15,16 | [bank 0] is not valid for channel 10 | |
0=Piano | ||
1=Bright Piano | ||
12=Marimba | ||
25=Acoustic Guitar | ||
26=Electric Guitar | ||
[bank 1] | ||
bank=-1 | -1 means "all banks", we do this because GM doesn't support banks | |
channel=10 | [bank 1] is valid for channel 10 only | |
0=Drum Kit | ||
[drum 0] | ||
channel=10 | These instrument names are valid for channel 10 | |
36=Bass Drum | ||
40=Snare |
Example 4: Patch Categories
Let's add some categories. They will appear in the MIDI Port's patch selector.[patchmap] | ||
[category] | This is the section which defines the categories | |
#0=Piano | The first section must be #0. In this case it holds the pianos | |
#1=Guitar | The second section holds the guitars | |
Categories must be numbered sequentially | ||
[bank 0] | ||
bank=-1 | ||
0=Piano#0 | Add #0 to the name, so MultitrackStudio knows it's in category #0 | |
1=Bright Piano#0 | ||
12=Marimba | No category specified here, it will end up in the "Other" category | |
25=Acoustic Guitar#1 | Add #1 to the name, so MultitrackStudio knows it's in category #1 | |
26=Electric Guitar#1 |
Example 5: Drum Instrument Categories
Drum Instrument Categories can be defined locally within a drum section:[patchmap] | ||
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano | ||
[drum 0] | ||
#0=Bass | The first section must be #0. In this case it holds the bass drums | |
#1=Snare | The second section holds the snare drums | |
35=Acoustic Bass#0 | Add #0 to the name, so MultitrackStudio knows it's in category #0 | |
36=Bass Drum 1#0 | ||
38=Acoustic Snare#1 | Add #1 to the name, so MultitrackStudio knows it's in category #1 | |
39=Hand Clap | No category specified here, it will end up in the "Other" category | |
40=Electric Snare#1 |
Example 6: Controller Names
Let's override some default controller names with custom ones:[patchmap] | ||
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano | ||
[controllers] | ||
2=Joystick -Y | New name for controller 2 | |
83=Dynamic Modulation |
NRPNs can be named too:
[patchmap] | ||
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano | ||
[nrpn] | ||
160=Cutoff | New name for nrpn 160 (=128 * MSB + LSB) | |
161=Resonance |
Example 7: GM compatibility
GM2, GS and XG use bank messages while GM doesn't. You can specify a compatibility mode to ensure the patchmap works regardless of the bank being specified or not. It also affects the handling of GM percussion channel.[patchmap] | ||
compatibility=XG | Can be GM2, GS or XG | |
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano |
Example 8: Supported Controls
The controllers, NRPNs etc. that are supported can be listed. They appear in the controller editor's VIEW menu:[controllers] | ||
supported=pitchbend,7,10,nrpn100,aftertouch,polyaftertouch,sysex | ||
2=Joystick -Y | Controller name as per example 6 |
Example 9: Channel Names
Channel names appear in the channel selector dropdown menu:[channels] | ||
10=Percussion |
Example 10: Patch Switch Time
Some synths need quite some time to load a patch. Let's make sure MultitrackStudio sends the patch change messages in time. Note that it's usually not necessary to add this.[patchmap] | ||
patchswitchtime=750 | Schedule patch changes 750 milliseconds earlier | |
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano |
Example 11: Initialization Sysex
A sysex message can be sent before recording or playback starts. This can be used to switch a synth to multi-mode for example.[patchmap] | ||
initsysex=f0123456f7 | Hex numbers representing system-exclusive MIDI message | |
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano |
If a sysex needs to be send to each MIDI channel used you can replace a hex digit with "<channel>":
[patchmap] | ||
initsysex=f0123<channel>56f7 | Hex numbers representing system-exclusive MIDI message | |
"<channel>" will be replaced with the actual MIDI channel. | ||
[bank 0] | ||
bank=0 | ||
0=Piano | ||
1=Bright Piano |