Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bank Select cc0 and cc32; gm, gs, xg, mma ?

619 views
Skip to first unread message

Peter Billam

unread,
Aug 11, 2014, 2:30:30 AM8/11/14
to
Hi. So going through:
http://fluidsynth.sourceforge.net/api/index.html#CreatingSettings
I discover:
synth.midi-bank-select (type string)
Defines how the synthesizer interprets Bank Select messages.
Default gs
Options gm, gs, xg, mma
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.

mma is presumably the Midi Manufacturers Associon spec,
my Roland XV2020 behaves gs, so I think does TiMidity,
and likewise it's the default for fluidsynth.
Does anyone know the history of this divergence ?

Regards, Peter

--
Peter Billam www.pjb.com.au www.pjb.com.au/comp/contact.html

Clemens Ladisch

unread,
Aug 11, 2014, 3:36:53 PM8/11/14
to
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

Pete

unread,
Aug 11, 2014, 4:37:57 PM8/11/14
to
In article <c4skck...@mid.individual.net>,
Clemens Ladisch <cle...@ladisch.de> wrote:
>
>The MIDI standard started out with 128 program numbers.
>
>
>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.)
>
Actually this seems to me to be the consistent decision. The "LSB" CC
number is usually (Aside from RPN etc) 32 offset from the MSB -- and
mostly ignored. So if you think there will be no more than 128 useful
banks, the 'MSB' is the one to use.

-- Pete --

Peter Billam

unread,
Aug 14, 2014, 1:24:59 AM8/14/14
to
Sorry about the delay, I've been in a programming frenzy in
fluisynth.lua trying to pass the settings back and forth between
the Lua code and the C code, when settings is a hashtable and
therefore doesn't have a fixed size. I think it's solved now;
in any case it's time I caught up on the rest of reality a bit...

On 2014-08-11, Clemens Ladisch <cle...@ladisch.de> wrote:
> 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 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.
> .. (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. ... etc

That was a wonderful summary :-) I hope it goes into an archive
somewhere... Anyone know a URL for the comp.music.midi archive ?

Peter Billam

unread,
Aug 14, 2014, 1:37:25 AM8/14/14
to
The first posting of approximately this didn't seem to work,
so apologies if you've all received this twice...

Sorry about the delay, I've been in a programming frenzy in
fluidsynth.lua trying to pass settings back and forth between
C and Lua, when it's a hashtable with no fixed size.
I think it's solved now :-)

On 2014-08-11, Clemens Ladisch <cle...@ladisch.de> wrote:
> 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. ... 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. ...
> 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: ...
> GM2 is the most recent specification; it uses CC0 to select between
> sound sets (120 = drums, 121 = instruments) and CC32 to select ..

That's a wonderful summary. I hope it goes into an archive
somewhere... Anyone know a URL for comp.music.midi archives ?
0 new messages