#pragma once #include #include #include #include namespace libremidi { template <> inline std::unique_ptr make>( libremidi::observer_configuration&& conf, libremidi::alsa_seq_ump::observer_configuration&& api) { if (api.manual_poll) return std::make_unique>( std::move(conf), std::move(api)); else return std::make_unique>( std::move(conf), std::move(api)); } template <> inline std::unique_ptr make< alsa_seq::midi_in_impl>( libremidi::ump_input_configuration&& conf, libremidi::alsa_seq_ump::input_configuration&& api) { if (api.manual_poll) return std::make_unique>( std::move(conf), std::move(api)); else return std::make_unique>( std::move(conf), std::move(api)); } } namespace libremidi::alsa_seq_ump { struct backend { using midi_in = alsa_seq::midi_in_impl< libremidi::ump_input_configuration, alsa_seq_ump::input_configuration>; using midi_out = alsa_seq_ump::midi_out_impl; using midi_observer = alsa_seq::observer_impl; using midi_in_configuration = alsa_seq_ump::input_configuration; using midi_out_configuration = alsa_seq_ump::output_configuration; using midi_observer_configuration = alsa_seq_ump::observer_configuration; static const constexpr auto API = libremidi::API::ALSA_SEQ_UMP; static const constexpr auto name = "alsa_seq_ump"; static const constexpr auto display_name = "ALSA (sequencer, UMP)"; static inline bool available() noexcept { static const libasound& snd = libasound::instance(); return snd.available && snd.seq.available && snd.seq.ump.available && snd.ump.available; } }; }