Mercurial > hg > beaglert
diff projects/d-box/FeedbackOscillator.h @ 0:8a575ba3ab52
Initial commit.
author | andrewm |
---|---|
date | Fri, 31 Oct 2014 19:10:17 +0100 |
parents | |
children | be427da6fb9c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/projects/d-box/FeedbackOscillator.h Fri Oct 31 19:10:17 2014 +0100 @@ -0,0 +1,43 @@ +/* + * FeedbackOscillator.h + * + * Created on: June 8, 2014 + * Author: Andrew McPherson + */ + +#ifndef FEEDBACKOSCILLATOR_H +#define FEEDBACKOSCILLATOR_H + +#include <stdint.h> + +class FeedbackOscillator +{ +public: + FeedbackOscillator(); + ~FeedbackOscillator(); + + // Initialise the settings for the feedback oscillator + void initialise(int maxTableSize, float hpfCutoffFrequency, float matrixSampleRate); + + // Process one sample and store the output value + // Returns the length of table to interpolate; or 0 if nothing to process further + int process(uint16_t input, uint16_t *output); + + float *wavetable() { return wavetableRead; } + +private: + float coeffs[3]; // Coefficients of first-order high-pass filter + float lastInput; // last input sample for HPF + float lastOutput; // last output sample of HPF + bool triggered; // whether we are currently saving samples + bool canTrigger; // whether we are able to begin saving samples + int wavetableMaxLength; // how long the stored wavetable can be + int sampleCount; // how many samples have elapsed + int lastTriggerCount; // sample count when we last triggered + + float *wavetable1, *wavetable2; // Two wavetables where we record samples + float *wavetableRead, *wavetableWrite; // Pointers to the above wavetables + int wavetableWritePointer; // Where we are currently writing +}; + +#endif