OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
midi_stream.hpp
1#pragma once
2#include <ossia/detail/config.hpp>
3
4#include <ossia/detail/lockfree_queue.hpp>
5
6#include <libremidi/message.hpp>
7#include <libremidi/ump.hpp>
8
9#include <optional>
10
11namespace libremidi
12{
13class midi_in;
14}
15
16namespace ossia::net
17{
18class node_base;
19}
20
21namespace ossia::net::midi
22{
32class OSSIA_EXPORT midi_stream
33{
34public:
36 static constexpr std::size_t queue_capacity = 2048;
37
38 virtual ~midi_stream();
39
50 ossia::spsc_queue<libremidi::ump> messages{queue_capacity};
51
60 bool receive_ump(const libremidi::ump& m) noexcept { return messages.try_enqueue(m); }
61
66 virtual libremidi::midi_in* midi_in() const noexcept = 0;
67
70 virtual void enable_registration() = 0;
71
73 virtual void push_value(const libremidi::ump&) = 0;
74
76 virtual void push_value(const libremidi::message&) = 0;
77
83 virtual std::optional<int> stream_channel(const node_base& n) const noexcept;
84};
85}
Definition midi_stream.hpp:33
virtual libremidi::midi_in * midi_in() const noexcept=0
bool receive_ump(const libremidi::ump &m) noexcept
Definition midi_stream.hpp:60
The node_base class.
Definition node.hpp:48
The message struct.
Definition message.hpp:29