sinesynth/include/SineSynth.h

49 lines
933 B
C
Raw Normal View History

2020-01-06 14:04:34 -08:00
#pragma once
#include <cstdint>
#include <vector>
#include <iterator>
#include <cmath>
using std::vector;
using std::iterator_traits;
using std::sin;
using std::cos;
class Generator
{
public:
virtual void getSamples(const uint16_t nSamples, float *buf) = 0;
virtual ~Generator();
// disallow copy of virtual interface
Generator(Generator const &) = delete;
Generator &operator=(Generator const &) = delete;
protected:
Generator(uint32_t _sampleRate, float _frequency, float _amplitude);
uint32_t sampleRate;
float frequency;
float amplitude;
private:
};
class SineGenerator : public Generator
{
public:
SineGenerator(uint32_t _sampleRate, float _frequency, float _amplitude);
void getSamples(uint16_t nSamples, float *buf) final;
virtual ~SineGenerator();
private:
uint32_t tick;
float phaseIncr;
};
class SineSynth
{
private:
vector<SineGenerator> generators;
};