29 bool auto_open_inputs {
true };
30 bool auto_open_outputs {
false };
31 bool enable_virtual_port {
false };
32 std::string virtual_port_name {
"MayaFlux" };
49 void start()
override;
51 void shutdown()
override;
53 [[nodiscard]]
bool is_initialized()
const override {
return m_initialized.load(); }
54 [[nodiscard]]
bool is_running()
const override {
return m_running.load(); }
56 [[nodiscard]] std::vector<InputDeviceInfo> get_devices()
const override;
57 size_t refresh_devices()
override;
59 bool open_device(uint32_t device_id)
override;
60 void close_device(uint32_t device_id)
override;
61 [[nodiscard]]
bool is_device_open(uint32_t device_id)
const override;
62 [[nodiscard]] std::vector<uint32_t> get_open_devices()
const override;
68 [[nodiscard]] std::string
get_name()
const override {
return "MIDI (RtMidi)"; }
69 [[nodiscard]] std::string get_version()
const override;
80 std::atomic<bool> active {
false };
86 std::atomic<bool> m_initialized {
false };
87 std::atomic<bool> m_running {
false };
92 uint32_t m_next_device_id { 1 };
98 bool port_matches_filter(
const std::string& port_name)
const;
99 uint32_t find_or_assign_device_id(
unsigned int rtmidi_port);
100 void create_virtual_port_if_enabled();
102 static void rtmidi_callback(
double timestamp, std::vector<unsigned char>* message,
void* user_data);
104 void notify_device_change(
const InputDeviceInfo& info,
bool connected);
106 InputValue parse_midi_message(uint32_t device_id,
const std::vector<unsigned char>& message)
const;
bool is_initialized() const override
Check if backend is initialized.
MIDIBackend & operator=(const MIDIBackend &)=delete
bool is_running() const override
Check if backend is actively listening.
std::string get_name() const override
Get backend name/identifier string.
std::unordered_map< uint32_t, MIDIPortInfo > m_enumerated_devices
MIDIBackend(const MIDIBackend &)=delete
MIDIBackend & operator=(MIDIBackend &&)=delete
InputCallback m_input_callback
std::unordered_map< uint32_t, std::shared_ptr< MIDIPortState > > m_open_devices
DeviceCallback m_device_callback
std::mutex m_devices_mutex
MIDIBackend(MIDIBackend &&)=delete
InputType get_type() const override
Get backend type.
std::mutex m_callback_mutex
RtMidi-based MIDI input backend.
InputType
Input backend type enumeration.
std::function< void(const InputValue &)> InputCallback
Callback signature for input events.
std::function< void(const InputDeviceInfo &, bool connected)> DeviceCallback
Callback signature for device connection/disconnection events.
std::vector< std::string > input_port_filters
std::vector< std::string > output_port_filters
unsigned int rtmidi_port_number
std::function< void(const InputValue &)> input_callback
std::unique_ptr< RtMidiIn > midi_in