[alsa-devel] Mixer volume/decibel mapping

Sebastian H. vand2 at gmx.de
Mon Jun 7 11:19:18 CEST 2010

Am 07.06.2010 05:37, schrieb Raymond Yau:
>>> I thinks Sebastian's question is whether he can use
>>> snd_mixer_selem_set_playback_
>>> dB() set any values in between the volume steps
>>> e.g. Master volume control of ac97 is 1.5 dB per step,
>>> when using snd_mixer_selem_set_playback_dB() to set -0.9dB , how can the
>>> mixer application know what dB value has been set since the value is in
>>> between -1.5dB and 0dB without snd_mixer_selem_get_playbackdB()
>> Indeed I quite happy with what ALSA already provides (I'm just an
>> interested
>> amateur). My main problem is that there is no documentation for the Mixer
>> API
>> and how things are related to each other. Like CTL, HCTL, Mixer and
>> SimpleMixer and of course volume and dB in the snd_mixer_selem_ functions.
>> The root issue is that I wondered if the mixer application should offer a
>> separate text input for decibel values besides the text input for volume
>> values. As pointed out this would not allow for finer grained volume
>> control
>> therefore for the moment I'll probably stick with a mere text label for dB.

> The main difference between those volume controls using TLV_DB_SCALE and
> TLV_DB_LINEAR is -6dB is at the middle of TLV_DB_LINEAR and TLV_DB_SCALE has
> fixed dB value between any two steps.

A grep in the alsa-lib sources did not return anything.

> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/332631
> if the user has both hda onboard sound and emu10k1, he may notice that there
> is big difference if he set volume at percentage instead of dB

Interesting, that's my setup. I have an onboard HDA Intel and a
pci SBLive! Card and some el cheapo USB sound cards to experiment
with. Thanks I'll give the volume listening test a try at some point.

> so it is mainly depend on the scaling of the slider in your mixer
> application

At the moment the sliders are simply sliding linearly from vol. min.
to vol. max. and there is a label which shows the current dB value.

(This made me realize that the neutral (0dB) position of some HDA-Intel
record sliders is somwhere in the middle and not at the ends.)

Lately I've been mostly wrestling with the QT4 part of the application
and not the ALSA part but I followed this thread loosely.

To say I encoutered some (maybe) bugs with jumping sliders and missing
enum values but most of them disappeared after and update from Debian
lenny to Debian squeeze. And still the ALSA version of squeeze is
probably no the latest. Therefore I did not want to comment on these yet.


More information about the Alsa-devel mailing list