我们正在开发一个跨平台项目,需要在智能手机上进行音量采样并尽可能准确地分析结果,IPhone 开发人员使用 iOS 实现的功能,返回 OS 本身计算的以 dB 为单位的声功率/音量。据我所知,Android 操作系统中没有等效的功能。
到目前为止,我正在使用操作系统提供的 MediaRecorder 类在 Android 上工作,并且我使用 getMaxAmplitude 来测量声功率/音量,我在网上看到了很多关于如何将幅度转换为 dB 标度的答案,听起来最合理的答案是使用以下公式:
20*Math.log10(振幅/MAX_AMPLITUDE)
但是我必须知道 getMaxAmplitude 可以返回的 MAX_AMPLITUDE 是什么,问题是它在不同的设备上是不同的,例如我在 HTC Desire 和三星 Galaxy S3 上测试了 getMaxAmplitude,
在 HTC 上它达到了 32767(我在一些答案中看到了记录的最大值),而在 S3 上它没有超过 16383(HTC 的一半)。
Q1:
这是(上面讨论的方法)正确的方法吗?只是我读到了 the correct way to measure sound power/volume is by calculating RSM and then convert it to dB ,这是在 iPhone 上完成的吗?
Q2 :
如果我使用 RSM 或仅使用 getMaxAmplitude 中的 Amplitude,我觉得我仍然需要知道我可以从记录硬件中获得的最高幅度是多少,有没有办法知道这一点?或者有没有办法以某种方式绕过它?
最佳答案
90dBspl 是声域中的 rms 值。
16 位系统中 2500 rms 的数字电平与大约 -22dB FS rms(实际上是 -22.35)相同,其中 0dBFS rms 是满量程方波。这种系统中的满量程正弦曲线是 0dBFS 峰值和 -3dB FS rms(从 -32768 到 +32767)。
+/-2500 的方波可以计算为:
20 * log (2500/32767) = -22.35 dB FS rms
请注意,正弦波的峰值始终比均方根电平高 3dB。唯一具有相同均方根和峰值电平的信号是方波。
现在,Android 要求 90dBspl 附近有 30dB 的线性度,但是这个线性度应该是 90dBspl 以上 +12dB 和相同点以下 -18dB。在此范围之外,可能会以不同方式进行压缩,具体取决于您测试的手机型号。
Android 手机内保证的最高线性电平为 -22dBFS +12dB = -10dBFS rms。高于这个水平是不确定的。最常见的情况是,最后 7dB 的峰值余量仍然是线性的,这导致 90dBspl + (22-3 dB) = 109dB spl rms 的声学最大电平对于没有削波的正弦(或 112 dB spl 峰值)。
在某些手机中,您会发现峰值限制器可将增益降低至 102dBspl rms 以上。这样做的结果是您仍然可以录制到麦克风的饱和水平。这个饱和度会有所不同,但在 120dB spl 下通常会有 2% 的失真。高于此电平时,麦克风组件开始饱和和削波。
查看天平的另一端:
小型电话麦克风通常很吵。最新的麦克风在低于 0dBPa (94dBspl) 时的本底噪声为 -63dB,但大多数麦克风在低于 0dBPa 的情况下介于 -58 到 -60dB 之间。
这如何计算为 dBFS rms ?
0dBPa rms 是 94dB spl rms。从上面的说法我们知道,90dBspl rms 的声级将在 Android 手机中以 -22dBFS rms 的数字电平记录。低于 90dBspl 的 -63dB 与 -22dBFSrms +4dB -63dB = -81dBFSrms 相同。 16 位系统中动态的绝对最大范围可以近似为 96dB(或 93dB,取决于您如何看待它),因此噪声水平至少比数字文件中的量化噪声高 12dB。
这是视频录制模式的一个非常重要的发现。不幸的是,Android 中的许多视频应用程序在录制时往往具有过高的麦克风增益。在录制嘈杂的音乐会和类似情况时,这会导致剪辑。我们也知道麦克风本身至少可以达到 120dB。因此,对于任何音频系统工程师来说,制作一种实际使用麦克风整个动态范围的视频录制模式将是一个好主意。这意味着增益应设置为至少低 8dB。如果声音太小,在视频录制之后总是可以更改 rms 级别,但如果它被剪裁,那么你已经永远损坏了录音。
所以,我给程序员们的信息是实现一种视频录制模式,其中 90dB spl rms 的声级记录在 -30dBFSrms 或略低于该值。之后可以进行任何最大化。通过这种方式,我们可以录制具有更好声音的摇滚音乐会。进行自动增益控制对音质没有帮助。动态范围通常太大而无法自动控制。你会在声音中得到很多抽水。最好实现两种不同的视频录制模式:音乐会模式和演讲模式。在语音模式下(针对 1m 距离的说话人进行了优化),对于 90dBspl,录音增益甚至可能高于 -22dBFSrms。我会说 90dBspl 的 -12dBFS rms 将是一个合适的录音电平。 (语音在 1m 距离处的均方根电平约为 57dB spl,峰值高出 20-30dB)。
比约恩·格罗恩
Sony mobile Lund, 瑞典的音频系统工程师
关于android - 如何以dB标度Android测量音量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18684948/