[Pkg-alsa-devel] Bug#319628: alsa-oss: fails to read volume for
software volume control
Nicolas Boullis
nicolas.boullis at free.fr
Sat Jul 23 15:22:38 UTC 2005
Package: alsa-oss
Version: 1.0.8-1
Severity: normal
Hi,
My MacMini's audio chip seems to have no hardware volume control (or it
is unsupported in the kernel I use), so I use software volume control,
with the attached .asoundrc. (I'm still a newbie about alsa, there may
be some mistakes in my .soundrc file.)
While trying to use hotkeys (that only understands oss) with aoss, I
discovered that aoss did not allow to read the volume control, while it
can write it flawlessly.
After a few tests, I discovered that it was related to the failing
snd_mixer_selem_get_playback_switch function call, and I could
workaround the issue with the attached trivial quick&dirty patch.
Cheers,
Nicolas Boullis
-- System Information:
Debian Release: 3.1
Architecture: powerpc (ppc)
Kernel: Linux 2.6.12-irma
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Versions of packages alsa-oss depends on:
ii libasound2 1.0.8-3 ALSA library
ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries an
-- no debconf information
-------------- next part --------------
pcm.!default {
type plug
slave {
pcm {
type softvol
slave {
pcm {
type dmix
ipc_key 7666
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
}
}
control {
name Master
card 0
}
}
}
}
pcm.dsp0 {
type plug
slave.pcm "!default"
}
-------------- next part --------------
only in patch2:
unchanged:
--- alsa-oss-1.0.8.orig/alsa/mixer.c
+++ alsa-oss-1.0.8/alsa/mixer.c
@@ -487,9 +487,7 @@
break;
}
err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, &sw);
- if (err < 0)
- break;
- if (sw) {
+ if ((err < 0) || (sw)) {
err = snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &lvol);
if (err < 0)
break;
@@ -499,9 +497,7 @@
rvol = lvol;
} else {
err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_RIGHT, &sw);
- if (err < 0)
- break;
- if (sw) {
+ if ((err < 0) || (sw)) {
err = snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &rvol);
if (err < 0)
break;
More information about the Pkg-alsa-devel
mailing list