working on win32 uwp! and libremidi update

This commit is contained in:
Sebastian @ HfG
2024-10-28 19:24:18 +01:00
parent 06cb6d8319
commit 1e3755148c
106 changed files with 8474 additions and 2198 deletions
+28 -60
View File
@@ -3,14 +3,9 @@
#include <libremidi/config.hpp>
#include <libremidi/detail/observer.hpp>
#include <chrono>
#include <functional>
#include <iostream>
#include <optional>
#include <span>
#include <string>
#include <string_view>
#include <thread>
#include <vector>
// Credits: greatly inspired from
@@ -87,39 +82,16 @@ struct snd_ctl_wrapper
struct enumerator
{
const libasound& snd = libasound::instance();
const error_handler& handler;
const observer_configuration& configuration;
std::vector<alsa_raw_port_info> inputs;
std::vector<alsa_raw_port_info> outputs;
std::function<void(std::string_view)> error_callback;
std::function<void(std::string_view)> warn_callback;
explicit enumerator(const auto& self)
: handler{self}
, configuration{self.configuration}
{
template <typename... Args>
void warning(Args&&... args)
{
std::string s;
((s += args), ...);
if (warn_callback)
{
warn_callback(std::move(s));
}
else
{
std::cerr << s << std::endl;
}
}
template <typename... Args>
void error(Args&&... args)
{
std::string s;
((s += args), ...);
if (error_callback)
{
error_callback(std::move(s));
}
else
{
throw std::runtime_error(s.c_str());
}
}
// 1: is an input / output
@@ -141,9 +113,9 @@ struct enumerator
}
else if (status < 0 && status != -ENXIO)
{
error(
"alsa_raw_helpers::enumerator::is: cannot get rawmidi information:", card, device, sub,
snd.strerror(status));
handler.libremidi_handle_error(
configuration, "Cannot get rawmidi information: " + device_identifier(card, device, sub)
+ " : " + snd.strerror(status));
return status;
}
else
@@ -185,26 +157,23 @@ struct enumerator
return s;
}
void enumerate_cards()
stdx::error enumerate_cards()
{
using namespace std::literals;
int card = -1;
int status = snd.card.next(&card);
if (status < 0)
{
error(
"alsa_raw_helpers::enumerator::enumerate_cards: "
"cannot determine card number: ",
snd.strerror(status));
return;
handler.libremidi_handle_error(
configuration, "Cannot determine card number: "s + snd.strerror(status));
return from_errc(status);
}
if (card < 0)
{
error(
"alsa_raw_helpers::enumerator::enumerate_cards: "
"no sound cards found");
return;
handler.libremidi_handle_error(configuration, "No sound cards found");
return std::errc::no_such_device;
}
while (card >= 0)
@@ -213,13 +182,12 @@ struct enumerator
if ((status = snd.card.next(&card)) < 0)
{
error(
"alsa_raw_helpers::enumerator::enumerate_cards: "
"cannot determine card number: ",
snd.strerror(status));
break;
handler.libremidi_handle_error(
configuration, "cannot determine card number: "s + snd.strerror(status));
return std::errc::no_such_device;
}
}
return stdx::error{};
}
virtual void enumerate_devices(int card) = 0;
@@ -228,20 +196,22 @@ struct enumerator
inline snd_ctl_wrapper::snd_ctl_wrapper(enumerator& self, const char* name)
: snd{self.snd}
{
using namespace std::literals;
int status = snd.ctl.open(&ctl, name, 0);
if (status < 0)
{
self.error(
"alsa_raw_helpers::enumerator::snd_ctl_wrapper: "
"cannot open control for card",
name, snd.strerror(status));
self.handler.libremidi_handle_error(
self.configuration, "cannot open control for card"s + name + " : " + snd.strerror(status));
}
}
struct midi1_enumerator : enumerator
{
using alsa_raw::enumerator::enumerator;
void enumerate_devices(int card) override
{
using namespace std::literals;
char name[128];
sprintf(name, "hw:%d", card);
@@ -261,10 +231,8 @@ struct midi1_enumerator : enumerator
if (status < 0)
{
error(
"alsa_raw::midi1_enumerator::enumerate_devices: "
"cannot determine device number: ",
snd.strerror(status));
handler.libremidi_handle_error(
configuration, "Cannot determine device number: "s + snd.strerror(status));
break;
}