Audio-Programming: Directshow Logarithmic Volume Control

[Latexpage]When programming audio user-interfaces, volume is usually calculated in form of logarithmic scales. In Windows, specifically DirectX, volume ranges from -10000 (=silence) up to 0 (=maximum volume). However, a volume slide is moved linearly between e.g. 0 (=silence) up to 1.0 (maximum volume) - so we need to convert linear values to logarithmic and vice versa.

The basic function, that takes a linear value in the range of [0;1] and converts to a exponential value can be denoted as:

f(x) := 10^x

Note, that this function ranges from 0 up to 10 on the vertical axis. The inverse function can be denoted as the logarithmic function with base 10:

f(x)^{-1} := Log_{10}(x)


In order to apply the correct ranges, we need to shift the values of x in both functions. Thus, we can rewrite $f(x)$ as:

f(x) := -1000 \cdot 10^{1-x}

exp10-volume3For the logarithmic function, we write:

f(x)^{-1} := 1-Log_{10}(\frac{1-x}{1000})

Using these formulae, we can convert volumes within the linear ranges from 0.0 to 1.0 to logarithmic values between -10000 and 0 and vice versa.

Leave a Reply

Your email address will not be published. Required fields are marked *