Peter Billam wrote:
>
http://fluidsynth.sourceforge.net/api/index.html#CreatingSettings
>
> synth.midi-bank-select (type string)
> Defines how the synthesizer interprets Bank Select messages.
>
> gm: ignores CC0 and CC32 messages.
> 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.
>
> Does anyone know the history of this divergence ?
The MIDI standard started out with 128 program numbers.
When the General MIDI specification came around, all 128 were
standardized. GM devices don't know (i.e., ignore) CC0/CC32.
GS is not really a specification; it's a standard that says "do as the
SoundCanvas does".
When Roland designed the first SoundCanvas, it made it GM compatible,
but allowed sound variations with CC0. When a GS file that uses such
a variation plays on a plain GM device, CC0 is ignored, and the device
falls back to the GM sound. Therefore, any variation is (or should be)
similar to the 'basic' GM sound at CC0 = 0, so that the plain GM
playback does not sound too bad. (Why CC0 and not CC32? Nobody knows,
probably just chance.)
When Roland designed later SoundCanvas devices, they replaced many
sounds wither higher-quality ones. This is usually not a problem
(because the instruments are actually the same), but to allow really
faithful playback of files designed for older devices, they also
included the old sounds, and allowed to switch to them with CC32.
With CC32 = 0 (the default), they use the latest sounds (or some older
set selected by a hardware switch), other values select specific devices
(1 = SC55, 2 = SC88, 3 = SC88Pro, 4 = SC8850).
When Yamaha wrote the first XG specification, they designed for
extensibility, so they used CC32 for sound variations (like GS's CC0),
and CC0 for switching between entirely different sound sets: 0 = normal
sounds, 64 = effect sounds, 126 = effect drums, 127 = normal drums.
For effects, variation fallbacks are disabled because they would not
make sense. (Why CC0/CC32 and not CC32/CC0? See above.)
(GS devices do not use CCs but SysEx to switch between sound sets.)
GM2 is the most recent specification; it uses CC0 to select between
sound sets (120 = drums, 121 = instruments) and CC32 to select
variations.
The three standards GS/XG/GM2 are incompatible, but this is normally not
a problem because the device mode must always been selected with a SysEx
message (which FluidSynth apparently does not support).
> mma is presumably the Midi Manufacturers Associon spec,
The MMA writes many specs. The MIDI spec doesn't have much to say about
CC0/CC32.
This setting is useful only for files that are used with a known sound
font because there will be no fallbacks.
Regards,
Clemens