File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -36,23 +36,31 @@ class InvertedRampOscillator : public OscillatorTemplate<InvertedRampOscillator>
3636};
3737
3838class AntialiasedRampOscillator : public OscillatorTemplate <AntialiasedRampOscillator> {
39+ protected:
40+ float lastblep;
3941public:
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};
You can’t perform that action at this time.
0 commit comments