Omni Mode is not handled according to MIDI spec #1186
Replies: 14 comments 3 replies
This comment was marked as off-topic.
This comment was marked as off-topic.
-
Omni On/Off, Poly/Mono in FluidSynth is documented in doc/FluidPolyMono-004.pdf. Fluidsynth doesn't attempt to do any deviations from the MIDI standard. In particular the "recommended start up condition"
Sorry the reported issue cannot be reproduced. The command setbasicchannels is intended to add a basic channel group
|
Beta Was this translation helpful? Give feedback.
-
There is a chapter number mistake in my previous comment:
should be replaced by "...chapter 2.1.3..." |
Beta Was this translation helpful? Give feedback.
-
The image refer to a receiver with only one channel group starting at MIDI channel 1. But a receiver (the synthesizer) could have more than one group of channel(s). Mode message (poly, mono, omni on, omni off) are CC messages intended to a particular group that must be send to the 'channel basic' of this group. Mode message aren't intended to the synthesizer. Reading chapters 2.1.1, 2.3, 2.4, 2.5 should help to understand all this. |
Beta Was this translation helpful? Give feedback.
-
Yes that is true for "Mode messages" but in Omni-On mode non-mode messages should be accepted from any channel. That's what the image is showing. FluidSynth does not behave this way. Instead FluidSynth regards "Omni-On" as accepting messages from I see the reference to the MIDI spec page 7 in your documentation:
I believe this is the behavior you are attempting to implement. I have to admit that the spec is unclear how "Multi Mode" should behave when Omni is on. My interpretation would be similar to how multiple physical devices on the same MIDI bus would behave if each were in omni mode, i.e. when that "basic channel group" is in omni mode, it accepts messages from every channel. So if you were to have multiple groups in omni mode, sending a message to any channel would trigger each channel group in omni mode. |
Beta Was this translation helpful? Give feedback.
-
If N is > 0, FluidSynth will accept non-mode messages (i.e voices message described in MIDI specs page 9) only on these N channels starting from basic_channel.
Sorry, I don't understand what you mean because I don't know what are non "mono on" mode messages.
Yes, in fluidsynth this is that behaviour that is implemented: for each fluidsynth instance, the whole set of MIDI channels (0 to synth.midi-channels minus 1) can be split in independent of MIDI channels group. Each group can bet set in a distinct mode (poly omni on, mono omni on, poly omni off, mono omni off). The first MIDI channel of a group is called 'basic channel'. One can consider a single fluidsynth instance equivalent to what the MIDI specs page 7 refers to a "single instrument." |
Beta Was this translation helpful? Give feedback.
-
Yes with this fluidsynth implementation of "Omni mode", a fluidsynth instance will listen to a channel only if this channel belong to a group of channel. Otherwise the message is ignored. Having some MIDI messages ignored by a fluidsynth instance is useful in case of application making use of fluidsynth instance combined with hardware synthesizer. For example that allows a MIDI channel message to be played exclusively by the software synth or the hardware synthesizer.
As it is always possible to have all the MIDI channels range (0 to synth.midi-channels minus 1) belonging to a group of channel, this implementation is still compatible to what the MIDI spec intends. |
Beta Was this translation helpful? Give feedback.
-
Sorry, I don't understand why you think so. |
Beta Was this translation helpful? Give feedback.
-
I agree that's useful but the MIDI standard allows you to get that behavior by turning "Omni mode" off.
When basic_channel != 0 and the synth is in Omni mode, the synth should still accept messages from all MIDI channels. With FluidSynth this is not the case. Thank you so much for taking the time to discuss this issue with me. I now understand better the intentions of the behavior of FluidSynth. |
Beta Was this translation helpful? Give feedback.
-
No. With MIDI standard, setting "Omni mode" off on a "channels group" doesn't allow to make future noteon MIDI message to be ignored.
Assuming a fluidsynth instance with 16 MIDI channels (0 to 15). 2)Assuming one intends this fluidsynth instance requires accepting messages from all MIDI channels. |
Beta Was this translation helpful? Give feedback.
-
There must be a misunderstanding here because I don't believe this is true. In a normal MIDI synth, you can simply turn omni mode off then change basic channel to have the synth ignore all messages that aren't sent to the basic channel.
This is understood but this is not how Omni mode normally behaves in MIDI. |
Beta Was this translation helpful? Give feedback.
-
Turning omni mode off is specified in MIDI specs. But the method of changing basic channel to have the synth ignore all messages that aren't sent to the basic channel isn't specified in MIDI specs. Also the method to add/remove multiple basic channel group isn't specified. |
Beta Was this translation helpful? Give feedback.
-
This is how the multiple "channels group" behaves in a fluidsynth instance. This behaviour should be considered equivalent to what is described in the MIDI specs p7: |
Beta Was this translation helpful? Give feedback.
-
For me you should consider that a fluidsynth instance works as multiple "virtual" instruments (i.e multiple channels group) as described in FluidPolyMono-004.pdf. This allows to build an easy setup of one (or more) fluidsynth instance + hardware synth(s) on the same MIDI bus. This allows an easy control of the number of channels that belong to a "channel group" so that a voice message received from the MIDI bus are accepted exclusively by one "channel group" or one hardware synth. This allows an easy control change of the mode (poly/mono, omni on/off) of a single "channel group" because the new mode applies only to the channels members belonging to this group. |
Beta Was this translation helpful? Give feedback.
-
According to the MIDI spec when the device is Omni mode, the basic channel is ignored:
In FluidSynth, even when in omni mode, if a MIDI message is sent outside of a basic channel group, the message is ignored.
To reproduce this start fluidsynth with config:
Then send a "note on message" to channel 1 (index 0). It will be ignored.
The reason that I created a discussion for this issue instead of making a bug report is that it seems to be intentional behavior to support FluidSynth's concept of "basic channel groups." Was this behavior inspired by any supplemental specifications, addendums or other synths, or is it unique to FluidSynth? Is there an ideal place to document these deviations from the MIDI standard? If so I don't mind documenting that.
Beta Was this translation helpful? Give feedback.
All reactions