frac32.bipolar pitch
frac32buffer.bipolar waveform
frac32buffer.bipolar out
frac32.s.map.pitch pitch
int32_t y[8], seq[12], v, integ;
float p, dp, _64dp;
uint8_t cpt;
uint8_t i;
cpt = 0;
p = 0;
y[0] = y[1] = y[2] = y[3] = y[4] = y[5] = y[6] = y[7] = v = integ = 0;
i = 0;
int32_t idp;
MTOFEXTENDED(param_pitch + inlet_pitch, idp);
dp = 12.0f * (idp * (0.25f / (1 << 30)));
if (dp > 1)
dp = 1;
_64dp = 64.0f / dp;
seq[0] = (float)(inlet_waveform[0] >> 9);
seq[1] = (float)(inlet_waveform[1] >> 9);
seq[2] = (float)(inlet_waveform[2] >> 9);
seq[3] = (float)(inlet_waveform[3] >> 9);
seq[4] = (float)(inlet_waveform[4] >> 9);
seq[5] = (float)(inlet_waveform[5] >> 9);
seq[6] = (float)(inlet_waveform[6] >> 9);
seq[7] = (float)(inlet_waveform[7] >> 9);
seq[8] = (float)(inlet_waveform[8] >> 9);
seq[9] = (float)(inlet_waveform[9] >> 9);
seq[10] = (float)(inlet_waveform[10] >> 9);
seq[11] = (float)(inlet_waveform[11] >> 9);
// phase increment
p += 0.5f * dp;
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
// transition ?
if (p >= 1.0f) { // phase above 1
cpt++; // next step in sequence
if (cpt >= 12) // above 12 => wrap to 0
cpt = 0;
p -= 1.0f; // reset phase
// select the band limited pulse according to subsample time since the
// transition
const int16_t *t = tiar_bli_8_64 + (((uint32_t)(p * _64dp + 32)) << 3);
int32_t g =
seq[cpt] - v; // gain= the diff between the new step and the current value
// add the selected band limited pulse to the output 8 taps
for (int j = 0; j <= 7; j++) {
y[(i + j) & 7] += g * t[j];
}
v += g; // now we can say that the value corresponds to the current step
}
// phase increment
p += 0.5f * dp;
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
// transition ?
if (p >= 1.0f) { // phase above 1
cpt++; // next step in sequence
if (cpt >= 12) // above 12 => wrap to 0
cpt = 0;
p -= 1.0f; // reset phase
// select the band limited pulse according to subsample time since the
// transition
const int16_t *t = tiar_bli_8_64 + (((uint32_t)(p * _64dp)) << 3);
int32_t g =
seq[cpt] - v; // gain= the diff between the new step and the current value
// add the selected band limited pulse to the output 8 taps
for (int j = 0; j <= 7; j++) {
y[(i + j) & 7] += g * t[j];
}
v += g; // now we can say that the value corresponds to the current step
}
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
outlet_out = integ += y[i]; // output integrator
y[i] = 0;
i = (i + 1) & 7;