libremidi update to v5.4.3 and added virtual midi out as default

This commit is contained in:
Sebastian
2026-06-23 00:05:41 +02:00
parent dc0003232a
commit 51cd271b6f
166 changed files with 8135 additions and 2009 deletions
+32 -9
View File
@@ -24,10 +24,10 @@ struct libremidi_midi_out_handle
libremidi::midi_out self;
};
namespace libremidi
NAMESPACE_LIBREMIDI
{
static void assign_error_callback(const auto& src, auto& dst)
LIBREMIDI_STATIC void assign_error_callback(const auto& src, auto& dst)
{
if (src.callback)
{
@@ -44,14 +44,14 @@ const char* libremidi_get_version(void)
return LIBREMIDI_VERSION;
}
void libremidi_available_midi1_apis(void* ctx, void (*cb)(void* ctx, libremidi_api))
void libremidi_midi1_available_apis(void* ctx, void (*cb)(void* ctx, libremidi_api))
{
if (!cb)
return;
libremidi::midi1::for_all_backends([=](auto b) { cb(ctx, b.API); });
}
void libremidi_available_midi2_apis(void* ctx, void (*cb)(void* ctx, libremidi_api))
void libremidi_midi2_available_apis(void* ctx, void (*cb)(void* ctx, libremidi_api))
{
if (!cb)
return;
@@ -123,6 +123,16 @@ int libremidi_midi_in_port_name(const libremidi_midi_in_port* port, const char**
return 0;
}
int libremidi_midi_in_port_handle(const libremidi_midi_in_port* port, uint64_t* handle)
{
if (!port || !handle)
return -EINVAL;
auto& p = *reinterpret_cast<const libremidi::input_port*>(port);
*handle = static_cast<uint64_t>(p.port);
return 0;
}
int libremidi_midi_out_port_clone(
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst)
{
@@ -152,6 +162,16 @@ int libremidi_midi_out_port_name(
return 0;
}
int libremidi_midi_out_port_handle(const libremidi_midi_out_port* port, uint64_t* handle)
{
if (!port || !handle)
return -EINVAL;
auto& p = *reinterpret_cast<const libremidi::output_port*>(port);
*handle = static_cast<uint64_t>(p.port);
return 0;
}
int libremidi_midi_observer_new(
const libremidi_observer_configuration* c, libremidi_api_configuration* api,
libremidi_midi_observer_handle** out)
@@ -276,11 +296,12 @@ int libremidi_midi_in_new(
= [cb = c->get_timestamp](int64_t msg) { return cb.callback(cb.context, msg); };
}
if (c->on_midi1_message.callback)
if (c->version == libremidi_midi_configuration::MIDI1 && c->on_midi1_message.callback)
conf.on_message = [cb = c->on_midi1_message](const libremidi::message& msg) {
cb.callback(cb.context, msg.timestamp, msg.bytes.data(), msg.size());
};
else if (c->on_midi1_raw_data.callback)
else if (
c->version == libremidi_midi_configuration::MIDI1_RAW && c->on_midi1_raw_data.callback)
{
conf.on_raw_data = [cb = c->on_midi1_raw_data](std::span<const uint8_t> msg, int64_t ts) {
cb.callback(cb.context, ts, msg.data(), msg.size());
@@ -319,11 +340,12 @@ int libremidi_midi_in_new(
= [cb = c->get_timestamp](int64_t msg) { return cb.callback(cb.context, msg); };
}
if (c->on_midi2_message.callback)
if (c->version == libremidi_midi_configuration::MIDI2 && c->on_midi2_message.callback)
conf.on_message = [cb = c->on_midi2_message](const libremidi::ump& msg) {
cb.callback(cb.context, msg.timestamp, msg.data, msg.size());
};
else if (c->on_midi2_raw_data.callback)
else if (
c->version == libremidi_midi_configuration::MIDI2_RAW && c->on_midi2_raw_data.callback)
{
conf.on_raw_data = [cb = c->on_midi2_raw_data](std::span<const uint32_t> msg, int64_t ts) {
cb.callback(cb.context, ts, msg.data(), msg.size());
@@ -470,7 +492,8 @@ int libremidi_midi_out_send_message(
return res != stdx::error{} ? -EIO : 0;
}
int libremidi_midi_out_send_ump(libremidi_midi_out_handle* out, const libremidi_midi2_symbol* msg, size_t sz)
int libremidi_midi_out_send_ump(
libremidi_midi_out_handle* out, const libremidi_midi2_symbol* msg, size_t sz)
{
if (!out || !msg || sz > std::numeric_limits<int32_t>::max())
return -EINVAL;