[note new email address]
jaroslav: i've fixed the problem and made a patch.
i'm using the delta audiophile 2496. the following two lines do not work.
they end up muting both sides.
amixer cset iface=MIXER,name='Multi Capture Switch',index=[0-9] 0,1
amixer cset iface=MIXER,name='Multi Playback Switch',index=[0-9] 0,1
i can get values=off,off, values=on,on, values=off,on, and values=on,off
using envy24control, but i could not get values=off,on using amixer, as
there was no statement(?) to adjust ptr when the first value was 0 or
equivalent (see below). i've fixed this and attached a patch. i made
sure that it works with the latest cvs version of amixer (which has not
changed since at least 10/20/01 other than the address of the fsf).
woohoo! my first real contribution to linux audio...
-dave
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=on,on
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0,1
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1,0
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=on,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0,0 (redundant)
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1,1 (redundant)
numid=25,iface=MIXER,name='Multi Capture Switch'
; type=BOOLEAN,access=rw---,values=2
: values=on,on
diff -Naur amixer/amixer.c amixer.patched/amixer.c
--- amixer/amixer.c Thu Sep 27 19:14:26 2001
+++ amixer.patched/amixer.c Wed Jan 9 22:25:50 2002
@@ -951,8 +951,21 @@
tmp = snd_ctl_elem_value_get_boolean(control,
idx);
tmp = tmp > 0 ? 0 : 1;
ptr += 6;
- } else if (atoi(ptr)) {
+ } else if (!strncasecmp(ptr, "1", 1)) {
tmp = 1;
+ while (isdigit(*ptr))
+ ptr++;
+ } else if (!strncasecmp(ptr, "off", 3)) {
+ tmp = 0;
+ ptr += 3;
+ } else if (!strncasecmp(ptr, "down", 4)) {
+ tmp = 0;
+ ptr += 4;
+ } else if (!strncasecmp(ptr, "no", 2)) {
+ tmp = 0;
+ ptr += 2;
+ } else if (!strncasecmp(ptr, "0", 1)) {
+ tmp = 0;
while (isdigit(*ptr))
ptr++;
}