-
Notifications
You must be signed in to change notification settings - Fork 258
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
After GM system on, GM2 system on does not re-activate bank select. #1323
Comments
OMG, I was just running into this bug while testing for my upcoming GeneralUser GS update. I thought I was going crazy! One of the MIDI files I was testing must have been sending a GM reset command, and then after that, bank selection stopped working even after issuing a GS reset command. The only way to get bank select working again was to restart Qsynth. |
Additional report. |
I've checked test.mid file in Sekaiju7.9. It appears, that you're sending GM System Enable message with device ID 0x7F, but the rest of your SysEx messages are being sent with device ID 0x10 (16 in decimal). Maybe you should try sending them with 0x7F instead. In other words the GS message should look like this: And XG message: |
Thank you. Indeed, 0x7F (broadcast) was the standard for device IDs for GM and GM2 system on. In many SMFs (Standard MIDI files), it was common to hack the GM system on and then do a GS reset (or XG system on). |
GM2 style bank selection is currently not supported, probably because FluidSynth was designed for Soundfont 2 spec, which was made before GM2 was a thing. As for device ID, you can set Incidently, FluidSynth by choice doesn't follow XG standard when it comes to checking the device ID in the SysEx message: it compares the entire byte as opposed to its lower half. Apparently following XG standard to a T breaks a lot of MIDI files. Here is a link to SysEx code section for more details: fluidsynth/src/synth/fluid_synth.c Line 1969 in cb8da1e
|
FluidFeatures#sysex-messages For GS and XG, the desired behavior was achieved by setting the synth.device-id option to 16. @mrbumpy409 |
I can confirm that changing the device ID in the GS reset SysEx to 7F allows CC0 bank change to work again. Thank you! |
I found time to look into this:
So how to fix this?
|
As I understand it, there's an informal convention that device IDs 0 through 15 are for MIDI devices responding only to the corresponding channel (so, device 0 responds to channel 0), whereas IDs from 16 and onwards are for devices that respond to multiple channels. For that reason, GS defaults to a device ID of 16, because a GS synthesiser can respond to at least 16 different channels. |
Oops sorry, XG doesn't use device IDs that high, my mistake. The device ID = channel ID is probably just a Roland thing. |
FluidSynth version
Execute
fluidsynth --version
and provide the output.FluidSynth runtime version 2.3.5
Copyright (C) 2000-2024 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of Creative Technology Ltd.
FluidSynth executable version 2.3.5
Sample type=double
Describe the bug
Provide a clear and concise description of the current situation, e.g. how the bug manifests.
1.GM system on. (Bank Select is disabled.)
2.The next time you perform a GS or XG reset, the bank select will remain inoperative.
Expected behavior
Provide a clear and concise description of what you expected to happen.
After performing a GS or XG reset, the bank select is to be re-activated.
There also seems to be a problem with the Voices not being initialized after executing a GS and XG reset.
Steps to reproduce
Please explain the steps required to duplicate the issue, esp. if you are able to provide a sample application. E.g. how to start fluidsynth, what shell commands to enter, what midi events to send, etc.
I have created a SMF file that reproduces the situation.
test.zip
SoundFont uses GeneralUser GS 1.471.
The SMF file is processed as follows.
Bank select works with 9 and 13,
11 and 15 want the door tone to ring.
Additional context
If you are able to illustrate the bug with an example, please provide simple
source code below or as attached file. List any other information that is relevant to your issue, e.g. stack traces, related issues, build logs, suggestions on how to fix, links to related discussions at fluid-dev, etc.
The text was updated successfully, but these errors were encountered: