如何在Android中以分贝为单位测量声音音量

4
我们正在开发一个跨平台的项目,需要在智能手机上进行声音采样,并尽可能高精度地分析结果。iPhone开发者使用了iOS实现的功能,返回由操作系统自己计算得出的dB刻度下的声音功率/音量。据我所知,Android操作系统中没有相应的功能。
目前,我正在使用操作系统提供的MediaRecorder类在Android上工作,并使用getMaxAmplitude来测量声音功率/音量。在网上看到了很多有关如何将振幅转换为dB刻度的答案,其中听起来最合理的答案是使用以下公式:
20*Math.log10(amplitude/MAX_AMPLITUDE)
但我必须知道可以通过getMaxAmplitude返回的MAX_AMPLITUDE的值,因为不同的设备上这个值是不同的。例如,我在HTC Desire和Samsung Galaxy S3上测试了getMaxAmplitude,在HTC上它达到了32767(我在某些答案中看到这是记录的最大值),而在S3上它没有超过16383(HTC的一半)。
Q1: 这种方法(上述讨论的方法)是否正确?只是我读到正确测量声音功率/音量的方法是计算RSM,然后将其转换为dB,这是iPhone上的做法吗?
Q2: 无论我使用RSM还是仅使用getMaxAmplitude返回的振幅,似乎我仍然需要知道记录硬件可以获得的最高振幅,有办法知道吗?或者有什么方法可以绕过它?

这个答案可能会对你有所帮助:https://dev59.com/KVvUa4cB1Zd3GeqPuo08 - Sharjeel
Android兼容性定义文档指出:“音频输入灵敏度应该设置为这样一个值,即在1000 Hz时,90 dB的声功率级(SPL)源产生的RMS为16位样本的2500。”因此,如果测试中所有参数基本相同,不同设备之间振幅差异会相差两倍,这似乎很奇怪。我无法确定哪个设备更接近正确。 - Michael
1个回答

6

90dBspl是声学领域中的均方根值。

在16位系统中,2500均方根数字电平约等于-22dBFS均方根(实际上是-22.35dBFS),其中0dBFS RMS是满幅正弦波。在这样的系统中,满幅正弦波为0dBFS峰值和-3dB FS均方根(从-32768到+32767)。

正负2500的方波可以计算为:

20 * log ( 2500/32767) = -22.35 dB FS rms

请注意,正弦波的峰值总是比均方根水平高3dB。唯一的信号,其均方根和峰值电平相同,是方波。

现在,Android在90dBspl周围要求30dB的线性度,但此线性度应在90dBspl之上+12dB,在同一点以下为-18dB。在此范围之外,可能会以不同方式进行压缩,具体取决于您测试的手机型号。

Android手机内保证最高的线性级别为-22dBFS + 12dB = -10dBFS均方根。在这个级别以上是不确定的。最常见的情况是,最后7dB的峰值余地仍然是线性的,导致正弦波的声学最大级别为90dBspl +(22-3 dB)= 109dB spl rms(或112 dB spl峰值),没有削波。

在某些手机上,您会发现有一个峰值限制器,它会降低102dBspl均方根以上的增益。这样做的结果是,您仍然可以录制麦克风的饱和级别。这种饱和电平因情况而异,但通常在120dB SPL时会有2%的失真。在此级别以上,麦克风元件开始饱和和削波。

看另一端的刻度:

普通手机麦克风通常有噪声。最新的麦克风可以在0dBPa以下(94dBspl)处具有噪音水平为-63dB,但大多数麦克风在0dBPa下约为-58至-60dB之间。

如何将其计算为dBFS均方根?

0dBPa均方根值为94dBspl均方根。从上述陈述中,我们知道90dBspl均方根声学水平将记录在Android手机中的-22dBFS均方根数字电平上。对于90dBspl以下的-63dB,相当于-22dBFSrms + 4dB -63 dB = -81dBFSrms。在16位系统中的绝对最大动态范围可以近似为96dB(或93dB取决于您的看法),因此噪声电平至少比数字文件中的量化噪声高12dB。

这是一个与视频录制模式相关的非常重要的发现。不幸的是,Android中的许多视频应用程序在录制时往往会有过高的麦克风增益。这会导致在录制响亮的音乐会和类似情况时出现削波。我们也知道麦克风本身至少可以达到120dB。因此,任何音频系统工程师都应该制作一个实际使用麦克风整个动态范围的视频录制模式。这意味着增益应该设置至少低8dB。如果声音太柔和,总是可以在视频录制后更改rms级别,但如果被削波了,那么你就永远损坏了录音。

因此,我想对程序员们说,要实现一个视频录制模式,在其中记录90dB spl rms的声学水平为-30dBFSrms或略低。任何最大化都可以在之后完成。通过这种方式,我们可以以更好的声音记录摇滚音乐会。自动增益控制并不能提高声音质量。动态范围通常太大而无法自动控制。最好实现两种不同的视频录制模式:音乐会模式和演讲模式。在演讲模式下(针对1m距离的发言人进行优化),录制增益可以甚至高于-22dBFSrms,以90dBspl为例。我认为,-12dBFS rms对于90dBspl是一个适当的录音水平。(1m距离的演讲具有大约57dB spl的rms级别和20-30dB的峰值)。

瑞典隆德的Sony移动音频系统工程师Björn Gröhn


嗨Björn,感谢您的贡献,所有这些信息都非常棒和深入。然而,至少对我来说,它太复杂了,无法帮助我们实现与iPhone上获得的相同测量结果..我认为这是最初的目标。请不要误解我的意思。您能否帮助我们找到一种更简单、客观的答案,以便从振幅转换出相同数量的分贝?或者至少告诉我们如何确定某个设备在任意范围内是响亮还是安静。 - Jayr Motta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接