[alsa-devel] alsactl adds volume controls?

Colin Guthrie gmane at colin.guthr.ie
Fri Oct 8 16:16:23 CEST 2010


'Twas brillig, and Colin Guthrie at 08/10/10 15:05 did gyre and gimble:
> 'Twas brillig, and Clemens Ladisch at 08/10/10 14:41 did gyre and gimble:
>> Colin Guthrie wrote:
>>> 'Twas brillig, and Clemens Ladisch at 07/10/10 09:05 did gyre and gimble:
>>>> Please try this patch.
>>>>
>>>> +++ b/sound/pci/hda/patch_sigmatel.c
>>>> ...
>>>
>>> Seemed to do something. Now, rather than printing -46.5dB then the
>>> Master slider is down at 0, it prints "mute".
>>>
>>> Is this the extent of the fix? i.e. to correctly report that the bottom
>>> value is muted?
>>
>> Yes.
> 
> Cool.
> 
>>> If so, then is there a way to tell this via an API so that I can tell PA
>>> to not control the slider down to it's 0 value in order to avoid the
>>> auto mute?
>>
>> Alsamixer uses the standard dB information that should also be used by PA.
> 
> I think something in there is busted, but it's likely at the PA end.
> 
> This is the debug from a volume that is ultimately less than the min dB
> (i.e. ~50dB or there about - certainly more attenuation than -46.5dB) (I
> should really make it so it prints the dB volume here too)
> 
> D: alsa-sink.c: Requested volume: 0:  13% 1:  13%
> D: alsa-sink.c: Got hardware volume: 0:   0% 1:   0%
> D: alsa-sink.c: Calculated software volume: 0:   0% 1:   0%
> (accurate-enough=no)
> 
> And here is something for ~40dB:
> 
> D: alsa-sink.c: Requested volume: 0:  19% 1:  19%
> D: alsa-sink.c: Got hardware volume: 0:  19% 1:  19%
> D: alsa-sink.c: Calculated software volume: 0:  99% 1:  99%
> (accurate-enough=yes)
> 
> In this case the accurate-enough checks succeed vs before when they fail.
> 
> 
> D: alsa-mixer.c: Activating path analog-output
> D: alsa-mixer.c: Path analog-output (Analog Output), direction=1,
> priority=99, probed=yes, supported=yes, has_mute=yes, has_volume=yes,
> has_dB=yes, min_volume=0, max_volume=31, min_dB=-97.5, max_dB=0
> D: alsa-mixer.c: Element Master, direction=1, switch=1, volume=1,
> enumeration=0, required=0, required_absent=0, mask=0x3600000000f66,
> n_channels=2, override_map=yes
> D: alsa-mixer.c: Element PCM, direction=1, switch=0, volume=1,
> enumeration=0, required=0, required_absent=0, mask=0x3600000000f66,
> n_channels=2, override_map=yes
> I: alsa-sink.c: Hardware volume ranges from -97.50 dB to 0.00 dB.
> I: alsa-sink.c: No particular base volume set, fixing to 0 dB
> I: alsa-sink.c: Using hardware volume control. Hardware dB scale supported.
> I: alsa-sink.c: Using hardware mute control.
> D: alsa-util.c: snd_pcm_dump():
> D: alsa-util.c: Soft volume PCM
> D: alsa-util.c: Control: PCM Playback Volume
> D: alsa-util.c: min_dB: -51
> D: alsa-util.c: max_dB: 0
> D: alsa-util.c: resolution: 256
> D: alsa-util.c: Its setup is:
> D: alsa-util.c:   stream       : PLAYBACK
> D: alsa-util.c:   access       : MMAP_INTERLEAVED
> D: alsa-util.c:   format       : S16_LE
> D: alsa-util.c:   subformat    : STD
> D: alsa-util.c:   channels     : 2
> D: alsa-util.c:   rate         : 44100
> D: alsa-util.c:   exact rate   : 44100 (44100/1)
> D: alsa-util.c:   msbits       : 16
> D: alsa-util.c:   buffer_size  : 16384
> D: alsa-util.c:   period_size  : 8192
> D: alsa-util.c:   period_time  : 185759
> D: alsa-util.c:   tstamp_mode  : ENABLE
> D: alsa-util.c:   period_step  : 1
> D: alsa-util.c:   avail_min    : 15502
> D: alsa-util.c:   period_event : 0
> D: alsa-util.c:   start_threshold  : -1
> D: alsa-util.c:   stop_threshold   : 4611686018427387904
> D: alsa-util.c:   silence_threshold: 0
> D: alsa-util.c:   silence_size : 0
> D: alsa-util.c:   boundary     : 4611686018427387904
> D: alsa-util.c: Slave: Hardware PCM card 1 'HDA Intel' device 0 subdevice 0
> D: alsa-util.c: Its setup is:
> D: alsa-util.c:   stream       : PLAYBACK
> D: alsa-util.c:   access       : MMAP_INTERLEAVED
> D: alsa-util.c:   format       : S16_LE
> D: alsa-util.c:   subformat    : STD
> D: alsa-util.c:   channels     : 2
> D: alsa-util.c:   rate         : 44100
> D: alsa-util.c:   exact rate   : 44100 (44100/1)
> D: alsa-util.c:   msbits       : 16
> D: alsa-util.c:   buffer_size  : 16384
> D: alsa-util.c:   period_size  : 8192
> D: alsa-util.c:   period_time  : 185759
> D: alsa-util.c:   tstamp_mode  : ENABLE
> D: alsa-util.c:   period_step  : 1
> D: alsa-util.c:   avail_min    : 15502
> D: alsa-util.c:   period_event : 0
> D: alsa-util.c:   start_threshold  : -1
> D: alsa-util.c:   stop_threshold   : 4611686018427387904
> D: alsa-util.c:   silence_threshold: 0
> D: alsa-util.c:   silence_size : 0
> D: alsa-util.c:   boundary     : 4611686018427387904
> D: alsa-util.c:   appl_ptr     : 0
> D: alsa-util.c:   hw_ptr       : 0
> 
> 
> 
> 
> I'll try and work out why PA still insists on setting Master to 0 aka
> -99999.99dB :D
> 
> Many thanks for the patch.
> 
> Col
> 

Hmm, just thinking about this (as I don't know the volume control logic
particularly well in PA), the call snd_mixer_selem_set_playback_dB() is
used with a dir argument of +1.



More information about the Alsa-devel mailing list