Skip to content

Commit 79eed70

Browse files
author
Martin Klang
committed
updated AntialiasedRampOscillator
1 parent d811ea4 commit 79eed70

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

LibSource/RampOscillator.h

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,31 @@ class InvertedRampOscillator : public OscillatorTemplate<InvertedRampOscillator>
3636
};
3737

3838
class AntialiasedRampOscillator : public OscillatorTemplate<AntialiasedRampOscillator> {
39+
protected:
40+
float lastblep;
3941
public:
4042
static constexpr float begin_phase = 0;
4143
static constexpr float end_phase = 1;
44+
AntialiasedRampOscillator(){}
45+
AntialiasedRampOscillator(float sr){
46+
setSampleRate(sr);
47+
}
48+
void setPhase(float ph){
49+
lastblep = 0;
50+
OscillatorTemplate<AntialiasedRampOscillator>::setPhase(ph);
51+
}
52+
void reset(){
53+
lastblep = 0;
54+
OscillatorTemplate<AntialiasedRampOscillator>::reset();
55+
}
4256
float getSample(){
4357
float sample = 2*phase-1; // naive ramp
4458
sample -= polyblep(phase, incr);
4559
return sample;
4660
}
4761
void generate(FloatArray output){
4862
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-
}
63+
float blep = lastblep;
5664
for(size_t i=0; i<len; ++i){
5765
float sample = 2*phase-1;
5866
sample -= blep;
@@ -71,6 +79,7 @@ class AntialiasedRampOscillator : public OscillatorTemplate<AntialiasedRampOscil
7179
}
7280
output[i] = sample;
7381
}
82+
lastblep = blep; // carry over polyblep correction
7483
}
7584
using OscillatorTemplate<AntialiasedRampOscillator>::generate;
7685
};

0 commit comments

Comments
 (0)