[alsa-devel] Mixer volume/decibel mapping

Raymond Yau superquad.vortex2 at gmail.com
Fri May 21 03:30:20 CEST 2010

2010/5/21 James Courtier-Dutton <james.dutton at gmail.com>

> On 20 May 2010 10:41, Sebastian H. <vand2 at gmx.de> wrote:
> >
> > That's clear.
> > I imagined that maybe the dB scale could be the "real thing" and the
> volume
> > steps would be a convenient but possibly coarse mapping into a denser
> > stepped dB space provided by the hardware/driver.
> > This was unlikely but I wanted to ask anyway ;-).
> >
> I believe it could be extended to support a continuous range.
> For example, some hardware uses a 32bit value to control the gain.
> The mix operation is simply "the_sample" * "the_control_value".
> So in this case the hardware has a linear control that can be
> considered continuous for our purposes.
> The conversion from the control value to a usable value would have to
> include a user land log operation.
> It was never implemented due to lack of demand.
> For the cards that do have this 32bit linear value, a simple lookup
> table is used in the kernel code to convert it to 256 step values.
> If implemented, one could then introduce professional gain controls
> that do not produce "clicks" in the output when adjusted.
> gain controls with steps in them produce clicks when the gain control
> is adjusted.

I thinks Sebastian's question is whether he can use
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()

More information about the Alsa-devel mailing list