// Copyright (c) Charles J. Cliffe // SPDX-License-Identifier: GPL-2.0+ #pragma once #include "VisualProcessor.h" #include "AudioThread.h" #include "ScopePanel.h" 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; std::vector fftInData; std::vector fftOutput; fftplan fftPlan; unsigned int fftSize; int desiredInputSize; unsigned int maxScopeSamples; double fft_ceil_ma, fft_ceil_maa; double fft_floor_ma, fft_floor_maa; double fft_average_rate; std::vector fft_result; std::vector fft_result_ma; std::vector fft_result_maa; };