Skip to content

Commit 3e5d280

Browse files
author
Martin Klang
committed
added block based AntialiasedRampOscillator::generate()
1 parent f3fa1f3 commit 3e5d280

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

LibSource/RampOscillator.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,35 @@ class AntialiasedRampOscillator : public OscillatorTemplate<AntialiasedRampOscil
4444
sample -= polyblep(phase, incr);
4545
return sample;
4646
}
47+
void generate(FloatArray output){
48+
size_t len = output.getSize();
49+
float blep;
50+
if(phase < incr){ // discontinuity at previous sample
51+
float t = phase / incr;
52+
blep = t+t - t*t - 1;
53+
}else{
54+
blep = 0;
55+
}
56+
for(size_t i=0; i<len; ++i){
57+
float sample = 2*phase-1;
58+
sample -= blep;
59+
phase += incr;
60+
if(phase >= 1){
61+
// wrap phase
62+
phase -= 1;
63+
// correct current sample
64+
float t = (phase - incr) / incr;
65+
sample -= t*t + t+t + 1;
66+
// correct next sample
67+
t = phase / incr;
68+
blep = t+t - t*t - 1;
69+
}else{
70+
blep = 0;
71+
}
72+
output[i] = sample;
73+
}
74+
}
75+
using OscillatorTemplate<AntialiasedRampOscillator>::generate;
4776
};
4877

4978
#endif /* __RampOscillator_h */

0 commit comments

Comments
 (0)