approximately a filter
This commit is contained in:
parent
88230d862d
commit
ca0afc5d3d
|
|
@ -75,6 +75,10 @@ class Voice {
|
||||||
float delay = 0, lastpw = 0; // delay slots for antialiasing
|
float delay = 0, lastpw = 0; // delay slots for antialiasing
|
||||||
uint8_t pulseStage = 1; // pulse wave phase
|
uint8_t pulseStage = 1; // pulse wave phase
|
||||||
float subosc = 1; // sub oscillator flipflop output
|
float subosc = 1; // sub oscillator flipflop output
|
||||||
|
|
||||||
|
// filter
|
||||||
|
float b1=0, b2=0, b3=0, b4=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -49,8 +49,9 @@ void Voice::off() {
|
||||||
|
|
||||||
void Voice::run(Module* m, float* buffer, uint32_t samples) {
|
void Voice::run(Module* m, float* buffer, uint32_t samples) {
|
||||||
// carry out per-voice calculations for each block of samples
|
// carry out per-voice calculations for each block of samples
|
||||||
float out, t;
|
float out, t, fb, res;
|
||||||
|
|
||||||
|
float cut = 0.00513 + 0.075*env;
|
||||||
// printf("%f ", delay);
|
// printf("%f ", delay);
|
||||||
m->saw = 1;
|
m->saw = 1;
|
||||||
m->square = 1;
|
m->square = 1;
|
||||||
|
|
@ -92,7 +93,20 @@ void Voice::run(Module* m, float* buffer, uint32_t samples) {
|
||||||
delay += m->sub * subosc;
|
delay += m->sub * subosc;
|
||||||
// delay += (1-(m->noisegen/(float)(1<<30))) * m->noise; FIXME figure out what to do about noise
|
// delay += (1-(m->noisegen/(float)(1<<30))) * m->noise; FIXME figure out what to do about noise
|
||||||
|
|
||||||
buffer[i] += 0.125 * env * out;
|
for (uint8_t ovs = 0; ovs < 4; ovs++) {
|
||||||
|
fb = b4;
|
||||||
|
// hard clip
|
||||||
|
if (fb > 1) fb = 1;
|
||||||
|
if (fb < -1) fb = -1;
|
||||||
|
|
||||||
|
fb = out - (fb * 2);
|
||||||
|
b1 = ((fb - b1) * cut) + b1;
|
||||||
|
b2 = ((b1 - b2) * cut) + b2;
|
||||||
|
b3 = ((b2 - b3) * cut) + b3;
|
||||||
|
b4 = ((b3 - b4) * cut) + b4;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[i] += 0.125 * env * b4;
|
||||||
lastpw = m->pw;
|
lastpw = m->pw;
|
||||||
}
|
}
|
||||||
// buffer[0] += 1;
|
// buffer[0] += 1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue