From: Mike Brady <4265913+mikebrady@users.noreply.github.com> Date: Fri, 21 Jan 2022 17:18:13 +0000 (+0100) Subject: Add a "mixer_control_index" setting to the "alsa" part of ther configuration file... X-Git-Tag: 4.1-rc1~24^2~297 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ced6bc67dbc199cc2061c78d4470080d987839a;p=thirdparty%2Fshairport-sync.git Add a "mixer_control_index" setting to the "alsa" part of ther configuration file. A mixer is fully identified by a name and index, duh. Change some debug messages and add an entry to the sample configuration file. --- diff --git a/audio_alsa.c b/audio_alsa.c index a007c419..88a4bb0c 100644 --- a/audio_alsa.c +++ b/audio_alsa.c @@ -298,10 +298,10 @@ int open_mixer() { debug(1, "Failed to load mixer element"); response = -4; } else { - debug(3, "Mixer Control name is \"%s\".", alsa_mix_ctrl); + debug(3, "Mixer control is \"%s\",%d.", alsa_mix_ctrl, alsa_mix_index); alsa_mix_elem = snd_mixer_find_selem(alsa_mix_handle, alsa_mix_sid); if (!alsa_mix_elem) { - warn("failed to find mixer control \"%s\".", alsa_mix_ctrl); + warn("failed to find mixer control \"%s\",%d.", alsa_mix_ctrl, alsa_mix_index); response = -5; } else { response = 1; // we found a hardware mixer and successfully opened it @@ -1057,6 +1057,11 @@ static int init(int argc, char **argv) { alsa_mix_ctrl = (char *)str; } + // Get the Mixer Control Index + if (config_lookup_int(config.cfg, "alsa.mixer_control_index", &value)) { + alsa_mix_index = value; + } + /* Get the disable_synchronization setting. */ if (config_lookup_string(config.cfg, "alsa.disable_synchronization", &str)) { if (strcasecmp(str, "no") == 0) diff --git a/scripts/shairport-sync.conf b/scripts/shairport-sync.conf index ee96fe6f..edb204d5 100644 --- a/scripts/shairport-sync.conf +++ b/scripts/shairport-sync.conf @@ -98,7 +98,8 @@ sessioncontrol = alsa = { // output_device = "default"; // the name of the alsa output device. Use "shairport-sync -h" to discover the names of ALSA hardware devices. Use "alsamixer" or "aplay" to find out the names of devices, mixers, etc. -// mixer_control_name = "PCM"; // the name of the mixer to use to adjust output volume. If not specified, volume in adjusted in software. +// mixer_control_name = "PCM"; // the name of the mixer to use to adjust output volume. No default. If not specified, no mixer is used and volume in adjusted in software. +// mixer_control_index = 0; // the index of the mixer to use to adjust output volume. Default is 0. The mixer is fully identified by the combination of the mixer_control_name and the mixer_control_index, e.g. "PCM",0 would be such a specification. // mixer_device = "default"; // the mixer_device default is whatever the output_device is. Normally you wouldn't have to use this. // output_rate = "auto"; // can be "auto", 44100, 88200, 176400 or 352800, but the device must have the capability.