nukeykt wrote on 2024-03-15, 08:40:
orcish75 wrote on 2024-03-15, 07:57:
Incredible stuff!! Well done!
I know the objective is to emulate the device as close to 100% as possible, but can you add in a selectable feature to increase the polyphony from the default 28 voices? This would make it better than the original as music that requires more than 28 voice polyphony will play properly. A lot of the Warcraft 2 tracks for instance drop notes when played on a real SC-55.
not possible with approach I use I guess, all code inside firmware assumes 28 voices and pcm chip has hard limit of 28 voices (curiosly, on original sc-55 pcm chip DOES support 28 voices, it is just firmware is compiled to work with 24). SC-55 firmware does fair amount of the processing actually (all midi->voice/partial conversion, envelope/volume/filter control, LFOs/frequency control, etc, etc), pcm chip on other hand plays samples from ROM, does envelope interpolation and applies some effects
Thanks nukeykt, for your hard work, allowing to preserve all of these Roland Sound Canvas hardwares/synths.
Also, how about adding a command line argument/option, to set the Voice Reserve number of the emulated SC-55mkII, to 2 voices for the channels 1-12, and to 1 voice for the channels 13-16 ?
I've been using this Voice Reserve configuration/solution for decades, on my real Roland Sound Canvas SC-55mkII, and I wasn't noticing any cut notes anymore, with the games I was playing the most, being the Doom engine games, the Build engine games, the Descent games, and other Apogee games.
I remember the first time I had encountered a cut note problem : it was with the Heretic game, when in the E1M4 level, where the "Strings" instrument (number 49) played in the channel 11 was getting cut off, and it was unbearable for me.
However, before even buying my SC-55mkII, I had read the entire manual of the SC-55, SC-55mkII, SC-88 and SC-88Pro (PDF files from the official Roland web site), so I was aware of the "Voice Reserve" feature (called "Partial Reserve" for the original SC-55), which is clearly explained in the manuals.
And so, while in this E1M4 level in Heretic, and using the front panel buttons from my SC-55mkII, simply increasing the Voice Reserve for the channel 11, from 0 to 1 single voice, was enough to fix this problem, and prevent the notes from being cut anymore.
Also, since I had encountered other games having notes being cut off, like Descent for example, this had made me take the decision to permanently set and use the custom Voice Reserve configuration, of 2 voices for the channels 1-12, and 1 voice for the channels 13-16.
It was also at this moment then, that I was glad, after having hesitated between buying either the original SC-55 or the SC-55mkII, of having finally taken the decision of rather buying the SC-55mkII, because setting a custom Voice Reserve configuration on the original SC-55, so that there's at least 1 voice allocated per channel, would require reducing the Voice Reserve number, from 2 voices to only 1 voice, from 2 channels among the channels 1-10, since it has 4 less polyphony voices, compared to the SC-55mkII.
So, what could be done to implement a command line option, to set the Voice Reserve number of the emulated SC-55mkII, to 2 voices for the channels 1-12, and to 1 voice for the channels 13-16, and also considering that the Voice Reserve configuration is set back to the default, if playing a game or MIDI music/file sending either a "GS Reset" or "GM System On" SysEx message, would consist of "maintaining" the state of the customised Voice Reserve number values/variables, stored into the emulated SC-55mkII's RAM ?
Or an alternate way to implement this command line option, could be to send, to the emulated SC-55mkII, a SysEx message to set the Voice Reserve number, to 2 voices for the channels 1-12, and to 1 voice for the channels 13-16, and then "scaning" all of the SysEx messages sent to your "Nuked SC-55" software : if any of these SysEx messages is identified either as a "GS Reset" or "GM System On" SysEx message, then just after having forwarded it to the emulated SC-55mkII, you could re-send the SysEx message to re-set the Voice Reserve number, to 2 voices for the channels 1-12, and to 1 voice for the channels 13-16 (after a delay of at least 50ms, to give enough time to the "GS Reset" or "GM System On" SysEx messages to be executed, as recommended by Roland) ?
Unfortunately, it seems that even with this custom Voice Reserve configuration, there could still be notes being cut off, when the maximum polyphony is exceeded, on the channels 13-16, when an instrument made of 2 partials/voices, is being used on these 4 channels.
This can be tested and demonstrated with the Heretic example above : while in this E1M4 level in Heretic, if increasing the Voice Reserve for the channel 11, from 0 to 1 single voice, is enough to prevent the "Strings" instrument (number 49) from being cut off, then changing the instrument for this channel 11, to another instrument made of 2 partials/voices, like the "Syn. Strings2" instrument (number 52) for example, will result in the notes on this channel to be cut off, once again, unless the Voice Reserve for this channel is increased to 2 voices.
However, using this custom Voice Reserve configuration is still much better than the default one, and avoids notes being cut off with most games, so adding this command line option would still be useful and important.
Finally, another similar command line option could be added, being useful when using 2 instances of "Nuked SC-55", or if someday, a feature allowing to run "Nuked SC-55" with 2 emulated SC-55(mkII) synths, in the same window (in a top-to-bottom layout for example), and automatically allocating the odd channels to one emulated SC-55(mkII) synth, and the even channels to the other emulated SC-55(mkII) synth.
In these cases, the command line option would set the Voice Reserve number to 3 voices, to only the odd channels for the emulated SC-55(mkII) synth to which only the odd channels are allocated, and also set the Voice Reserve number to 3 voices, to only the even channels for the emulated SC-55(mkII) synth to which only the even channels are allocated.
Actually, if using 2 instances of "Nuked SC-55", then 2 different command line options would be required : one to set the Voice Reserve number to 3 voices, to only the odd channels for the "Nuked SC-55" instance meant for the odd channels only, and another one to set the Voice Reserve number to 3 voices, to only the even channels for the "Nuked SC-55" instance meant for the even channels only.
Also, I've intentionally suggested to set the Voice Reserve number to 3 voices, for a total of 24 voices per emulated SC-55(mkII) synth, so that these command line options could work with both the original SC-55 and the SC-55mkII too, unless you don't mind adding yet another command line option, to set the Voice Reserve number to 4 voices, for 4 of the odd channels and for 4 of the even channels, to make full use of the SC-55mkII's additional 4 polyphony voices ?