[sdiy] [synth-diy] numerically controlled superoscillator without hard sync
Tom Wiltshire
tom at electricdruid.net
Tue Feb 11 01:44:51 CET 2014
On 10 Feb 2014, at 23:42, rburnett at richieburnett.co.uk wrote:
> Tom Wiltshire wrote:
>
>> ....A couple of recent experiments of my own:
>> http://www.electricdruid.net/digiosc.aiff
>> http://www.electricdruid.net/vocalosc.aiff
>> The first is a multiple oscillator wavetable scheme - sort of PPG
>> meets SuperSaw. The second is uses a set of five windowed sine waves
>> to produce formants,,,
>
> Very interesting. What platform did you use to generate these examples? Did you have some code running in realtime on a DSP chip, or did you generate the AIFF files "off-line" in MATLAB or something to test out your algorithms? Are there any tricks you used to mitigate aliasing that you're prepared to share ;-)
Both of these were generated in real time, straight out of the DAC outputs of the dsPIC 33FJ128GP802. I remember asking here about the original Roland super saw detuning at the time I was working on it, and you gave me some pointers that finished up in the code, including the idea of a non-linear detuning table, so that the detuning control gives much more detail close to "in tune" than it does as you move further away. This works well in practice, and I eventually used a similar non-linear table for the response of the oscillator "cluster mix". This helps keep the overall level reasonably constant whilst introducing the sound of 6 more oscillators behind the single central pitch.The chip runs 7 separate NCOs for the main oscillator, and 3 more for the sub oscillator. Each of these has a wavetable position which can be independently modulated, plus frequency detuning for the osc "cluster" and frequency modulation for vibrato, etc. I ran out of CV inputs for all that, and was going to add a 4051 to multiplex the control knobs into one ADC channel, using the the other 5 ADC channels for CVs. Like this, knobs get read eight times slower than CV inputs, but this works fine, since no-one twiddles that fast in reality.
As to mitigating aliasing, there's nothing clever going on here. It's all standard stuff. Sample rate is 89KHz. I oversampled the waveforms a bit, based on the number of harmonics I used, although I don't remember exactly the figures. Perhaps 64 harmonics in a table with 256 entries - x2 oversampling?, but it might have been 128 harmonics, or it might have been 512 entries - that ballpark, anyway. I used linear interpolation between samples to help smooth the tables out, and oversampled waveforms helps there. This is particularly important for the low notes, where 256 samples becomes hopelessly inadequate.
> The first sound file reminds me very much of a quirky and little known synth from Cheetah called the MS800 that I bought back in the 90's. It was a tiny half-rack digital wavetable synth that was marketted as being a poor man's Wavestation. It produced the strangest most bewitching, evolving and ethereal sounds, but it was a complete b****rd to program! If you can nail those sounds I think you'ld be on to a winner, because you couldn't possible make more unfathomable UI than cheater did (>.<)
Oh, I could try!
Thanks,
Tom
More information about the Synth-diy
mailing list