probonopd/MiniDexed

DX7II-style adavnced pan modes and pan envelopes

Opened this issue · 11 comments

Currently MiniDexed can do simple (static) stereo panning for each voice. However, this is not sufficient to accurately reproduce DX7II performances.

The DX7II offers "Stereo pan with touch, LFO, key number or EG-control".

@BobanSpasic writes:

DX7II has pan modes and pan envelopes.
DX7IIE.PDF
Pages 36 and 37
See, you can write envelopes, how the voice moves between the outputs, or how the levels of the two voices can change with time.
Also, you can assign this Pan controls to ModWheel, or to Aftertouch etc.

(Note to self, this is mostly relevant for live/solo situations.
According to Espen Kraft, in mixes with mutiple synths, synths with panning effects "tend to muddy the mix". One may want to narrow the stereo field to "almost mono", then pan one left and one right according to https://www.youtube.com/watch?v=761DqeWR7U8 (toward the end))

If we wanted to do this, could we add the needed parameters to our current performance/*.ini files? @BobanSpasic would you be able to define which parameters would need to be added?

Or would we essentially have to implement full DX7II performance sysex natively in MiniDexed?

That are 11 additional parameters per TG. Are you sure you want to make the ini files so big?
Anyway, here are the parameters:

        PanMode: byte;                    // 0-3   0:MIX; 1:ON-ON; 2:ON-OFF; 3:OFF-ON
        PanControlRange: byte;            // 0-99
        PanControlAssign: byte;           // 0-2   0:LFO; 1:Velocity; 2:Key
        PanEGRate1: byte;                 // 0-99
        PanEGRate2: byte;                 // 0-99
        PanEGRate3: byte;                 // 0-99
        PanEGRate4: byte;                 // 0-99
        PanEGLevel1: byte;                // 0-99
        PanEGLevel2: byte;                // 0-99
        PanEGLevel3: byte;                // 0-99
        PanEGLevel4: byte;                // 0-99  

These only exist in 2-voice performances, correct? So the worst case is that we have 22 more lines in DX7IID/FD derived performances. Or do some 8-voice instruments also use these?

Seems worth it to me.

Or would we essentially have to implement full DX7II performance sysex natively in MiniDexed?

MiniDexed is natively DX7 Mk1 - it means VMEM parameters.
DX7 Mk1 has, in addition to VMEM, the global function parameters. You have this implemented in performance.ini files

DX7II (Mk2) makes the function parameters per voice (not global anymore), and call them AMEM.
In the way we use MiniDexed, performance.ini files are still OK, because for use does not make any difference if the parameters are global per TG, or per voice - we are using one voice per TG.

Now, DX7II has performances (PMEM) - settings for articulation of two voices in set.
You can add this to performance.ini files, it does not make any difference for us in usability.

Implementing full DX7II compatibility means rewriting SynthDexed - VMEM and AMEM into SynthDexed, PMEM as performance in MiniDexed.
I do not believe it is a realistic target. You need some more dedicated developers for this task.
And do not forget - you need a compatibility mode fore DX7 Mk1 voices (sysex files). Not even Yamaha DX7II succeed in maintaining the full compatibility with Mk1 at importing Mk1 sysex files.

These only exist in 2-voice performances, correct? So the worst case is that we have 22 more lines in DX7IID/FD derived performances. Or do some 8-voice instruments also use these?

8-voice would be TX802. No, TX802 doesn't have anything similar. You can either assign the voice to the channel 1, to the channel 2, or to both channels. That would be PAN=0, PAN=127, and PAN=64 in MiniDexed

Think about it differently: If we do something in this direction, it should be an advantage for the entire miniDexed and not just an emulaton for the DX7II (2 TGs only). Assuming we create a 9th silent TG, then we would have 6 EGs plus a pitch EG and a LFO at our disposal. Assuming it is possible to get these values from the SynthDexed, you could route them to any parameters: PAN, cutoff, resonance, ....
This way you wouldn't need to spend any time and effort programming an envelope generator.
I hope you understand what I mean!?

I hope you understand what I mean!?

Me? Not so sure. But maybe @dcoredump?

I hope you understand what I mean!?

Me? Not so sure. But maybe @dcoredump?

Banana71 means we could have an external envelope generator, outside the TGs, that we could route to any parameter.

I believe the DX7II's PAN envelope generator is polyphonic. This means that each individual voice had its own position in the panorama. Otherwise, every new note would restart the generator and there would be unsightly jumps in the panorama. I don't know if this works with the Dexed Engine!?

Very interesting discussion :) !

I didn't even know that my (hardware) DX7II could do that :)

Synth_Dexed is currently more of an emulation of the old DX7. Of course you can make changes to various parts and turn it into a DX7II or unofficial DX7III. Personally, I find this very exciting, but I don't have the time to take care of it.

My idea for the (Teensy-)MicroDexed (and thus actually for Synth_Dexed) was to build in a CC matrix with which you can assign MIDI CCs to (almost) any parameters (and possibly also equip them with start/stop values and possibly a special curve). I had also thought about implementing 1-4 LFOs and ADSR envelopes that could be routed internally to this matrix (the Teensy-Audio-lib has already implemented such objects). Problems could arise with the resolution of the parameter values, as these usually have value ranges of 0-99. This may not be sufficient and then it becomes complicated because you have to dive into the base code of Dexed (and become incompatible). But in my opinion you have to try this.

Very interesting discussion :) !

I didn't even know that my (hardware) DX7II could do that :)

Synth_Dexed is currently more of an emulation of the old DX7. Of course you can make changes to various parts and turn it into a DX7II or unofficial DX7III. Personally, I find this very exciting, but I don't have the time to take care of it.

My idea for the (Teensy-)MicroDexed (and thus actually for Synth_Dexed) was to build in a CC matrix with which you can assign MIDI CCs to (almost) any parameters (and possibly also equip them with start/stop values and possibly a special curve). I had also thought about implementing 1-4 LFOs and ADSR envelopes that could be routed internally to this matrix (the Teensy-Audio-lib has already implemented such objects). Problems could arise with the resolution of the parameter values, as these usually have value ranges of 0-99. This may not be sufficient and then it becomes complicated because you have to dive into the base code of Dexed (and become incompatible). But in my opinion you have to try this.

FM8 has a matrix like that. Each of the operators can be routed to the output and panned.