diff --git a/fluidsynth/doc/fluidsynth-v11-devdoc.txt b/fluidsynth/doc/fluidsynth-v11-devdoc.txt index 2084c60a..b934df66 100644 --- a/fluidsynth/doc/fluidsynth-v11-devdoc.txt +++ b/fluidsynth/doc/fluidsynth-v11-devdoc.txt @@ -481,7 +481,8 @@ The following table provides details on all the settings used by the synthesizer
  • gs: (default) CC0 becomes the bank number, CC32 is ignored.
  • xg: CC32 becomes the bank number, CC0 is ignored.
  • mma: bank is calculated as CC0*128+CC32.
  • - + + Note: Drum channels are initialized to \c DRUM_INST_BANK (==128). Since 1.1.7 mma mode also allows the bank of drum channels to be changed the same way as for melodic channels. diff --git a/fluidsynth/src/synth/fluid_chan.c b/fluidsynth/src/synth/fluid_chan.c index c6eb7231..02e69710 100644 --- a/fluidsynth/src/synth/fluid_chan.c +++ b/fluidsynth/src/synth/fluid_chan.c @@ -264,7 +264,7 @@ fluid_channel_set_bank_msb(fluid_channel_t* chan, int bankmsb) } if (style == FLUID_BANK_STYLE_GM || - chan->channel_type == CHANNEL_TYPE_DRUM) + (chan->channel_type == CHANNEL_TYPE_DRUM && style != FLUID_BANK_STYLE_MMA)) return; /* ignored */ oldval = chan->sfont_bank_prog; diff --git a/fluidsynth/src/synth/fluid_synth.c b/fluidsynth/src/synth/fluid_synth.c index 4e2813ab..538b8006 100644 --- a/fluidsynth/src/synth/fluid_synth.c +++ b/fluidsynth/src/synth/fluid_synth.c @@ -1945,7 +1945,8 @@ fluid_synth_program_change(fluid_synth_t* synth, int chan, int prognum) FLUID_API_ENTRY_CHAN(FLUID_FAILED); channel = synth->channel[chan]; - if (channel->channel_type == CHANNEL_TYPE_DRUM) + if (channel->channel_type == CHANNEL_TYPE_DRUM && + chan->synth->bank_select != FLUID_BANK_STYLE_MMA) banknum = DRUM_INST_BANK; else fluid_channel_get_sfont_bank_prog(channel, NULL, &banknum, NULL);