26class SpectrumAnalyzerProcessor :
public QObject
34 NOTIFY stereoPortChanged REQUIRED)
36 QVector<float> spectrumData READ spectrumData NOTIFY spectrumDataChanged)
37 Q_PROPERTY (
int fftSize READ fftSize WRITE setFftSize NOTIFY fftSizeChanged)
39 float sampleRate READ sampleRate WRITE setSampleRate NOTIFY sampleRateChanged)
43 explicit SpectrumAnalyzerProcessor (QObject * parent =
nullptr);
44 ~SpectrumAnalyzerProcessor ()
override;
49 KissFftConfig (
int fft_size)
51 cfg_ = kiss_fft_alloc (fft_size, 0,
nullptr,
nullptr);
60 kiss_fft_cfg get_config ()
const {
return cfg_; }
70 dsp::AudioEngine * audioEngine ()
const {
return audio_engine_; }
71 void setAudioEngine (dsp::AudioEngine * engine) { audio_engine_ = engine; }
73 dsp::AudioPort * stereoPort ()
const {
return port_obj_; }
74 void setStereoPort (dsp::AudioPort * port_var);
76 QVector<float> spectrumData ()
const {
return spectrum_data_; }
77 int fftSize ()
const {
return static_cast<int> (fft_size_); }
78 float sampleRate ()
const {
return sample_rate_; }
80 void setFftSize (
int size);
81 void setSampleRate (
float rate);
84 Q_INVOKABLE
float getScaledFrequency (
88 float max_frequency)
const;
89 Q_INVOKABLE
float getFrequencyForBin (
int bin,
int num_bins)
const;
92 void spectrumDataChanged ();
93 void fftSizeChanged ();
94 void sampleRateChanged ();
95 void stereoPortChanged ();
100 void process_audio ();
103 QPointer<dsp::AudioPort> port_obj_;
104 std::optional<dsp::RingBufferOwningPortMixin::RingBufferReader> ring_reader_;
107 QVector<float> spectrum_data_;
108 std::vector<float> left_buffer_;
109 std::vector<float> right_buffer_;
110 std::vector<float> mono_buffer_;
111 std::vector<float> new_spectrum_;
113 std::unique_ptr<KissFftConfig> fft_config_;
114 std::vector<kiss_fft_cpx> fft_in_;
115 std::vector<kiss_fft_cpx> fft_out_;
117 std::size_t fft_size_{};
118 float sample_rate_ = 44100.0f;
119 QTimer * update_timer_ =
nullptr;
121 std::unique_ptr<juce::dsp::WindowingFunction<float>> windowing_func_;
124 juce::AudioSampleBuffer buffer_;
126 QPointer<dsp::AudioEngine> audio_engine_;