[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++; }