FluidSynth / fluidsynth

Software synthesizer based on the SoundFont 2 specifications
https://www.fluidsynth.org
GNU Lesser General Public License v2.1
1.8k stars 252 forks source link

XG drumsets problem #228

Closed ziyamete closed 6 years ago

ziyamete commented 6 years ago

ver:1.1.6 and 1.1.7 win7, 32

fluidsynth: warning: Instrument not found on channel 5 [bank=127 prog=0], subs tituted [bank=0 prog=0]

bank 127 for XG drumkits. correct fallback for drumkits is: bank=128, program=x


and yes; any channel can be used as drum channel.

derselbst commented 6 years ago

Does XG use CC32 or CC0 for bank selection? Because documentation for synth.midi-bank-select says it uses CC32 while CC0 is ignored. However the decision made whether it's a drum channel or melodic channel is implemented for CC0 (Bank MSB): https://github.com/FluidSynth/fluidsynth/blob/cce7dce2da6f7f8312e7885ac9266a80cf96c9e5/src/synth/fluid_chan.c#L255-L268

ziyamete commented 6 years ago

For XG DrumKits: CC0=127, CC32=0, PgCh=xxx For XG SFXKits: CC0=126, CC32=0, PgCh=xxx For XG Melodic Banks: CC0=0, CC32=BankNo, PgChg=xx

derselbst commented 6 years ago

Ok. It seems to me that you were only using CC32 and set it to 127. But CC0 decides on whether the channel is drum or meldoic, which in turn influences the bank fallback. Or if you were using CC0 you have not specified -o synth.midi-bank-select=xg when starting fluidsynth.

Thus: How did you start fluidsynth? And perhaps provide a simple test midi.

ziyamete commented 6 years ago

This is Original Yamaha PSR-7300 Demo file, for testing. Techno.S484.MID.zip

starting: (nothing special) fluidsynth -f fluid.ini "G:\SF2\Some.sf2" midifile.mid

fluid.ini: (just reverb, gain and interp. settings) gain 0.5 interp 7 reverb 1 rev_setroomsize 0.8 rev_setdamp 0.3 rev_setwidth 0.5 rev_setlevel 0.5


I'm creating Soundfonts. I'm looking at the behaviors of the different SNYTHs. (Falcosoft Midi Player, Virtual Midi Synth, XMPlay, Fluidsynth, Vienna, BASS etc.) midi files I use to test : Roland original, Yamaha original demo files. In addition, the various files that come with the synths and other soundfonts.

derselbst commented 6 years ago

Without having actually tested it: You're missing to specify the midi bank selection. You have to start it like

fluidsynth -f fluid.ini -o synth.midi-bank-select=xg "G:\SF2\Some.sf2" midifile.mid

Otherwise it defaults to GS bank selection. See fluidsynth manpage or http://www.fluidsynth.org/api/index.html#CreatingSynth

ziyamete commented 6 years ago

This parameter working good. But can't fluidsynth do this automatically (detect inside)? Because "banks (126, 127, 120, 121 and 128)" are special banks.

PS: Maybe, selecting the wrong file when attaching the midi file.; I meant this file. (Sorry) JazzGuitar.S084.MID.zip

derselbst commented 6 years ago

But can't fluidsynth do this automatically (detect inside)?

Impossible. Given the 4 different bank selection supported, these are 4 different ways to interpret CC0 and CC32. The semantic of these controllers must be provided by the user.

Because "banks (126, 127, 120, 121 and 128)" are special banks.

They are not so special in MMA mode for instance.

ziyamete commented 6 years ago

Okay, I got it.

If you have a playlist and you send it to FluidSynth, you have to say "this file xg, this, gm, this gs, this mma" every time.

I know up to two people who can do this: one is me and the other is you.

Thanks for your interest.

derselbst commented 6 years ago

If you have a playlist and you send it to FluidSynth, you have to say "this file xg, this, gm, this gs, this mma" every time.

Unfortunately yes. It's not standardized by MIDI, so every file may handle this differently.

derselbst commented 6 years ago

Closing as invalid.