diff --git a/spa/include/spa/utils/names.h b/spa/include/spa/utils/names.h index 125301463..a7005ac85 100644 --- a/spa/include/spa/utils/names.h +++ b/spa/include/spa/utils/names.h @@ -83,9 +83,13 @@ extern "C" { * capturing PCM */ #define SPA_NAME_API_ALSA_PCM_SINK "api.alsa.pcm.sink" /**< an alsa Node interface for * playback PCM */ -#define SPA_NAME_API_ALSA_MIDI_DEVICE "api.alsa.midi.device" /**< an alsa Midi device */ -#define SPA_NAME_API_ALSA_MIDI_SOURCE "api.alsa.midi.source" /**< an alsa Node interface for - * capturing midi */ +#define SPA_NAME_API_ALSA_SEQ_DEVICE "api.alsa.seq.device" /**< an alsa Midi device */ +#define SPA_NAME_API_ALSA_SEQ_SOURCE "api.alsa.seq.source" /**< an alsa Node interface for + * capture of midi */ +#define SPA_NAME_API_ALSA_SEQ_SINK "api.alsa.seq.sink" /**< an alsa Node interface for + * playback of midi */ +#define SPA_NAME_API_ALSA_SEQ_BRIDGE "api.alsa.seq.bridge" /**< an alsa Node interface for + * bridging midi ports */ /** keys for bluez5 factory names */ #define SPA_NAME_API_BLUEZ5_ENUM_DBUS "api.bluez5.enum.dbus" /**< a dbus Device interface */ diff --git a/spa/plugins/alsa/alsa-seq-source.c b/spa/plugins/alsa/alsa-seq-source.c index e5f9b5ae0..c0f195bd6 100644 --- a/spa/plugins/alsa/alsa-seq-source.c +++ b/spa/plugins/alsa/alsa-seq-source.c @@ -36,7 +36,7 @@ #include #include -#define NAME "alsa-source" +#define NAME "alsa-bridge" #include "alsa-seq.h" @@ -946,15 +946,15 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, static const struct spa_dict_item info_items[] = { { SPA_KEY_FACTORY_AUTHOR, "Wim Taymans " }, - { SPA_KEY_FACTORY_DESCRIPTION, "Record midi with the alsa API" }, + { SPA_KEY_FACTORY_DESCRIPTION, "Bridge midi ports with the alsa sequencer API" }, { SPA_KEY_FACTORY_USAGE, "["SPA_KEY_API_ALSA_PATH"=]" }, }; static const struct spa_dict info = SPA_DICT_INIT_ARRAY(info_items); -const struct spa_handle_factory spa_alsa_midi_source_factory = { +const struct spa_handle_factory spa_alsa_seq_bridge_factory = { SPA_VERSION_HANDLE_FACTORY, - SPA_NAME_API_ALSA_MIDI_SOURCE, + SPA_NAME_API_ALSA_SEQ_BRIDGE, &info, impl_get_size, impl_init, diff --git a/spa/plugins/alsa/alsa.c b/spa/plugins/alsa/alsa.c index d8e5ae7a9..c5bd9d173 100644 --- a/spa/plugins/alsa/alsa.c +++ b/spa/plugins/alsa/alsa.c @@ -30,7 +30,7 @@ extern const struct spa_handle_factory spa_alsa_source_factory; extern const struct spa_handle_factory spa_alsa_sink_factory; extern const struct spa_handle_factory spa_alsa_udev_factory; extern const struct spa_handle_factory spa_alsa_device_factory; -extern const struct spa_handle_factory spa_alsa_midi_source_factory; +extern const struct spa_handle_factory spa_alsa_seq_bridge_factory; SPA_EXPORT int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t *index) @@ -52,7 +52,7 @@ int spa_handle_factory_enum(const struct spa_handle_factory **factory, uint32_t *factory = &spa_alsa_device_factory; break; case 4: - *factory = &spa_alsa_midi_source_factory; + *factory = &spa_alsa_seq_bridge_factory; break; default: return 0; diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in index d8d2c30c0..174ae97d4 100644 --- a/src/daemon/pipewire.conf.in +++ b/src/daemon/pipewire.conf.in @@ -12,7 +12,7 @@ add-spa-lib api.jack.* jack/libspa-jack #load-module libpipewire-module-spa-device api.jack.device #load-module libpipewire-module-spa-device api.alsa.enum.udev -load-module libpipewire-module-spa-node api.alsa.midi.source node.name=MIDI-Bridge +#load-module libpipewire-module-spa-node api.alsa.seq.bridge node.name=MIDI-Bridge load-module libpipewire-module-rtkit load-module libpipewire-module-protocol-native load-module libpipewire-module-spa-node-factory diff --git a/src/examples/media-session/alsa-monitor.c b/src/examples/media-session/alsa-monitor.c index 963652bd8..0b220de8b 100644 --- a/src/examples/media-session/alsa-monitor.c +++ b/src/examples/media-session/alsa-monitor.c @@ -522,6 +522,30 @@ static const struct spa_device_events alsa_udev_events = .object_info = alsa_udev_object_info, }; +static int alsa_start_midi_bridge(struct impl *impl) +{ + struct pw_properties *props; + int res = 0; + + props = pw_properties_new( + SPA_KEY_FACTORY_NAME, SPA_NAME_API_ALSA_SEQ_BRIDGE, + SPA_KEY_NODE_NAME, "Midi-Bridge", + NULL); + + impl->midi_bridge = pw_core_proxy_create_object(impl->core_proxy, + "spa-node-factory", + PW_TYPE_INTERFACE_Node, + PW_VERSION_NODE_PROXY, + &props->dict, + 0); + + if (impl->midi_bridge == NULL) { + res = -errno; + } + return res; + +} + static int alsa_start_monitor(struct impl *impl, struct monitor *monitor) { struct spa_handle *handle; diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index 6c28aac98..1d25752e3 100644 --- a/src/examples/media-session/media-session.c +++ b/src/examples/media-session/media-session.c @@ -93,6 +93,8 @@ struct impl { struct spa_dbus *dbus; struct spa_dbus_connection *dbus_connection; DBusConnection *conn; + + struct pw_proxy *midi_bridge; }; struct object { @@ -1227,6 +1229,7 @@ static void start_services(struct impl *impl) bluez5_start_monitor(impl, &impl->bluez5_monitor); alsa_start_monitor(impl, &impl->alsa_monitor); + alsa_start_midi_bridge(impl); v4l2_start_monitor(impl, &impl->v4l2_monitor); }