Zrythm v2.0.0-alpha.1+31.4967fd053471
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
meter_processor.h
1// SPDX-FileCopyrightText: © 2020, 2024-2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <memory>
7
8#include "dsp/port.h"
9#include "dsp/port_observation_manager.h"
10
11#include <QObject>
12#include <QtQmlIntegration/qqmlintegration.h>
13
14namespace zrythm::gui::qquick
15{
16
31class MeterProcessor : public QObject
32{
33 Q_OBJECT
34 QML_ELEMENT
35 Q_PROPERTY (zrythm::dsp::Port * port READ port WRITE setPort REQUIRED)
36 Q_PROPERTY (int channel READ channel WRITE setChannel)
37 Q_PROPERTY (
38 int sampleRate READ sampleRate WRITE setSampleRate NOTIFY sampleRateChanged
39 REQUIRED)
40 Q_PROPERTY (
41 zrythm::dsp::PortObservationManager * portObservationManager READ
42 portObservationManager WRITE setPortObservationManager REQUIRED)
43 Q_PROPERTY (
44 float currentAmplitude READ currentAmplitude NOTIFY currentAmplitudeChanged)
45 Q_PROPERTY (float peakAmplitude READ peakAmplitude NOTIFY peakAmplitudeChanged)
46 Q_PROPERTY (
47 MeterAlgorithm algorithm READ algorithm WRITE setAlgorithm NOTIFY
48 algorithmChanged)
49
50public:
51 enum class MeterAlgorithm
52 {
54 Auto,
55 DigitalPeak,
58 RMS,
59 K,
60 };
61 Q_ENUM (MeterAlgorithm)
62
63 enum class AudioValueFormat : std::uint8_t
64 {
67
68
69 DBFS,
70
72 Fader,
73 };
74
75 MeterProcessor (QObject * parent = nullptr);
76 ~MeterProcessor () override;
77
78 // ================================================================
79 // QML Interface
80 // ================================================================
81
82 dsp::Port * port () const;
83 void setPort (dsp::Port * port);
84
85 int channel () const;
86 void setChannel (int channel);
87
88 int sampleRate () const;
89 void setSampleRate (int rate);
90 Q_SIGNAL void sampleRateChanged ();
91
92 dsp::PortObservationManager * portObservationManager () const;
93 void setPortObservationManager (dsp::PortObservationManager * manager);
94
95 MeterAlgorithm algorithm () const;
96 void setAlgorithm (MeterAlgorithm algo);
97 Q_SIGNAL void algorithmChanged ();
98
99 float currentAmplitude () const;
100 Q_SIGNAL void currentAmplitudeChanged (float value);
101
102 float peakAmplitude () const;
103 Q_SIGNAL void peakAmplitudeChanged (float value);
104
105 Q_INVOKABLE float toDBFS (float amp) const;
106 Q_INVOKABLE float toFader (float amp) const;
107
108private:
109 void get_value (AudioValueFormat format, float &val, float &max);
110 void try_create_token ();
111
112 struct Impl;
113 std::unique_ptr<Impl> impl_;
114};
115}
Manages port observer lifecycle and runs a drain timer.
A base class for ports used for connecting processors in the DSP graph.
Definition port.h:37
A meter processor for a single GUI element.
@ Auto
Use default algorithm for the port.