Code: Select all
desc:Naive saw
slider1:440<20,20000,1>Frequency (Hz)
@slider
dt = slider1 / srate;
@sample
y = 2*t - 1;
t += dt;
t -= floor(t);
spl0 = spl1 = 0.25 * y;
Code: Select all
desc:PolyBLEP saw
slider1:440<20,20000,1>Frequency (Hz)
@slider
dt = slider1 / srate;
@sample
y1 = y0;
y0 = 0;
t += dt;
t -= floor(t);
t < dt ? (
x = t / dt;
y1 -= 0.5*x*x;
x = 1 - x;
y0 += 0.5*x*x;
);
y0 += t;
y1 = 2*y1 - 1;
spl0 = spl1 = 0.25 * y1;
Next I made this naive hard-sync saw:
Code: Select all
desc:Naive hard-sync saw
slider1:440<20,20000,1>Master (Hz)
slider2:1000<20,20000,1>Slave (Hz)
@slider
dt0 = slider1 / srate;
dt1 = slider2 / srate;
@sample
y = 2*t1 - 1;
t0 += dt0;
t0 -= floor(t0);
t1 += dt1;
t1 -= floor(t1);
t0 < dt0 ? t1 = t0 / dt0 * dt1;
spl0 = spl1 = 0.25 * y;
Code: Select all
desc:PolyBLEP hard-sync saw
slider1:440<20,20000,1>Master (Hz)
slider2:1000<20,20000,1>Slave (Hz)
@slider
dt0 = slider1 / srate;
dt1 = slider2 / srate;
@sample
y1 = y0;
y0 = 0;
t0 += dt0;
t0 -= floor(t0);
t1 += dt1;
t1 -= floor(t1);
t0 < dt0 ? t1 = t0 / dt0 * dt1;
t = t0;
n = ceil(dt1 / dt0);
a = dt1 / dt0 - (n - 1);
loop(n,
t < dt0 ? (
x = t / dt0;
y1 -= a * 0.5*x*x;
x = 1 - x;
y0 += a * 0.5*x*x;
);
t += 1 - dt0 / dt1;
t -= floor(t);
a = 1;
);
y0 += t1;
y1 = 2*y1 - 1;
spl0 = spl1 = 0.25 * y1;