mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-04 13:30:08 -05:00
Fix wrong scales in linear volume calculation
Fixed wrong scales of dB values (TLV is 0.01dB unit) in the linear volume calculation.
This commit is contained in:
parent
70825bb7e6
commit
9d2518bb91
1 changed files with 5 additions and 5 deletions
|
|
@ -1091,8 +1091,8 @@ static int do_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||||||
maxdb;
|
maxdb;
|
||||||
else {
|
else {
|
||||||
/* FIXME: precalculate and cache these values */
|
/* FIXME: precalculate and cache these values */
|
||||||
double lmin = pow(10.0, mindb/20.0);
|
double lmin = pow(10.0, mindb/2000.0);
|
||||||
double lmax = pow(10.0, maxdb/20.0);
|
double lmax = pow(10.0, maxdb/2000.0);
|
||||||
val = (lmax - lmin) * val + lmin;
|
val = (lmax - lmin) * val + lmin;
|
||||||
*db_gain = (long)(100.0 * 20.0 * log10(val));
|
*db_gain = (long)(100.0 * 20.0 * log10(val));
|
||||||
}
|
}
|
||||||
|
|
@ -1293,9 +1293,9 @@ static int do_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
||||||
/* FIXME: precalculate and cache vmin and vmax */
|
/* FIXME: precalculate and cache vmin and vmax */
|
||||||
double vmin, vmax, v;
|
double vmin, vmax, v;
|
||||||
vmin = (min <= SND_CTL_TLV_DB_GAIN_MUTE) ? 0.0 :
|
vmin = (min <= SND_CTL_TLV_DB_GAIN_MUTE) ? 0.0 :
|
||||||
pow(10.0, (double)min / 20.0);
|
pow(10.0, (double)min / 2000.0);
|
||||||
vmax = !max ? 1.0 : pow(10.0, (double)max / 20.0);
|
vmax = !max ? 1.0 : pow(10.0, (double)max / 2000.0);
|
||||||
v = pow(10.0, (double)db_gain / 20.0);
|
v = pow(10.0, (double)db_gain / 2000.0);
|
||||||
v = (v - vmin) * (rangemax - rangemin) / (vmax - vmin);
|
v = (v - vmin) * (rangemax - rangemin) / (vmax - vmin);
|
||||||
if (xdir > 0)
|
if (xdir > 0)
|
||||||
v = ceil(v);
|
v = ceil(v);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue