fluid-dev
[Top][All Lists]
Advanced

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

Re: [fluid-dev] MIDI mode


From: josh
Subject: Re: [fluid-dev] MIDI mode
Date: Thu, 08 Oct 2009 10:52:56 -0700
User-agent: Internet Messaging Program (IMP) H3 (4.1.6)

These changes are meant to address missing percussion in GM and GS MIDI files. The GM standard says that note-offs should be ignored on MIDI channel 10 for all but Long Guiro and Long Whistle. In addition, the MIDI standard requires that for each note-on there is a corresponding note-off. Many GM/GS MIDI files have very short duration percussion notes, since its assumed that note-offs are ignored. Ignoring the percussion note-offs is the right thing to do and is what composers for GM/GS files expect.

All this is enabled only if GM/GS SYSEX messages are received which enable these modes or the user explicitly assigns GM or GS mode via the FluidSynth settings. Otherwise FluidSynth behaves as normally and all note-offs are honored. This is just the beginning of adding GM/GS support, there are other things that need to be addressed as well.

Hope that answers your question.

Josh

Quoting "S. Christian Collins" <address@hidden>:
Josh,

How does this affect the GS sound effects bank?

-~Chris

address@hidden wrote:
So I went ahead and added GM On/Off and GS Reset SYSEX handling. There are now 2 parameters synth.midi-mode=normal/gm/gs and synth.midi-mode-lock=no/yes. If midi-mode-lock is set to yes then SYSEX MIDI mode messages have no effect (useful for forcing FluidSynth to a particular mode). If the current MIDI mode is GM or GS, then percussion note-offs are ignored for all except Long Guiro and Long Whistle, as per the GM spec. I tested this with a GS file and it seems to work as expected (no more missing drums).

TODO:
1 Reset MIDI mode as part of fluid_synth_system_reset()
2 Reset controllers when GM is turned on (and other values mentioned in gmguide2.pdf) 3 Figure out how to synchronize the midi-mode setting with the midi_mode variable, when it is being assigned from the synthesis context.

For item 3. I'm thinking of adding value get callback functionality to settings, so that a callback can be registered for obtaining the current value (so for example the midi-mode string setting could be generated from the current value of the enum synth->midi_mode). Perhaps some hack can just be implemented for now though, but calling settings functions from within synthesis context isn't really a good idea (mutex locks, mallocs, etc).

Feedback and testing would be appreciated :) The "normal" value for midi-mode doesn't sound great, but I couldn't think of a better word.

I'm going to do my best to get FluidSynth 1.1.0 released by the end of this month (in a nice working/stable state with good API documentation). Testing FluidSynth in various environments and reporting success/problems would be really helpful. There are some fairly significant changes with the whole synthesis path and the more testing FluidSynth in real word scenarios the better.

Cheers!
Josh



_______________________________________________
fluid-dev mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/fluid-dev







reply via email to

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