Soundfont bank switching

• Jul 5, 2017 - 04:18

How does MuseScore handle bank switching for soundfonts with more than one patch bank? The few tests I ran seemed to indicate that MIDI Bank Select commands (cc 0) are simply ignored. If that's true, it certainly creates a problem for people using soundfonts with more than one patch banks. Such soundfonts are very common nowadays - even the FluidR3 soundfont that's distributed along with MuseScore has patches in bank 1, 8 and 16, none of which are accessible through MuseScore.

As far as I understand, software like MuseScore really does not have to do anything about these Bank Select commands except passing them through to the synthesizer. So why not just do that?

A somewhat related question: How does one specify the bank numbers of the instruments in Instruments.xml?

Ying-Da Lee


Comments

1: See Mixer (Toogle with F10) Extra banks are at the bottom of instrument selection drop-down list.
I don't know if the command that will be given from the outside (with midi) will work.
But I'm sure that: if you export to "mid", the bank changes will appear in the midi file.

2. for (your) instruments.xml :

A: One instrument with 2 articulations //It appears as a dual entry in the mixer. (like violin, pizzicato, tremolo)

      <Instrument id="horn">
       // ...
       // ... Some other values here 
       // ...
       <Channel name="open">
        <controller ctrl="32" value="0"/> //<--CC32=0
        <program value="60"/>             // And: Program number
        <synti>Fluid</synti>
        </Channel>
	
       <Channel name="sordino">
        <controller ctrl="32" value="8"/> //<---CC32=8
        <program value="60"/>              // Again: Program number
        <synti>Fluid</synti>
        </Channel>
      </Instrument>

B: One separate instrument //It appears as a single entry in the mixer. (like normal instruments)

      <Instrument id="horn">
       // ...
       // ... Some other values here 
       // ...
       <Channel name="spec-synth-horns">
        <controller ctrl="32" value="48"/> //<---CC32=48
        <program value="60"/>                // And: Program number
        <synti>Fluid</synti>
        </Channel>
      </Instrument>

Note:
Use CC32 for bank change.
In most cases, CC0 will remain at 0.
In complicated situations: Execute CC0, CC32 and Program Change commands in this order. And make sure there is at least 10 ticks between them. (In Midi file).
example (in midi editor):

Time       Command    Value
1:1:000    CC0        1
1:1:010    CC32       8
1:1:020    PC         32 

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