bool32 trig
frac32.bipolar pitch
frac32buffer frequency
frac32buffer phase
frac32 saw
frac32 pls
frac32 shark
frac32 p2s
frac32 rate
frac32buffer.bipolar sine wave
frac32 duck
frac32buffer phase
frac32.u.map pulse-wave: multiplies the phase of the pulse, creating a strong frequency peak in the higher harmonics
frac32.u.map changes phase position of the shark, turning it from square-like to peak-like (expo triangle)
bool32.tgl track
frac32.s.map.pitch pitch
int32 sets frequency-division for sub-harmonics
int32 OS
int32 wave
frac32.s.map saw-wave amount: feeds the output back into the phase of the sineshaper. creating a saw-wave. The higher the amount, the weirder the other parameters behave!
frac32.s.map shark-wave amount, flatens/steepens the frequency roll-off
frac32.s.map rate
uint32_t Phase;
int32_t phs;
int32_t r;
int32_t t1;
int32_t t2;
int32_t t3;
int32_t t4;
int i;
int32_t val;
int32_t vil;
int32_t pv[4];
int32_t stp[4];
int32_t v26 = (1 << 26);
int32_t v27 = (1 << 27);
int32_t v28 = (1 << 28);
int32_t v29 = (1 << 29);
int32_t v30 = (1 << 30);
int32_t Phs;
int32_t SHAPE(int32_t P, int md) {
switch (md) {
case 0:
Phs = P;
break;
case 1:
Phs = -P;
break;
case 2:
Phs = P > 0 ? P : -P;
break;
case 3:
SINE2TINTERP(P, Phs);
break;
case 4:
Phs = P > 0 ? (1 << 30) : -(1 << 30);
break;
}
}
bool trg;
Phase = 0;
int32_t freq;
int32_t pitch = __SSAT(param_pitch + inlet_pitch, 28);
MTOFEXTENDED(pitch, freq);
freq = freq / param_div >> param_OS;
int32_t nyq;
MTOF(56, nyq)
nyq = nyq;
int32_t width;
int32_t iwidth;
int32_t tmp;
MTOF(56 << 21, tmp)
int32_t dck;
MTOF(__SSAT((v26) + pitch, 29), dck)
int32_t norm;
MTOF(-52 << 21, norm)
float32_t ratio = (float32_t)(norm) / (dck);
float32_t iratio = 1 - ratio;
// ratio=ratio*ratio;
iratio = 1 - iratio * iratio;
int32_t SAW = param_saw + inlet_saw;
int32_t PLS = (param_pls + inlet_pls) + pitch * param_track >> 1;
PLS = PLS & ((v28)-1);
PLS = PLS > (v27) ? (v28)-PLS : PLS;
int32_t SHARK = param_shark + inlet_shark;
int32_t P2S = param_p2s + inlet_p2s << 3;
int32_t super;
MTOFEXTENDED(param_rate + inlet_rate, super)
super = (super >> param_OS) >> 12;
iwidth = (v29) - (v29)*iratio;
width = (v29) - (v29)*ratio;
SAW = ___SMMUL(SAW << 3, iwidth << 1) << 2;
PLS = ___SMMUL(PLS << 3, PLS << 2);
if (param_track > 0) {
MTOF(PLS, PLS);
}
PLS = ___SMMUL(PLS << 1, width) << 3;
SHARK = ___SMMUL(SHARK << 2, iwidth) << 3;
outlet_duck = width >> 3;
stp[0] = (SAW - pv[0]) >> 4;
stp[1] = (PLS - pv[1]) >> 4;
stp[2] = (SHARK - pv[2]) >> 4;
stp[3] = (P2S - pv[3]) >> 4;
int32_t saw = pv[0];
int32_t pls = pv[1];
int32_t shark = pv[2];
int32_t p2s = pv[3];
pv[0] = SAW;
pv[1] = PLS;
pv[2] = SHARK;
pv[3] = P2S;
if ((inlet_trig > 0) && !trg) {
trg = 1;
Phase = 0;
phs = 0;
} else if (inlet_trig == 0) {
trg = 0;
}
int32_t out;
for (i = 0; i < (1 << param_OS); i++) {
phs += super;
SHAPE(phs, param_wave);
Phase += freq;
int32_t p2 = Phase + (inlet_phase << 4);
uint32_t p3 = p2 + (t1 << 1) + t2 + (t3 << 3);
SINE2TINTERP((p3 * param_div + (t4 << 8) + Phs), r)
int32_t s;
SINE2TINTERP(p3 + (p2s), s)
out = r;
t2 += t1 - t2 >> 1;
t1 += ___SMMUL(r, saw) - t1 >> 2;
r = ___SMMUL(s, r);
t3 += (___SMMUL(shark, r - (v30))) - t3 >> 4;
r = ___SMMUL(s, s);
t4 += (___SMMUL(pls, r - (3 << 29))) - t4 >> 4;
val += ((out >> 4) - val) >> 1 + param_OS;
vil += (val - vil) >> 10 + param_OS;
}
outlet_wave = (val)-vil >> 1;
outlet_phase = Phase * param_div >> 5;
saw += stp[0];
pls += stp[1];
shark += stp[2];
p2s += stp[3];