OpenWareLaboratory
SineOscillator.h
Go to the documentation of this file.
1 #ifndef SINE_OSCILLATOR_H
2 #define SINE_OSCILLATOR_H
3 
4 #include "Oscillator.h"
5 
6 class SineOscillator : public OscillatorTemplate<SineOscillator> {
7 public:
8  static constexpr float begin_phase = 0;
9  static constexpr float end_phase = 2*M_PI;
11  SineOscillator(float sr){
12  setSampleRate(sr);
13  }
14  float getSample(){
15  return sinf(phase);
16  }
17  void generate(FloatArray output){
18  size_t len = output.getSize();
19  for(size_t i=0; i<len; ++i){
20  output[i] = sinf(phase);
21  phase += incr; // allow phase to overrun
22  }
23  phase = fmodf(phase, end_phase);
24  }
25  void generate(FloatArray output, FloatArray fm){
26  size_t len = output.getSize();
27  for(size_t i=0; i<len; ++i){
28  output[i] = sinf(phase);
29  phase += incr * (1 + fm[i]);
30  // allow phase to overrun
31  }
32  phase = fmodf(phase, end_phase);
33  }
35 };
36 
37 #endif /* SINE_OSCILLATOR_H */
#define M_PI
Definition: basicmaths.h:52
This class contains useful methods for manipulating arrays of floats.
Definition: FloatArray.h:12
size_t getSize() const
Definition: SimpleArray.h:31
void generate(FloatArray output, FloatArray fm)
Produce a block of samples with frequency modulation.
static constexpr float end_phase
Definition: SineOscillator.h:9
SineOscillator(float sr)
void generate(FloatArray output)
Produce a block of samples.
static constexpr float begin_phase
Definition: SineOscillator.h:8