Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
midi_control_bus.hpp
Go to the documentation of this file.
1#pragma once
2
18
19#include <pulp/midi/buffer.hpp>
20#include <pulp/midi/message.hpp>
22#include <cstddef>
23#include <cstdint>
24
25namespace pulp::midi {
26
28public:
31 bool send(const MidiEvent& event) { return queue_.try_push(event); }
32
34 bool send_cc(uint8_t channel, uint8_t cc, uint8_t value) {
35 return send(MidiEvent::cc(channel, cc, value));
36 }
37 bool send_note_on(uint8_t channel, uint8_t note, uint8_t velocity) {
38 return send(MidiEvent::note_on(channel, note, velocity));
39 }
40 bool send_note_off(uint8_t channel, uint8_t note) {
41 return send(MidiEvent::note_off(channel, note));
42 }
43
47 while (auto event = queue_.try_pop()) {
48 event->sample_offset = 0;
49 out.add(*event);
50 }
51 }
52
54 template <typename Fn>
55 void drain(Fn&& sink) {
56 while (auto event = queue_.try_pop())
57 sink(*event);
58 }
59
60private:
61 static constexpr std::size_t kCapacity = 256;
63};
64
65} // namespace pulp::midi
Collection of timestamped MIDI events within a single audio buffer period.
Definition buffer.hpp:31
bool add(const MidiEvent &event)
Append a MIDI event to the buffer.
Definition buffer.hpp:98
Definition midi_control_bus.hpp:27
void drain(Fn &&sink)
Audio thread: drain into an arbitrary sink void(const MidiEvent&).
Definition midi_control_bus.hpp:55
bool send_cc(uint8_t channel, uint8_t cc, uint8_t value)
Convenience senders (UI thread).
Definition midi_control_bus.hpp:34
bool send(const MidiEvent &event)
UI thread: queue a MIDI event for the audio thread to emit.
Definition midi_control_bus.hpp:31
bool send_note_on(uint8_t channel, uint8_t note, uint8_t velocity)
Definition midi_control_bus.hpp:37
bool send_note_off(uint8_t channel, uint8_t note)
Definition midi_control_bus.hpp:40
void drain_into(MidiBuffer &out)
Audio thread: drain every queued event into out (sample offset 0).
Definition midi_control_bus.hpp:46
Definition spsc_queue.hpp:23
Definition custom_node_events.hpp:26
Timestamped MIDI event combining a choc::midi::ShortMessage with timing info.
Definition message.hpp:32
static MidiEvent cc(uint8_t channel, uint8_t controller, uint8_t value)
Create a Control Change event.
Definition message.hpp:64
static MidiEvent note_on(uint8_t channel, uint8_t note, uint8_t velocity)
Create a Note On event.
Definition message.hpp:46
static MidiEvent note_off(uint8_t channel, uint8_t note, uint8_t velocity=0)
Create a Note Off event.
Definition message.hpp:54