No suitable instruments for particular MIDI programs

• Jan 16, 2015 - 20:51

For MIDI programs
1, 2, 5, 26, 28, 29, 30, 31, 36, 37, 49, 53, 54, 55, 77, 82, 83, 86, 87, 110, 113, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127
there are no MuseScore instruments in instruments.xml file.

For example, for the MIDI file I_Never_Knew_Her_Name.mid
for the track above percussion (Tambourine) there is no instrument with the value <program value="37"/>.
Hovewer, in the score it's an "Electric Bass".
In the instruments.xml there is an instrument "Electric Bass" with the program 33.

So the question is: how to map the absent programs to MuseScore instruments?


Please attach the SMF in question.

I'm pretty sure it's not a GM file as Tambourine is not mapped to program 37 in General MIDI, but is a bass sound, hence the definition in Instruments.xml

Otherwise you are free to use the Mixer to assign specific sounds to instruments, but bear in mind that if the SMF you are importing does not comply to the GM1 standard then it will not conform to the instruments defined in Instruments.xml

I think he was sayng talking about the track *above* the tambourine track. I discussed this with him over IRC. I guess in the original MSCZ file, the staff used the "Electric Bass" instrument, with the Mixer used to set the MIDI program to 37 - Slap Bass 2. Exported to MIDI, you lose everything but the number "37", from which trig-ger's MIDI import code was attempting to guess what instrument this MIDI program number might best corresponds to, so he could set the staff up reasonably.

In cases where the program number is used by one or more instruments in the instruments.xml file, you can simply choose one of those (and he has a heuristic for choosing between them). But for a program number like 37 that is not used anywhere in instruments.xml, there literally no information to draw from currently in MuseScore to allow the MIDI import code to know what instrument to use for the staff. So no way to guess what clef or transposition to use.

I suggested a simple but effective method: if you don't find an instrument in instruments.xml that uses program 37, try 36, 35, 34, etc until you find a match. If you know the organization of the General MIDI programs, you'll see why that will usually work well enough to give us a reaosnable instrument to use in setting up the staff. The only cases I found where it failed were for "Orchestra Hit" (which would map to a choir using that algorithm) and "Fiddle" which would map to a bagpipe, of all things). So I suggested special casing those two. Oh yeah, also check for the *range* 80-103 and 112-127, and just set up a generic synthesizer and one-line percussion staff respectively for program numbers in those ranges.

In reply to by chen lung

OK thanks Chen.

The problem here is that MuseScore 1.x's MIDI export assumes GM1 compatibility, despite not including a GM reset at the beginning of the SMF

The MIDI 1.0 Specification defines a system of Meta Events which are intended to be used to convey track, instrument, and intended program change information.

In the MuseScore 2 there should be enough information in Instruments.xml to be able to add the relevant information to the exported SMF in the form of meta events embedded in the midi track.

Something we should be considering for the next update.

Do you still have an unanswered question? Please log in first to post your question.