| 207 | } // namespace libremidi |
| 208 | |
| 209 | NB_MODULE(pylibremidi, m) { |
| 210 | #if defined(LIBREMIDI_WINMIDI) || defined(LIBREMIDI_WINUWP) |
| 211 | winrt::init_apartment(); |
| 212 | #endif |
| 213 | |
| 214 | namespace nb = nanobind; |
| 215 | nb::class_<stdx::error>(m, "Error") |
| 216 | .def("__bool__", [](stdx::error e) { return e != stdx::error{}; }) |
| 217 | .def("__str__", [](stdx::error e) { return e.message().data(); }) |
| 218 | .def("__repr__", [](stdx::error e) { return e.message().data(); }); |
| 219 | nb::enum_<libremidi::API>(m, "API") |
| 220 | .value("UNSPECIFIED", libremidi::API::UNSPECIFIED) |
| 221 | |
| 222 | .value("COREMIDI", libremidi::API::COREMIDI) |
| 223 | .value("ALSA_SEQ", libremidi::API::ALSA_SEQ) |
| 224 | .value("ALSA_RAW", libremidi::API::ALSA_RAW) |
| 225 | .value("JACK_MIDI", libremidi::API::JACK_MIDI) |
| 226 | .value("WINDOWS_MM", libremidi::API::WINDOWS_MM) |
| 227 | .value("WINDOWS_UWP", libremidi::API::WINDOWS_UWP) |
| 228 | .value("WEBMIDI", libremidi::API::WEBMIDI) |
| 229 | .value("PIPEWIRE", libremidi::API::PIPEWIRE) |
| 230 | .value("KEYBOARD", libremidi::API::KEYBOARD) |
| 231 | .value("NETWORK", libremidi::API::NETWORK) |
| 232 | |
| 233 | .value("ALSA_RAW_UMP", libremidi::API::ALSA_RAW_UMP) |
| 234 | .value("ALSA_SEQ_UMP", libremidi::API::ALSA_SEQ_UMP) |
| 235 | .value("COREMIDI_UMP", libremidi::API::COREMIDI_UMP) |
| 236 | .value("WINDOWS_MIDI_SERVICES", libremidi::API::WINDOWS_MIDI_SERVICES) |
| 237 | .value("KEYBOARD_UMP", libremidi::API::KEYBOARD_UMP) |
| 238 | .value("NETWORK_UMP", libremidi::API::NETWORK_UMP) |
| 239 | .value("JACK_UMP", libremidi::API::JACK_UMP) |
| 240 | .value("PIPEWIRE_UMP", libremidi::API::PIPEWIRE_UMP) |
| 241 | |
| 242 | .value("DUMMY", libremidi::API::DUMMY) |
| 243 | .export_values(); |
| 244 | |
| 245 | m.def("available_apis", libremidi::available_apis); |
| 246 | m.def("available_ump_apis", libremidi::available_ump_apis); |
| 247 | m.def("get_version", libremidi::get_version); |
| 248 | m.def("get_api_name", libremidi::get_api_name); |
| 249 | m.def("get_api_display_name", libremidi::get_api_display_name); |
| 250 | m.def("get_compiled_api_by_name", libremidi::get_compiled_api_by_name); |
| 251 | m.def("midi1_default_api", libremidi::midi1::default_api); |
| 252 | m.def("midi2_default_api", libremidi::midi2::default_api); |
| 253 | |
| 254 | nb::class_<libremidi::message>(m, "Message") |
| 255 | .def(nb::init<>()) |
| 256 | .def_rw("bytes", &libremidi::message::bytes) |
| 257 | .def_rw("timestamp", &libremidi::message::timestamp) |
| 258 | .def("__len__", [](const libremidi::message &m, int idx) { return m.size(); }) |
| 259 | .def("__getitem__", [](const libremidi::message &m, int idx) { return m[idx]; }) |
| 260 | .def("__setitem__", [](libremidi::message &m, int idx, uint8_t res) { return m[idx] = res; }) |
| 261 | .def("__repr__", [](const libremidi::message &m) { |
| 262 | std::stringstream str; |
| 263 | str << m.timestamp << ": "; |
| 264 | str << std::hex; |
| 265 | str << "[ "; |
| 266 | for (int val : m) |
nothing calls this directly
no test coverage detected