asb2m10 / dexed

DX7 FM multi plaform/multi format plugin
GNU General Public License v3.0
2.79k stars 242 forks source link

Normalize every parameter, help needed (test sysex included) #215

Open encore64 opened 4 years ago

encore64 commented 4 years ago

Hiya! Big fan of your project :)

While listening through some sysex-banks in Dexed I noticed that it's possible that out of range-values in sysex could f.ex. create distorted sounds and I wondered why I would find EG level-values of 127 when the maximum allowed is 99. I found that some parameters were not being checked/normalized and some that were (operator eg level etc), were being overwritten with the raw values afterwards ( https://github.com/asb2m10/dexed/blob/02661e7551dcf4682c4b58124a524bcb57a562ba/Source/PluginData.cpp#L131 ).

I've been working on a fix for a pull request ( https://github.com/encore64/dexed/commits/NormalizeCorruptedSysex ) but I realized something - I don't know how the original Yamaha DX7 behaves in these cases as I don't own one anymore. Therefore I've made a test sysex-file. I would be thankful if anyone could try it on their DX7 and report back what the DX7 reports on these values.

TestingLimits.zip

The first 3 voices are the testcase.

1 INIT VOICE (valid "voice", has the maximum setting of these parameters): op1 eg rate / op1 eg level, p eg level / p eg rate = 99 op1 detune = 14 lfo wave = 5 transpose = 48

2 INIT +1 (invalid "voice", increments 1 extra to these parameters op1 eg rate / op1 eg level, p eg level / p eg rate = 100 op1 detune = 15 lfo wave = 6 transpose = 49

3 INIT MAX (invalid "voice", adds the maximum value to these parameters op1 eg rate / op1 eg level, p eg level / p eg rate = 127 op1 detune = 15 lfo wave = 7 transpose = 127

In Dexed these values will be shown when hovering over the parameters. I hope that the DX7 will show what it interprets these values as. Thanks in advance!

encore64 commented 4 years ago

Update: Looks like I will be able to get test results from a Yamaha TX7 (which I assume works the same with regards to this) so I can probably figure this out myself. :)