Zrythm v2.0.0-alpha.1+31.4967fd053471
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
midi_activity_provider.h
1// SPDX-FileCopyrightText: © 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_observation_manager.h"
9
10#include <QObject>
11#include <QtQmlIntegration/qqmlintegration.h>
12
13namespace zrythm::dsp
14{
15
46class MidiActivityProvider : public QObject
47{
48 Q_OBJECT
49 QML_ELEMENT
50 Q_PROPERTY (
51 zrythm::dsp::Port * port READ port WRITE setPort NOTIFY portChanged)
52 Q_PROPERTY (
53 zrythm::dsp::PortObservationManager * portObservationManager READ
54 portObservationManager WRITE setPortObservationManager NOTIFY
55 portObservationManagerChanged)
56 Q_PROPERTY (bool hasActivity READ hasActivity NOTIFY activityChanged)
57
58public:
59 explicit MidiActivityProvider (QObject * parent = nullptr);
60 ~MidiActivityProvider () override;
61
62 dsp::Port * port () const;
63 void setPort (dsp::Port * port);
64 Q_SIGNAL void portChanged ();
65
66 dsp::PortObservationManager * portObservationManager () const;
67 void setPortObservationManager (dsp::PortObservationManager * manager);
68 Q_SIGNAL void portObservationManagerChanged ();
73 bool hasActivity () const;
74 Q_SIGNAL void activityChanged ();
75
83 Q_INVOKABLE bool isNoteActive (int note) const;
88 Q_SIGNAL void activeNotesChanged ();
89
96 void update ();
97
98private:
99 void reset_state ();
100 void try_create_token ();
101 void process_midi_events ();
102
103 struct Impl;
104 std::unique_ptr<Impl> impl_;
105};
106}
Q_SIGNAL void activeNotesChanged()
Emitted when the set of active notes changes.
bool hasActivity() const
True when any MIDI events were received in the last update cycle.
void update()
Drains pending events from the observation cache and updates state.
Q_INVOKABLE bool isNoteActive(int note) const
Returns true if note (0-127) is currently held.
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