Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
device.hpp
Go to the documentation of this file.
1#pragma once
2
4#include <string>
5#include <vector>
6#include <functional>
7#include <memory>
8
9namespace pulp::midi {
10
12 std::string id;
13 std::string name;
14 bool is_input = false;
15 bool is_output = false;
16};
17
18// Callback for received MIDI short (channel-voice / system-realtime)
19// messages. SysEx is delivered via MidiSysexCallback registered
20// separately so the open() signature stays bit-compat.
21using MidiInputCallback = std::function<void(const MidiEvent& event)>;
22using MidiSysexCallback = std::function<void(const std::vector<uint8_t>& bytes,
23 double timestamp_sec)>;
24
25// MIDI input port
26class MidiInput {
27public:
28 virtual ~MidiInput() = default;
29 virtual bool open(const std::string& port_id, MidiInputCallback callback) = 0;
30 virtual void close() = 0;
31 virtual bool is_open() const = 0;
32
38 virtual void set_sysex_callback(MidiSysexCallback /*cb*/) {}
39};
40
41// MIDI output port
43public:
44 virtual ~MidiOutput() = default;
45 virtual bool open(const std::string& port_id) = 0;
46 virtual void close() = 0;
47 virtual bool is_open() const = 0;
48 virtual void send(const MidiEvent& event) = 0;
49};
50
51// MIDI system — enumerates ports and creates I/O instances
53public:
54 virtual ~MidiSystem() = default;
55 virtual std::vector<MidiPortInfo> enumerate_inputs() = 0;
56 virtual std::vector<MidiPortInfo> enumerate_outputs() = 0;
57 virtual std::unique_ptr<MidiInput> create_input() = 0;
58 virtual std::unique_ptr<MidiOutput> create_output() = 0;
59
62 using PortChangeCallback = std::function<void()>;
64};
65
66std::unique_ptr<MidiSystem> create_midi_system();
67
68} // namespace pulp::midi
Definition device.hpp:26
virtual void close()=0
virtual bool is_open() const =0
virtual void set_sysex_callback(MidiSysexCallback)
Optional SysEx delivery.
Definition device.hpp:38
virtual bool open(const std::string &port_id, MidiInputCallback callback)=0
virtual ~MidiInput()=default
Definition device.hpp:42
virtual void close()=0
virtual bool is_open() const =0
virtual bool open(const std::string &port_id)=0
virtual void send(const MidiEvent &event)=0
virtual ~MidiOutput()=default
Definition device.hpp:52
virtual std::vector< MidiPortInfo > enumerate_inputs()=0
virtual void set_port_change_callback(PortChangeCallback)
Definition device.hpp:63
virtual std::vector< MidiPortInfo > enumerate_outputs()=0
virtual std::unique_ptr< MidiOutput > create_output()=0
std::function< void()> PortChangeCallback
Register a callback for MIDI port changes (device plug/unplug).
Definition device.hpp:62
virtual std::unique_ptr< MidiInput > create_input()=0
virtual ~MidiSystem()=default
Definition custom_node_events.hpp:26
std::function< void(const std::vector< uint8_t > &bytes, double timestamp_sec)> MidiSysexCallback
Definition device.hpp:22
std::function< void(const MidiEvent &event)> MidiInputCallback
Definition device.hpp:21
std::unique_ptr< MidiSystem > create_midi_system()
Timestamped MIDI event combining a choc::midi::ShortMessage with timing info.
Definition message.hpp:32
Definition device.hpp:11
std::string name
Definition device.hpp:13
bool is_output
Definition device.hpp:15
std::string id
Definition device.hpp:12
bool is_input
Definition device.hpp:14