15 .midi_channel = channel
24 .osc_address_pattern = pattern.empty() ? std::nullopt : std::optional(pattern)
49 std::optional<uint8_t> cc_number,
50 std::optional<uint8_t> channel,
56 .midi_channel = channel,
57 .midi_message_type = 0xB0,
58 .midi_cc_number = cc_number
63 std::optional<uint8_t> channel,
69 .midi_channel = channel,
70 .midi_message_type = 0x90
75 std::optional<uint8_t> channel,
81 .midi_channel = channel,
82 .midi_message_type = 0x80
87 std::optional<uint8_t> channel,
93 .midi_channel = channel,
94 .midi_message_type = 0xE0
122 if (
index >= arguments.size())
124 return std::visit([](
const auto& v) -> std::optional<float> {
125 using T = std::decay_t<
decltype(v)>;
126 if constexpr (std::is_same_v<T, float>)
128 if constexpr (std::is_same_v<T, int32_t>)
129 return static_cast<float>(v);
137 if (
index >= arguments.size())
139 return std::visit([](
const auto& v) -> std::optional<int32_t> {
140 using T = std::decay_t<
decltype(v)>;
141 if constexpr (std::is_same_v<T, int32_t>)
143 if constexpr (std::is_same_v<T, float>)
144 return static_cast<int32_t
>(v);
152 if (
index >= arguments.size())
154 return std::visit([](
const auto& v) -> std::optional<std::string> {
155 using T = std::decay_t<
decltype(v)>;
156 if constexpr (std::is_same_v<T, std::string>)
165 if (
index >= arguments.size())
167 return std::visit([](
const auto& v) -> std::optional<std::vector<uint8_t>> {
168 using T = std::decay_t<
decltype(v)>;
169 if constexpr (std::is_same_v<T, std::vector<uint8_t>>)
193 .midi_channel = channel
202 .osc_address_pattern = pattern.empty() ? std::nullopt : std::optional(pattern)
211 .timestamp_ns =
static_cast<uint64_t
>(
212 std::chrono::steady_clock::now().time_since_epoch().count()),
222 .data = std::move(v),
223 .timestamp_ns =
static_cast<uint64_t
>(
224 std::chrono::steady_clock::now().time_since_epoch().count()),
234 .data = std::move(v),
235 .timestamp_ns =
static_cast<uint64_t
>(
236 std::chrono::steady_clock::now().time_since_epoch().count()),
247 .timestamp_ns =
static_cast<uint64_t
>(
248 std::chrono::steady_clock::now().time_since_epoch().count()),
259 .timestamp_ns =
static_cast<uint64_t
>(
260 std::chrono::steady_clock::now().time_since_epoch().count()),
270 return std::get<double>(
data);
277 return &std::get<std::vector<double>>(
data);
284 return &std::get<std::vector<uint8_t>>(
data);
291 return &std::get<MIDIMessage>(
data);
298 return &std::get<OSCMessage>(
data);
InputType
Input backend type enumeration.
@ OSC
Open Sound Control (network)
@ TABLET
Digitizers and styluses (pressure, tilt, rotation)
@ HID
Generic HID devices (game controllers, custom hardware)
@ MIDI
MIDI controllers and instruments.
@ SERIAL
Serial port communication (Arduino, etc.)