Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
midi_device_buffer.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 "utils/units.h"
9
10#include <juce_audio_basics/juce_audio_basics.h>
11
12namespace zrythm::dsp
13{
14
25class MidiDeviceBuffer
26{
27public:
28 static constexpr size_t kCapacity = 4096;
29
30 MidiDeviceBuffer ();
31 ~MidiDeviceBuffer ();
32
33 MidiDeviceBuffer (const MidiDeviceBuffer &) = delete;
34 MidiDeviceBuffer &operator= (const MidiDeviceBuffer &) = delete;
35 MidiDeviceBuffer (MidiDeviceBuffer &&) = delete;
36 MidiDeviceBuffer &operator= (MidiDeviceBuffer &&) = delete;
37
46 bool push (juce::MidiMessage &&message);
47
48 bool push (const juce::MidiMessage &message)
49 {
50 return push (juce::MidiMessage (message));
51 }
52
69 void drain (
70 juce::MidiBuffer &output,
71 units::sample_rate_t sample_rate,
72 units::sample_u32_t nframes,
73 std::optional<units::precise_second_t> block_start_time =
74 std::nullopt) noexcept [[clang::nonblocking]];
75
81 void clear () noexcept [[clang::nonblocking]];
82
83private:
84 struct Impl;
85 std::unique_ptr<Impl> impl_;
86};
87
88}
void drain(juce::MidiBuffer &output, units::sample_rate_t sample_rate, units::sample_u32_t nframes, std::optional< units::precise_second_t > block_start_time=std::nullopt) noexcept
Drain all queued events into output, converting timestamps to sample offsets within the current audio...
void clear() noexcept
Discard all pending events without processing.
bool push(juce::MidiMessage &&message)
Push a MIDI message onto the queue.