Hello there, I would like to have your point of view on what is the best sounding (less aliasing, clearest) Sawtooth oscillator when playing above 3khz. I tried Saw, SawDPW, DPW4Saw, BlitB3Saw, but it doesn’t appear that one of them is really better. ( at least for my ears).
So far, the most convincing digital saw oscillator that I use, is the antialiasing oscillator from Kyma. But it’s a wavetable oscillator and it has a kind of aesthetic (even if it’s supposed to be a pure waveform) that I find special and I prefer the one on SC.
I don’t know if you have tricks, ideas, or references to get a crystal clear saw wave on SC that could be really nice at 3,4,8,10 khz etc…? I was wondering about FM synthesis (by the way if someone could give the line code to produce a pure sawtooth waveform using PMOsc, or FM7.ar or a classic conbination of two SinOsc (carrier and modulator), it would be really nice) I know the theory (the 1:1 ratio) but I didn’t manage to get the expected result). Maybe additive synthesis could produce interesting results too?
Thanks a lot.
1 Like
Hello and welcome to the forum!
I did some tests and didn’t see any aliasing with Saw.
E.g. run
{ Saw.ar(3500, 0.1) }.play
do
s.freqscope
and switch to the linear FrqScl on the right hand side of the gui.
Looks as it should.
So my assumption is that you might prefer a wavefrom that somehow differs from a sawtooth approximation without aliasing.
FWIW you can check an approximation with additive synthesis, it takes a maximum number of partials and sets all to zero that would be above half nyquist.
(
SynthDef(\additiveSaw, { |out, gate = 1, freq = 1000, amp = 0.1|
var partialNum = (SampleRate.ir / 2 / freq).floor;
var sig, maxPartialNum = 200; // max number of partials
var indicatorSig = { |i| i <= (partialNum - 1) } ! maxPartialNum;
sig = Mix(SinOsc.ar((1..maxPartialNum) * freq * indicatorSig, 0, amp ** 2.sqrt) / (1..maxPartialNum));
Out.ar(out, sig * EnvGen.ar(Env.asr, gate, doneAction: 2))
}).add
)
x = Synth(\additiveSaw, [freq: 3500])
x.release
Personally I don’t hear a difference to
{ Saw.ar(3500, 0.1) }.play
Regards
Daniel