Triple Oscillator With FM
Above is the modified phase modulation (PM) unit. Frequency is A8 scaled (not shown, a simple multiplication), phase accumulated (NCO), added to the output phase modulation, converted to sine, delayed one cycle (to make it causal you need at least one delay in a loop), and split with the upper branch divided by 2, the lower branch squared, and the two branches cross mixed, the control of which is the odd knob. Output of the cross mix is fed to a comb filter, and attenuated, giving us the phase modulation output. The attenuation factor is the input A8 frequency passed through a lookup table (LUT) to scale it, multiplied by the harmonic content to scale it again, then scaled a final time by the odd knob passed through a simple second order polynomial. The squaring of the sine function gives us the second harmonic and also divides the amplitude by 2. Note that we're not dealing with the squaring offset of +1/8, as this seems unnecessary in practice. I like the odd / all sine sources to be phase locked like this, no need to worry about phase offsets throwing the thing out of whack (like several of my previous designs).
Above is the triple oscillator employing three PM units. The lower two PM units have individual [-127:127] +/-1 octave multiplicative offsets, and share an additive offset control that drives one sharp and the other flat, with different ratios. The sine and PM outputs of the bottom two units are cross mixed, with the results cross mixed with the sine and PM outputs of the top unit. The final PM signal is added to the NCO of the top unit and converted to sine to give us an FM signal. This is cross mixed with the final sine signal to give us the audio output, which is further attenuated and filtered (not shown). All PM units share a common odd knob, harmonic level knob (which is PV modulated), and octave knob.
Above is the odd knob polynomial procedure. The harmonic level at the ends of the all / odd cross mix tend to be stronger than the middle, so this polynomial compensates for that. The odd knob value has its sign bit flipped, which effectively subtracts 1/2 the range. This is squared, which flips the negative portion up, divides the max by 2, and makes the ends curve up. The bits of this are negated, which is very much like subtracting it from one, giving us a gain function we can apply to the cross mix. The ends get 0.75 gain, the center 1. The LUT was gained up 1.25 to compensate for the gain lost in the polynomial. This and the LUT are the ugly bits of "sausage making" in the PM unit.
I played around various PV modulation schemes, first I modulated the odd knob, then the fm knob, but neither seemed all that meaningful or profound. In the end I replaced the PV knobs with bass and treble controls, which seem considerably more useful. Toyed with the idea of removing the "LEVELS" UI page and giving this real estate over to the oscillator section, but am holding off.
Will post sound samples soon...
[EDIT] And of course I'm repeating semi-failed experiments that I'd forgotten that I did long ago. The crossfade works OK at maximum harmonic content, but accentuates the middle with lower harmonic content. So I'm going back to separate all and odd sines and crossfeeding those, and have some more FM ideas to try out.