Hi André,

Don't use wavetables!

As you have constructed your desired waveform as a continuous function
all you have to do is work out where any discontinuities in C(n) occur
and you can band limit those use corrective grains for each C(n)
discontinuity at fractions of a sample where the discontinuity occurs.
Adding sync to this is trivial is you just do the same thing, in fact
you can jump between any two points in your waveform or waveform shape
instantly if you want to create even more interesting waveforms.

For example a sawtooth is C(1) continuous all the time, it just has a
jump in C(0) every now and again, so you just band limit those jumps
with a C(0) corrective grain - which is an integrated sinc function to
give you a bandlmited step, then subtract the trivial step from this,
and add in this corrective grain at a fraction of a sample to
re-construct your fraction of a sample band limited step.

Similarly you can bandlimit C(1) and C(2) discontinuities, after that
the amplitude of the discontinuities is so small that it rarely
matters if you are running at 88.2 / 96 khz.



On 15 September 2016 at 23:49, André Michelle <andre.miche...@gmail.com> wrote:
> Hi all,
> many articles have been written about bandlimited waveform generation. But 
> for various reasons I am not able to implement any solution to my synthesiser 
> that are feasible. The synth allows blending smoothly between different 
> shapes 
> (http://codepen.io/andremichelle/full/8341731a1ff2bdc90be3cb88e6509358/). It 
> also provides phase modulation (by LFO), frequency gliding, hard sync and 
> parameter automation. The following I already understand: Functions other 
> than a sinus have overtones that may overlap the Nyquist-frequency reflecting 
> back into the audible spectrum. I tried the following to reduce the alias: 
> Oversample (32x) and apply multiple BiQuad[4] filter (Cutoff at Nyquist or 
> less), Oversample and down-sample with a Finite Impulse Response filter, use 
> a Sync function window to be applied to each sample (sinc Fc/Fs), apply a FFT 
> and sum up sin(x) up to the Nyquist. All those technics seem to be either 
> static (FFT) or very costly or are not perfectly reducing the alias. The 
> synthesiser runs online inside your browser 
> (https://www.audiotool.com/product/device/pulverisateur/). So CPU time is 
> crucial. Most articles are explaining how to create the usual suspects such 
> as Sawtooth, Square and Triangle. The other articles are filled with complex 
> math. I am not a complete dummy but most articles are really hard to follow 
> and not pointing out the key ideas in plain english.
> A simple question remains:
> Is it possible to sample an arbitrary dynamic(changing over time) waveform 
> function f(x) excluding frequencies over Nyquist?
> Any suggestions are highly appreciated!
> ~
> André Michelle
> https://www.audiotool.com
> _______________________________________________
> dupswapdrop: music-dsp mailing list
> music-dsp@music.columbia.edu
> https://lists.columbia.edu/mailman/listinfo/music-dsp
dupswapdrop: music-dsp mailing list

Reply via email to