[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