John Bowen wrote:Never having had an Oberheim Expander, I looked up what their Tracking Generator did, and see that the also Alesis Ion has something similar.
Oberheim Matrix-6 has a 5-point "Tracking Generator". Alesis Andromeda A6 also has a "Tracking Generator" with 2 to 16 freely adjustable points and a few preset transfer curves that can be applied. With Nord Modular G2 you have to make your own Control Shapers using such modules as SeqCtr (a 16-point transfer function with linear interpolation) or ShpStatic (an exponential / inverse exponential transfer function). My other synths lack control shaping functions. I don't know how the Tracking Generator is implemented in Oberheim Matrix-12 / Expander.
Take a look at the
Andromeda manual page 179-181.
John Bowen wrote:As far as I can tell, my Shaper is the same thing, so I should change the name to match the 'industry standard' (I called it Control Shaper after the Wave, as I mentioned).
Actually, I like the term "Control Shaper" (hereafter called CS) better than "Tracking Generator". As a general principle, all terminology should be as self-explanatory as possible.
John Bowen wrote:On the Solaris plug-in, you can have from 1 to 18 points. There's an input list that includes all of the standard modulation sources in Solaris (which is just about every audio and controller signal), and a switch to have the knobs switch from unipolar to bipolar output.
I think this kind of CS is most useful for certain kinds of input sources, e.g. key number (=MIDI note #). This allows detailed shaping of, for instance, filter keyboard tracking in vocal patches where formant frequencies don't change linearly over the keyboard span.
For other control sources (e.g. velocity and aftertouch) a two-stage approach may be the best. First the input signal is linearly remapped using "windowed expansion":
If Input < LowerThreshold --> Output = 0
If Input > UpperThreshold --> Output = 1
Else Output = (Input - LowerThreshold) / (UpperThreshold - LowerThreshold)
where all parameters are in the range 0-1 and LowerThreshold < UpperThreshold.
The second stage is to remap the output of the first stage using an exponential or inverse exponential function. This remapping can probably be done with Solaris's existing CS. If you add a presetting capability to the CS, the user can easily select from a few curves including varying degrees of exponential and inverse exponential. Look at Andromeda A6 for suggestions on what preset curves to include.
If The LowerThreshold and UpperThreshold controls as well as a number of preset curves can be added to Solaris's existing CS, I think this is all that is needed. Of course, it would be very useful to have 4 instead of just one CS.
John Bowen wrote:Today I added a Lag control to smooth out the output signal. Audio sources work actually pretty well. What I can't do is adjust the 'curvature' of the slew from point to point...did the Oberheim Tracking Generator provide variable slope types?
You didn't mention this, but I presume you have linear interpolation between the points in the CS. For the CS usage we're discussing here, interpolation is needed. On the other hand, without interpolation (i.e. the CS output is "stepped") the CS can be used for sequencer-like applications. So it might be useful to have an interpolation on/off switch.
CS output temporal smoothing could be useful, but most important is input temporal smoothing of MIDI CCs and aftertouch, i.e. the low-resolution "continuous" control signals. However, not all CCs should be smoothed. Switch type CCs (e.g. #64 - Sustain) should not be smoothed. Can smoothing be selected separately for each CC used?
My previous suggestion to smooth the transfer curve was based on the assumption that just a few points would be used. If 16 or 18 points are used, I don't think smoothing or variable interpolation slopes are necessary.
IMO temporal smoothing is best provided using a separate modulation processor ("Lag processor"), where you can choose between linear or inverse exponential slope, thus emulating respectively an analog slew rate limiter and a simple RC network lowpass filter. A "Lag" control determines slew rate or time constant depending on the operational mode selected. Since rate and time are expressed in different units, it is probably more consistent from a UI perspective to control these using a single control labelled "Lag" using arbitrary units (or unitless). Does Solaris have such a Lag Processor?