Despite Hordijk’s warnings on the difficulties of implementing his Harmonic Oscillator algorithm digitally, I was keen to try out some of the ideas in Audulus. One of the aspects of the feedback loop involves using a cosine waveform to avoid the DC offset that would occur when feeding the sine back on itself. In the Hordijk’s diagrams he indicates a crossfade between the sine and cosine signals as part of the feedback loop, but I kept on running into the pitch drop problem that he explains is a result of the DC offset.1 I eventually gave up on the linear FM route and decided to try implementing it with phase modulation instead – with some success.
The morph from sine to saw has a different character than making a crossfade between the two waveforms since the saw edge gradually tilts rather than appearing as an abrupt vertical,2 and the sawtooth and square waves also have a rounder edge than the characteristic forms of these waves. I haven’t been able to achieve quite the same sharpness in the shapes that Hordijk does with his analogue implementation (compare the waveforms at the beginning of the second video) since the phase modulation begins to distort, but the somewhat more mellow quality that results also has a charm of its own. 3
I’ve put it together as a simplified µModule, with the addition of a control that adjusts the level of both the odd and all spectra simultaneously in relation to the sine.
I’m also curious as to why the inverted form of the waveform appears to be slightly lower in pitch. (In the case of this oscillator shifting the “All” knob in the positive direction results in what is commonly know as a reverse (or inverse) sawtooth. This is the default result of the pitch being fed back on itself.) ↩
It is possible to increase the definition of the square wave a little more than I have, but that results in distortion when combining the square and sawtooth spectra. ↩
Modular Diary: Despite Hordijk’s warnings on the difficulties of implementing his Harmonic Oscillator algorithm digitally, I was keen to try out some of the ideas in @Audulus. One of the aspects of the feedback loop involves using a… rdgr.me/u/wgydwt