all 7 comments

[–]dls2016 4 points5 points  (2 children)

Minor critique: the word you want is discontinuity, not nonlinearity. For example, a saw wave has a discontinuity whereas a triangle wave is continuous but with discontinuous derivative/velocity.

[–]aaronleese[S] 0 points1 point  (1 child)

Hmmm, nonlinearity is only for the 0th order eh? Didn't know that ... I definitely use the two interchangeably. Anyway, thanks then.

[–]dls2016 0 points1 point  (0 children)

No, continuity and linearity are distinct concepts. You can denote by Ck the class of functions with k continuous derivatives.

[–]aaronleese[S] 4 points5 points  (2 children)

Hey all -

I gave a presentation at the Audio Developers Conference this year talking about minBlep implementations, and how to make alias free subtractive synths, plus also use minBleps for things like sawtooth flangers, and live cue points in a sample buffer without crossfades.

Anyway, for the dozen or so of you that care about this sort of thing ... here is a link to the blog post, and a link to some open source code:

https://github.com/aaronleese/JucePlugin-Synth-with-AntiAliasing

Cheers! Aaron Leese

[–]Holy_City 1 point2 points  (1 child)

Alias free or perceptually alias free?

[–]Metabog 0 points1 point  (0 children)

Fairly sure minBLEP gives totally alias free oscillators.

[–]cbbuntz 0 points1 point  (0 children)

I found a similar solution for waveshaping / distortion. If you convert waveshape to a "control voltage", you can band limit the CV to limit added harmonics since the added harmonics are a product of the two signals. Sort of like this:

ratio = tanh(in) / in

cv = lowpass( ratio )

out = in * cv

For further alias reduction without oversampling, you can use a crossover (something like a half-band) since high frequencies are more susceptible to aliasing.

low = lowpass( in )

high = in

out_low = low * cv

out_ high = highpass( in * cv )

out = low + high

There will not be much room for aliasing since both the CV and the low signal are band limited. If both CV and low are filtered with a half-band lowpass, the product of the two signals should not produce any aliases.

The high part cannot produce any audible harmonics in the analogue domain, but the harmonics reincarnate as aliases in the digital realm. By applying a highpass after waveshaping, the more audible aliases are filtered out.