#pragma once #include "VisualProcessor.h" #include "AudioThread.h" #include "ScopePanel.h" #if USE_FFTW3 #include "fftw3.h" #endif class ScopeRenderData: public ReferenceCounter { public: std::vector waveform_points; ScopePanel::ScopeMode mode; int inputRate; int sampleRate; int channels; bool spectrum; int fft_size; double fft_floor, fft_ceil; }; typedef ThreadQueue ScopeRenderDataQueue; class ScopeVisualProcessor : public VisualProcessor { public: ScopeVisualProcessor(); ~ScopeVisualProcessor(); void setup(int fftSize_in); void setScopeEnabled(bool scopeEnable); void setSpectrumEnabled(bool spectrumEnable); protected: void process(); ReBuffer outputBuffers; std::atomic_bool scopeEnabled; std::atomic_bool spectrumEnabled; #if USE_FFTW3 float *fftInData; fftwf_complex *fftwOutput; fftwf_plan fftw_plan; #else liquid_float_complex *fftInData; liquid_float_complex *fftOutput; fftplan fftPlan; #endif unsigned int fftSize; int desiredInputSize; unsigned int maxScopeSamples; double fft_ceil_ma, fft_ceil_maa; double fft_floor_ma, fft_floor_maa; float fft_average_rate; std::vector fft_result; std::vector fft_result_ma; std::vector fft_result_maa; };