xref: /aosp_15_r20/external/webrtc/modules/audio_processing/agc/utility.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #include "modules/audio_processing/agc/utility.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include <math.h>
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker static const double kLog10 = 2.30258509299;
18*d9f75844SAndroid Build Coastguard Worker static const double kLinear2DbScale = 20.0 / kLog10;
19*d9f75844SAndroid Build Coastguard Worker static const double kLinear2LoudnessScale = 13.4 / kLog10;
20*d9f75844SAndroid Build Coastguard Worker 
Loudness2Db(double loudness)21*d9f75844SAndroid Build Coastguard Worker double Loudness2Db(double loudness) {
22*d9f75844SAndroid Build Coastguard Worker   return loudness * kLinear2DbScale / kLinear2LoudnessScale;
23*d9f75844SAndroid Build Coastguard Worker }
24*d9f75844SAndroid Build Coastguard Worker 
Linear2Loudness(double rms)25*d9f75844SAndroid Build Coastguard Worker double Linear2Loudness(double rms) {
26*d9f75844SAndroid Build Coastguard Worker   if (rms == 0)
27*d9f75844SAndroid Build Coastguard Worker     return -15;
28*d9f75844SAndroid Build Coastguard Worker   return kLinear2LoudnessScale * log(rms);
29*d9f75844SAndroid Build Coastguard Worker }
30*d9f75844SAndroid Build Coastguard Worker 
Db2Loudness(double db)31*d9f75844SAndroid Build Coastguard Worker double Db2Loudness(double db) {
32*d9f75844SAndroid Build Coastguard Worker   return db * kLinear2LoudnessScale / kLinear2DbScale;
33*d9f75844SAndroid Build Coastguard Worker }
34*d9f75844SAndroid Build Coastguard Worker 
Dbfs2Loudness(double dbfs)35*d9f75844SAndroid Build Coastguard Worker double Dbfs2Loudness(double dbfs) {
36*d9f75844SAndroid Build Coastguard Worker   return Db2Loudness(90 + dbfs);
37*d9f75844SAndroid Build Coastguard Worker }
38*d9f75844SAndroid Build Coastguard Worker 
39*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
40