fluid-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65


From: Pedro Lopez-Cabanillas
Subject: Re: MIDI Bank Select proposal (was Re: [fluid-dev] Re: Son of ticket #65)
Date: Mon, 9 Aug 2010 13:58:49 +0200
User-agent: KMail/1.9.6 (enterprise 20070904.708012)

On Monday, August 9, 2010, David Henningsson wrote:
> 2010-08-08 23:42, Pedro Lopez-Cabanillas skrev:
> > On Sunday, August 8, 2010, David Henningsson wrote:
> >>>>> SF2 (SoundFont) files (like GeneralUser, FluidR3,...) have bank
> >>>>> numbers < 127 for melodic sounds and 128 for Drum kits, as
> >>>>> recommended by the SoundFont specification [5]. It is necessary to
> >>>>> map the MIDI Bank Select numbers to the SF2 bank numbers, because
> >>>>> they won't always match. The sf2 spec says that "The special case of
> >>>>> a General MIDI percussion bank is handled conventionally by a wBank
> >>>>> value of 128. If the value in either field is not a valid MIDI value
> >>>>> of zero through 127, or 128 for wBank, the preset cannot be played
> >>>>> but should be maintained."
> >>>
> >>> I want to remark the above quotation from the SF2 specification. SF2
> >>> bank numbers for melodic channels are numbers in the range 0 to 127, 7
> >>> bits.
> >>
> >> 128 for wBank. I saw nothing about that in your proposal, or if the drum
> >> MIDI channel should be handled in another way than the rest of the
> >> channels, could you elaborate on that?
> >
> > Melodic channels means all channels except the drum channel. Channel#10
> > is the MIDI drum channel number reserved in the GM specification, and all
> > the other extensions.
>
> This is not true according to
> http://en.wikipedia.org/wiki/Comparison_of_MIDI_standards - neither GS,
> XG and GM2 specify channel #10 as the one and only drum channel.

You are manipulating my words. I've never said "the one and only". The channel 
#10 is the drum channel in GM level 1 standard, and this setting (as a 
default or recommendation) has been inherited by all the other GM extensions.

GS defaults to channel #10 as the drum channel. The drums may be assigned to 
another channel using a SYX message.

XG defaults and recommends channel #10 as the drum channel. Other channels may 
be used as drum channels when CC#32=127 is received on any channel.

I'm not proposing to implement every GS, XG and GM2 feature at this time. 
There are many things to take into account to properly emulate all those 
standards. This can be implemented step by step in future releases.

What I'm proposing is to fix *NOW* the broken behavior that is plaguing 
FluidSynth-1.1.x converting any melodic channel into a drum channel when a 
CC#32=1 is received in a channel. This behavior doesn't correspond to any 
standard. It is utterly wrong.

> > SF2 Bank 128 is only intended to be applied on the MIDI drum
> > channel, not on melodic channels. It is well explained in the SF2
> > specification and appendix documents.
>
> I'm not sure I understand you correctly. Is your proposal that we ignore
> CC0 and CC32 for channel #10 and hard-code it to 128?

What I am proposing is to follow the SF2 standard, and assign the SF2 bank 128  
only to drum channels. And currently, only channel #10 can be a drum channel.

For the future, the "drum enabled" property would be a boolean setting, 
belonging to the channel state. My proposal for future developments is to add 
a new "is_drum" field to the fluid_channel_t structure [fluid_chan.h], and 
initialize it to true for channel #10 in fluid_channel_init() [fluid_chan.c] 
and to false for any other channels. In the future, this field could be 
changed with a new setter function, allowing the extra drum channels features 
in GS, XG and other modes, when those modes become implemented in full. 

Regards,
Pedro



reply via email to

[Prev in Thread] Current Thread [Next in Thread]