Index: DOCS/man/en/mplayer.1 =================================================================== RCS file: /cvsroot/mplayer/main/DOCS/man/en/mplayer.1,v retrieving revision 1.722 diff -u -r1.722 mplayer.1 --- DOCS/man/en/mplayer.1 18 Sep 2004 00:08:17 -0000 1.722 +++ DOCS/man/en/mplayer.1 18 Sep 2004 10:11:19 -0000 @@ -1669,7 +1669,7 @@ For ALSA this is the mixer name. . .TP -.B \-mixer-channel (\-ao oss and \-ao alsa only) +.B \-mixer-channel [,mixer index] (\-ao oss and \-ao alsa only) This option will tell MPlayer to use a different channel for controlling volume than the default PCM. Options for OSS include @@ -1678,6 +1678,11 @@ /usr/\:include/\:linux/\:soundcard.h. For ALSA you can use the names e.g.\& alsamixer displays, like .B Master, Line, PCM. +.br +.I NOTE: +ALSA mixer channel names followed by a number must be specified in the +format, i.e. a channel labled 'PCM 1' in alsamixer must be converted to +.B PCM,1. . .TP .B \-nowaveheader (\-ao pcm only) Index: libao2/ao_alsa.c =================================================================== RCS file: /cvsroot/mplayer/main/libao2/ao_alsa.c,v retrieving revision 1.7 diff -u -r1.7 ao_alsa.c --- libao2/ao_alsa.c 30 Jul 2004 16:15:05 -0000 1.7 +++ libao2/ao_alsa.c 18 Sep 2004 10:11:22 -0000 @@ -101,12 +101,27 @@ static char *mix_name = "PCM"; static char *card = "default"; + static int mix_index = 0; long pmin, pmax; long get_vol, set_vol; float f_multi; - if(mixer_channel) mix_name = mixer_channel; + if(mixer_channel) { + char *test_mix_index; + + mix_name = strdup(mixer_channel); + if (test_mix_index = strchr(mix_name, ',')){ + *test_mix_index = 0; + test_mix_index++; + mix_index = strtol(test_mix_index, &test_mix_index, 0); + + if (*test_mix_index){ + mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: invalid mixer index. Defaulting to 0\n"); + mix_index = 0 ; + } + } + } if(mixer_device) card = mixer_device; if(ao_data.format == AFMT_AC3) @@ -116,9 +131,14 @@ snd_mixer_selem_id_alloca(&sid); //sets simple-mixer index and name - snd_mixer_selem_id_set_index(sid, 0); + snd_mixer_selem_id_set_index(sid, mix_index); snd_mixer_selem_id_set_name(sid, mix_name); + if (mixer_channel) { + free(mix_name); + mix_name = NULL; + } + if ((err = snd_mixer_open(&handle, 0)) < 0) { mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: mixer open error: %s\n", snd_strerror(err)); return CONTROL_ERROR;