2015-07-31 21:44:25 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "VisualProcessor.h"
|
|
|
|
#include "AudioThread.h"
|
2015-11-29 13:35:12 -05:00
|
|
|
#include "ScopePanel.h"
|
2015-07-31 21:44:25 -04:00
|
|
|
|
2016-03-20 18:56:13 -04:00
|
|
|
#if USE_FFTW3
|
|
|
|
#include "fftw3.h"
|
|
|
|
#endif
|
|
|
|
|
2015-07-31 21:44:25 -04:00
|
|
|
class ScopeRenderData: public ReferenceCounter {
|
|
|
|
public:
|
|
|
|
std::vector<float> waveform_points;
|
2015-11-29 13:35:12 -05:00
|
|
|
ScopePanel::ScopeMode mode;
|
2015-08-24 01:31:37 -04:00
|
|
|
int inputRate;
|
|
|
|
int sampleRate;
|
2015-07-31 21:44:25 -04:00
|
|
|
int channels;
|
2015-08-24 01:31:37 -04:00
|
|
|
bool spectrum;
|
|
|
|
int fft_size;
|
|
|
|
double fft_floor, fft_ceil;
|
2015-07-31 21:44:25 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef ThreadQueue<ScopeRenderData *> ScopeRenderDataQueue;
|
|
|
|
|
|
|
|
class ScopeVisualProcessor : public VisualProcessor<AudioThreadInput, ScopeRenderData> {
|
2015-08-24 01:31:37 -04:00
|
|
|
public:
|
|
|
|
ScopeVisualProcessor();
|
|
|
|
~ScopeVisualProcessor();
|
|
|
|
void setup(int fftSize_in);
|
|
|
|
void setScopeEnabled(bool scopeEnable);
|
|
|
|
void setSpectrumEnabled(bool spectrumEnable);
|
2015-07-31 21:44:25 -04:00
|
|
|
protected:
|
|
|
|
void process();
|
|
|
|
ReBuffer<ScopeRenderData> outputBuffers;
|
2015-08-24 01:31:37 -04:00
|
|
|
|
|
|
|
std::atomic_bool scopeEnabled;
|
|
|
|
std::atomic_bool spectrumEnabled;
|
|
|
|
|
2016-03-20 18:56:13 -04:00
|
|
|
#if USE_FFTW3
|
2015-08-24 01:31:37 -04:00
|
|
|
float *fftInData;
|
|
|
|
fftwf_complex *fftwOutput;
|
|
|
|
fftwf_plan fftw_plan;
|
2016-03-20 18:56:13 -04:00
|
|
|
#else
|
|
|
|
liquid_float_complex *fftInData;
|
|
|
|
liquid_float_complex *fftOutput;
|
|
|
|
fftplan fftPlan;
|
|
|
|
#endif
|
|
|
|
|
2016-01-28 15:49:31 -05:00
|
|
|
unsigned int fftSize;
|
2015-08-24 01:31:37 -04:00
|
|
|
int desiredInputSize;
|
2016-01-28 15:49:31 -05:00
|
|
|
unsigned int maxScopeSamples;
|
2015-08-24 01:31:37 -04:00
|
|
|
|
|
|
|
double fft_ceil_ma, fft_ceil_maa;
|
|
|
|
double fft_floor_ma, fft_floor_maa;
|
|
|
|
float fft_average_rate;
|
|
|
|
|
|
|
|
std::vector<double> fft_result;
|
|
|
|
std::vector<double> fft_result_ma;
|
|
|
|
std::vector<double> fft_result_maa;
|
2015-07-31 21:44:25 -04:00
|
|
|
};
|