From a11fa07e5e5769222d4fe5d8bc328cb03cd594f1 Mon Sep 17 00:00:00 2001 From: Luciano Iam Date: Sun, 29 Sep 2019 02:54:30 +0200 Subject: Set pretty-name for ALSA raw MIDI ports --- linux/alsa/JackAlsaDriver.cpp | 5 +++++ linux/alsa/JackAlsaDriver.h | 2 ++ linux/alsa/alsa_midi_impl.h | 2 ++ linux/alsa/alsa_midi_jackmp.cpp | 6 ++++++ linux/alsa/alsa_rawmidi.c | 13 +++++++++---- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 62d9f43b..529ec8d3 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -471,6 +471,11 @@ void JackAlsaDriver::SetTimetAux(jack_time_t time) fBeginDateUst = time; } +int JackAlsaDriver::PortSetDeviceMetadata(jack_port_id_t port_id, const char* pretty_name) +{ + return fEngine->PortSetDeviceMetadata(fClientControl.fRefNum, port_id, pretty_name); +} + void JackAlsaDriver::WriteOutputAux(jack_nframes_t orig_nframes, snd_pcm_sframes_t contiguous, snd_pcm_sframes_t nwritten) { for (int chn = 0; chn < fPlaybackChannels; chn++) { diff --git a/linux/alsa/JackAlsaDriver.h b/linux/alsa/JackAlsaDriver.h index c62ff541..b2f44afb 100644 --- a/linux/alsa/JackAlsaDriver.h +++ b/linux/alsa/JackAlsaDriver.h @@ -93,6 +93,8 @@ class JackAlsaDriver : public JackAudioDriver void WriteOutputAux(jack_nframes_t orig_nframes, snd_pcm_sframes_t contiguous, snd_pcm_sframes_t nwritten); void SetTimetAux(jack_time_t time); + int PortSetDeviceMetadata(jack_port_id_t port_id, const char* pretty_name); + // JACK API emulation for the midi driver int is_realtime() const; int create_thread(pthread_t *thread, int prio, int rt, void *(*start_func)(void*), void *arg); diff --git a/linux/alsa/alsa_midi_impl.h b/linux/alsa/alsa_midi_impl.h index e71e823b..77fabda8 100644 --- a/linux/alsa/alsa_midi_impl.h +++ b/linux/alsa/alsa_midi_impl.h @@ -37,6 +37,7 @@ extern "C" int JACK_port_unregister(jack_client_t *, jack_port_t*); void* JACK_port_get_buffer(jack_port_t*, jack_nframes_t); int JACK_port_set_alias(jack_port_t* port, const char* name); + int JACK_port_set_device_metadata(jack_port_t* port, const char* pretty_name); jack_nframes_t JACK_get_sample_rate(jack_client_t *); jack_nframes_t JACK_frame_time(jack_client_t *); @@ -49,6 +50,7 @@ extern "C" #define jack_port_unregister JACK_port_unregister #define jack_port_get_buffer JACK_port_get_buffer #define jack_port_set_alias JACK_port_set_alias +#define jack_port_set_device_metadata JACK_port_set_device_metadata #define jack_get_sample_rate JACK_get_sample_rate #define jack_frame_time JACK_frame_time diff --git a/linux/alsa/alsa_midi_jackmp.cpp b/linux/alsa/alsa_midi_jackmp.cpp index 1e276244..bf91163e 100644 --- a/linux/alsa/alsa_midi_jackmp.cpp +++ b/linux/alsa/alsa_midi_jackmp.cpp @@ -71,6 +71,12 @@ int JACK_port_set_alias(jack_port_t *port, const char* name) return real->driver->port_set_alias(real->port_id, name); } +int JACK_port_set_device_metadata(jack_port_t* port, const char* pretty_name) +{ + fake_port_t* real = (fake_port_t*)port; + return real->driver->PortSetDeviceMetadata(real->port_id, pretty_name); +} + jack_nframes_t JACK_get_sample_rate(jack_client_t *client) { return ((JackAlsaDriver*)client)->get_sample_rate(); diff --git a/linux/alsa/alsa_rawmidi.c b/linux/alsa/alsa_rawmidi.c index d0ecc4d5..19578531 100644 --- a/linux/alsa/alsa_rawmidi.c +++ b/linux/alsa/alsa_rawmidi.c @@ -90,6 +90,7 @@ struct midi_port_t { alsa_id_t id; char dev[16]; char name[64]; + char device_name[64]; jack_port_t *jack; snd_rawmidi_t *rawmidi; @@ -410,9 +411,10 @@ void midi_port_init(const alsa_rawmidi_t *midi, midi_port_t *port, snd_rawmidi_i port->id = *id; snprintf(port->dev, sizeof(port->dev), "hw:%d,%d,%d", id->id[0], id->id[1], id->id[3]); + snprintf(port->device_name, sizeof(port->device_name), snd_rawmidi_info_get_name(info)); name = snd_rawmidi_info_get_subdevice_name(info); if (!strlen(name)) - name = snd_rawmidi_info_get_name(info); + name = port->device_name; snprintf(port->name, sizeof(port->name), "%s %s %s", port->id.id[2] ? "out":"in", port->dev, name); // replace all offending characters with '-' @@ -429,15 +431,18 @@ inline int midi_port_open_jack(alsa_rawmidi_t *midi, midi_port_t *port, int type char name[128]; if (type & JackPortIsOutput) - snprintf(name, sizeof(name), "system:midi_capture_%d", ++midi->midi_in_cnt); + snprintf(name, sizeof(name), "system_midi:capture_%d", ++midi->midi_in_cnt); else - snprintf(name, sizeof(name), "system:midi_playback_%d", ++midi->midi_out_cnt); + snprintf(name, sizeof(name), "system_midi:playback_%d", ++midi->midi_out_cnt); port->jack = jack_port_register(midi->client, name, JACK_DEFAULT_MIDI_TYPE, type | JackPortIsPhysical | JackPortIsTerminal, 0); - if (port->jack) + if (port->jack) { jack_port_set_alias(port->jack, alias); + jack_port_set_device_metadata(port->jack, port->device_name); + } + return port->jack == NULL; } -- cgit v1.2.1 From 0f015fc53b6e16f0479329ecb3d50ed18d8c2417 Mon Sep 17 00:00:00 2001 From: Luciano Iam Date: Sun, 29 Sep 2019 03:00:04 +0200 Subject: Set pretty-name for ALSA seq MIDI ports --- linux/alsa/alsa_seqmidi.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/linux/alsa/alsa_seqmidi.c b/linux/alsa/alsa_seqmidi.c index a59e3e82..109e68c6 100644 --- a/linux/alsa/alsa_seqmidi.c +++ b/linux/alsa/alsa_seqmidi.c @@ -493,8 +493,9 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s snd_seq_client_info_alloca (&client_info); snd_seq_get_any_client_info (self->seq, addr.client, client_info); + const char *device_name = snd_seq_client_info_get_name(client_info); snprintf(port->name, sizeof(port->name), "alsa_pcm:%s/midi_%s_%d", - snd_seq_client_info_get_name(client_info), port_type[type].name, addr.port+1); + device_name, port_type[type].name, addr.port+1); // replace all offending characters by - for (c = port->name; *c; ++c) @@ -510,9 +511,9 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s } if (jack_caps & JackPortIsOutput) - snprintf(name, sizeof(name), "system:midi_capture_%d", ++self->midi_in_cnt); + snprintf(name, sizeof(name), "system_midi:capture_%d", ++self->midi_in_cnt); else - snprintf(name, sizeof(name), "system:midi_playback_%d", ++self->midi_out_cnt); + snprintf(name, sizeof(name), "system_midi:playback_%d", ++self->midi_out_cnt); port->jack_port = jack_port_register(self->jack, name, JACK_DEFAULT_MIDI_TYPE, jack_caps, 0); @@ -520,6 +521,7 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s goto failed; jack_port_set_alias (port->jack_port, port->name); + jack_port_set_device_metadata (port->jack_port, device_name); /* generate an alias */ @@ -532,6 +534,7 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s *c = '-'; jack_port_set_alias (port->jack_port, port->name); + jack_port_set_device_metadata (port->jack_port, device_name); if (type == PORT_INPUT) err = alsa_connect_from(self, port->remote.client, port->remote.port); -- cgit v1.2.1 From ab536f67bc25ee939eb6f2ba369fcd39c5638282 Mon Sep 17 00:00:00 2001 From: Luciano Iam Date: Sun, 29 Sep 2019 03:35:40 +0200 Subject: Rename system_midi:* back to system:midi_* --- linux/alsa/alsa_rawmidi.c | 4 ++-- linux/alsa/alsa_seqmidi.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/linux/alsa/alsa_rawmidi.c b/linux/alsa/alsa_rawmidi.c index 19578531..504547f3 100644 --- a/linux/alsa/alsa_rawmidi.c +++ b/linux/alsa/alsa_rawmidi.c @@ -431,9 +431,9 @@ inline int midi_port_open_jack(alsa_rawmidi_t *midi, midi_port_t *port, int type char name[128]; if (type & JackPortIsOutput) - snprintf(name, sizeof(name), "system_midi:capture_%d", ++midi->midi_in_cnt); + snprintf(name, sizeof(name), "system:midi_capture_%d", ++midi->midi_in_cnt); else - snprintf(name, sizeof(name), "system_midi:playback_%d", ++midi->midi_out_cnt); + snprintf(name, sizeof(name), "system:midi_playback_%d", ++midi->midi_out_cnt); port->jack = jack_port_register(midi->client, name, JACK_DEFAULT_MIDI_TYPE, type | JackPortIsPhysical | JackPortIsTerminal, 0); diff --git a/linux/alsa/alsa_seqmidi.c b/linux/alsa/alsa_seqmidi.c index 109e68c6..387cc636 100644 --- a/linux/alsa/alsa_seqmidi.c +++ b/linux/alsa/alsa_seqmidi.c @@ -511,9 +511,9 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s } if (jack_caps & JackPortIsOutput) - snprintf(name, sizeof(name), "system_midi:capture_%d", ++self->midi_in_cnt); + snprintf(name, sizeof(name), "system:midi_capture_%d", ++self->midi_in_cnt); else - snprintf(name, sizeof(name), "system_midi:playback_%d", ++self->midi_out_cnt); + snprintf(name, sizeof(name), "system:midi_playback_%d", ++self->midi_out_cnt); port->jack_port = jack_port_register(self->jack, name, JACK_DEFAULT_MIDI_TYPE, jack_caps, 0); -- cgit v1.2.1