Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
waveform_viewer_processor.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "dsp/audio_port.h"
7#include "dsp/engine.h"
8
9#include <QObject>
10#include <QTimer>
11#include <QVector>
12
13namespace zrythm::gui::qquick
14{
15
16class WaveformViewerProcessor : public QObject
17{
18 Q_OBJECT
19 Q_PROPERTY (
20 zrythm::dsp::AudioEngine * audioEngine READ audioEngine WRITE setAudioEngine
21 REQUIRED)
22 Q_PROPERTY (
23 zrythm::dsp::AudioPort * stereoPort READ stereoPort WRITE setStereoPort
24 NOTIFY stereoPortChanged REQUIRED)
25 Q_PROPERTY (
26 QVector<float> waveformData READ waveformData NOTIFY waveformDataChanged)
27 Q_PROPERTY (
28 int bufferSize READ bufferSize WRITE setBufferSize NOTIFY bufferSizeChanged)
29 Q_PROPERTY (
30 int displayPoints READ displayPoints WRITE setDisplayPoints NOTIFY
31 displayPointsChanged)
32 QML_ELEMENT
33
34public:
35 explicit WaveformViewerProcessor (QObject * parent = nullptr);
36 ~WaveformViewerProcessor () override;
37
38 // ================================================================
39 // QML Interface
40 // ================================================================
41
42 dsp::AudioPort * stereoPort () const { return port_obj_; }
43 void setStereoPort (dsp::AudioPort * port_var);
44
45 QVector<float> waveformData () const { return waveform_data_; }
46
47 int bufferSize () const { return static_cast<int> (buffer_size_); }
48 void setBufferSize (int size);
49
50 int displayPoints () const { return static_cast<int> (display_points_); }
51 void setDisplayPoints (int points);
52
53 dsp::AudioEngine * audioEngine () const { return audio_engine_; }
54 void setAudioEngine (dsp::AudioEngine * engine) { audio_engine_ = engine; }
55
56Q_SIGNALS:
57 void waveformDataChanged ();
58 void bufferSizeChanged ();
59 void displayPointsChanged ();
60 void stereoPortChanged ();
61
62 // ================================================================
63
64private:
65 void process_audio ();
66
67 static constexpr size_t DEFAULT_BUFFER_SIZE = 2048;
68 static constexpr size_t DEFAULT_DISPLAY_POINTS = 256;
69
70 size_t buffer_size_{};
71 size_t display_points_{};
72
73 QPointer<dsp::AudioPort> port_obj_;
74 std::optional<dsp::RingBufferOwningPortMixin::RingBufferReader> ring_reader_;
75
76 QVector<float> waveform_data_;
77 std::vector<float> mono_buffer_;
78 std::vector<float> left_buffer_;
79 std::vector<float> right_buffer_;
80
81 QTimer * update_timer_ = nullptr;
82
83 QPointer<dsp::AudioEngine> audio_engine_;
84};
85}
The audio engine.
Definition engine.h:22
Audio port specifics.
Definition audio_port.h:25