OpenWareLaboratory
ChirpOscillator.h
Go to the documentation of this file.
1 #ifndef CHIRP_OSCILLATOR_H
2 #define CHIRP_OSCILLATOR_H
3 
4 #include "Oscillator.h"
5 
6 class ChirpOscillator : public Oscillator {
7 private:
8  float sr;
9  float phase;
10  float incr;
11  float basefreq;
12  float rate;
13 public:
14  ChirpOscillator(float sr=48000)
15  : sr(sr), phase(0), incr(0), basefreq(0), rate(0) {}
16  void setFrequency(float freq){
17  incr = freq*2*M_PI/sr;
18  basefreq = freq;
19  }
20  float getFrequency(){
21  return basefreq;
22  }
23  void setSampleRate(float sample_rate){
24  sr = sample_rate;
25  }
26  float getSampleRate(){
27  return sr;
28  }
34  void setRate(float r){
35  rate = 1 + r/sr;
36  }
37  void trigger(){
38  incr = basefreq*2*M_PI/sr;
39  reset();
40  }
41  void reset(){
42  phase = 0.0f;
43  }
44  float getPhase(){
45  return phase;
46  }
47  void setPhase(float phase){
48  this->phase = phase;
49  }
50  float generate(){
51  float sample = sinf(phase);
52  phase += incr;
53  incr *= rate;
54  if(phase >= 2*M_PI)
55  phase -= 2*M_PI;
56  return sample;
57  }
58  float generate(float fm){
59  float sample = sinf(phase);
60  phase += incr + fm;
61  incr *= rate;
62  return sample;
63  }
64  static ChirpOscillator* create(float sr){
65  return new ChirpOscillator(sr);
66  }
67  static void destroy(ChirpOscillator* osc){
68  delete osc;
69  }
70 };
71 
72 #endif /* CHIRP_OSCILLATOR_H */
#define M_PI
Definition: basicmaths.h:52
void setSampleRate(float sample_rate)
Set oscillator sample rate.
static ChirpOscillator * create(float sr)
void setFrequency(float freq)
Set oscillator frequency in Hertz.
float getFrequency()
Get oscillator frequency in Hertz.
float generate()
Produce the next consecutive sample.
float getPhase()
Get current oscillator phase in radians.
float generate(float fm)
Produce a sample with frequency modulation.
static void destroy(ChirpOscillator *osc)
void reset()
Reset oscillator (typically resets phase)
void setPhase(float phase)
Set current oscillator phase in radians.
void setRate(float r)
Set rate of change: positive for ascending chirp, negative for descending.
ChirpOscillator(float sr=48000)
An Oscillator is a SignalGenerator that operates at a given frequency and that can be frequency modul...
Definition: Oscillator.h:12