Microsoft GS emulation?

Started by Zenxia,


Falcosoft

Quote from: ZenxiaBassmidi can emulate this feature?

https://github.com/FluidSynth/fluidsynth/discussions/1196

This feature is not MS GS Soft Synth specific, MS GS Soft Synth behaves this way since the hardware synth it tries to emulate (i.e. Roland SC-55) behaves this way. 

BassMidi does not emulate this kind of drum channel peculiarity. That's why e.g. DOOM E1M1 cymbals are not cut properly right at the beginning. 

Ian @ un4seen

It looks like Microsoft's GS synth applies this note cutting to all channels, while Roland's VSC3 synth (SC-55/88 emulator) only applies it to drum channels. Is it only the drum channels that you're concerned about, and do you know if all Roland GS hardware does it too? If so, BASSMIDI could be made to do the same when in GS mode. Otherwise, it would need an option added for it. It should also already be possible to implement in a soundfont by making every key a member of an exclusive class.

Falcosoft

Quote from: Ian @ un4seenIt looks like Microsoft's GS synth applies this note cutting to all channels, while Roland's VSC3 synth (SC-55/88 emulator) only applies it to drum channels. Is it only the drum channels that you're concerned about, and do you know if all Roland GS hardware does it too? If so, BASSMIDI could be made to do the same when in GS mode. Otherwise, it would need an option added for it. It should also already be possible to implement in a soundfont by making every key a member of an exclusive class.

Hi Ian,
AFAIK only SC-55 and and in case of later Sound Canvas models emulated SC-55 mode behave this way.
And only drum channels are affected.
https://www.youtube.com/watch?v=iofbWYYVcSs

BTW, you can test SC-55 behavior with Nuked SC-55 that is a much more accurate low level emulator:
https://github.com/nukeykt/Nuked-SC55

Ian @ un4seen

Quote from: FalcosoftAFAIK only SC-55 and and in case of later Sound Canvas models emulated SC-55 mode behave this way.

In that case, I guess it can't simply be enabled by GS mode. Do you have any suggestions for how it should be enabled?

By the way, I tried modifying a soundfont to put every drum key in its own exclusive class (if it wasn't already in one) and that had the desired result. But I guess you would want to be able to enable/disable this on any soundfont?

Falcosoft

Quote from: Ian @ un4seen
Quote from: FalcosoftAFAIK only SC-55 and and in case of later Sound Canvas models emulated SC-55 mode behave this way.

In that case, I guess it can't simply be enabled by GS mode. Do you have any suggestions for how it should be enabled?

By the way, I tried modifying a soundfont to put every drum key in its own exclusive class (if it wasn't already in one) and that had the desired result. But I guess you would want to be able to enable/disable this on any soundfont?

Hi,
Here is a rather long discussion about the same problem:
https://github.com/FluidSynth/fluidsynth/issues/1466

Namely FluidSynth first introduced this behavior as fixed on drum channels.
Then the author of General User GS provided examples where this new behavior is not optimal (e.g. cymbal rolls not written for SC-55).
Then the option to achieve this behavior at soundfont level was also tried but later dropped.
Finally introducing a new option remained the only viable solution.   

If you still want to avoid the new option alternative and introduce this as default for GS then you should also split the currently same GS and SC-88 SysEx reset behavior and apply this only in case of an explicit GS reset. Of course the problem is with this approach that the SC-55 behaves this way even in GM mode. And SC-88+ devices do not behave this way even in GS mode (when SC-55 emulation is not activated).

Ian @ un4seen

OK, here's an update for you to try:

    www.un4seen.com/stuff/bassmidi.zip

Not entirely sure what to call the new option, but settled on BASS_ATTRIB_MIDI_DUPNOTES for now. It determines duplicate note behaviour and can be one of the following: 0 = allow duplicates, 1 = stop old note on drum channels, 2 = stop old note on all channels.

Falcosoft

#7
Hi Ian,
I have just tried and it does not seem to work. For testing I used this soundfont
https://falcosoft.hu/reality_gmgs_falcomod.zip
and DOOM E1M1 as well as DOOM2 Map01 Midi files (I have attached the later).
With both Midi files I cannot hear any differences of the cymbal sound regardless of BASS_ATTRIB_MIDI_DUPNOTES settings.
BASS_ChannelSetAttribute(midistream, BASS_ATTRIB_MIDI_DUPNOTES, 1);
For reference the cymbals should sound this way (SC-55):
https://www.youtube.com/watch?v=UZcwiYmJwLo

@Edit:
I have also tested with General User GS 2.0 and 4GMGSMT.SF2 and the results were the same. So it seems the problem is not Soundfont specific.


Ian @ un4seen

Ah. I was working with the MIDI file in the first post, which has overlapping duplicate notes, but I see that isn't the case in your file. The option will need tweaking then. And renaming. Here's another update for you to try:

    www.un4seen.com/stuff/bassmidi.zip

The option is now called BASS_ATTRIB_MIDI_EXCKEYS (for "exclusive keys"), with the same settings available: 0 = normal, 1 = drum channel keys are exclusive, 2 = all channel keys are exclusive.

Falcosoft2

Hi Ian,
I'm on vacation so I can test it next week.

Falcosoft

Quote from: Ian @ un4seenAh. I was working with the MIDI file in the first post, which has overlapping duplicate notes, but I see that isn't the case in your file. The option will need tweaking then. And renaming. Here's another update for you to try:

    www.un4seen.com/stuff/bassmidi.zip

The option is now called BASS_ATTRIB_MIDI_EXCKEYS (for "exclusive keys"), with the same settings available: 0 = normal, 1 = drum channel keys are exclusive, 2 = all channel keys are exclusive.

Hi,
I have just tested and it seems to be working well (with drum channel keys are exclusive).