【问题标题】:How to measure sound volume in dB scale Android如何在 dB 标度 Android 中测量音量
【发布时间】:2013-09-12 03:47:23
【问题描述】:

我们正在开展一个跨平台项目,该项目需要在智能手机上进行音量采样并尽可能准确地分析结果,iPhone 开发人员使用 iOS 实现了返回由操作系统计算的以 dB 为单位的声功率/音量的功能本身。据我所知,Android OS 中没有等效的功能。

到目前为止,我正在使用操作系统提供的 MediaRecorder 类在 Android 上工作,并且我使用 getMaxAmplitude 来测量声音功率/音量,我在网上看到了很多关于如何将幅度转换为 dB 的答案规模,听起来最合理的答案是使用公式:

20*Math.log10(幅度/MAX_AMPLITUDE)

但是我必须知道 getMaxAmplitude 可以返回的 MAX_AMPLITUDE,事情是它在不同的设备上是不同的,例如我在 HTC Desire 和三星 Galaxy S3 上测试了 getMaxAmplitude, 在 HTC 上它达到了 32767(我在一些答案中看到了记录的最大值),而在 S3 上它没有超过 16383(HTC 的一半)。

第一季度:

这是(上面讨论的方法)正确的方法吗?只是我读到the correct way to measure sound power/volume is by calculating RSM and then convert it to dB,这是在iPhone上完成的吗?

第二季度:

如果我使用 RSM 或仅使用 getMaxAmplitude 的振幅,我觉得我仍然需要知道我可以从记录硬件中获得的最高振幅是多少,有没有办法知道这一点?还是有办法绕过它?

【问题讨论】:

  • 这个答案可能对你有帮助stackoverflow.com/questions/7523301/…
  • Android 兼容性定义文档指出 “应设置音频输入灵敏度,以使 1000 Hz 的 90 dB 声功率级 (SPL) 源产生 2500 的 16 位样本的 RMS” 。因此,如果测试中的所有参数基本相同,不同设备之间的幅度会相差两倍,这似乎很奇怪。不过,我不能说哪一个最接近正确。

标签: android iphone audio-recording mediarecorder


【解决方案1】:

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

请注意,正弦波的峰值总是比 rms 电平高 3dB。唯一具有相同 rms 和峰值电平的信号是方波。

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

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

在某些手机中,您会发现峰值限制器可将增益降低到 102dBspl rms 以上。这样做的结果是您仍然可以录制到麦克风的饱和度。这个饱和度会有所不同,但在 120dB spl 时通常会出现 2% 的失真。在此级别之上,麦克风组件开始饱和并削波。

看看天平的另一端:

小型电话麦克风通常很吵。最新的麦克风在低于 0dBPa (94dBspl) 时的本底噪声为 -63dB,但大多数麦克风在低于 0dBPa 的 -58 到 -60dB 之间。

如何计算到 dBFS rms?

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

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

所以,我给你们程序员的信息是实现一种视频录制模式,其中 90dB spl rms 的声级记录在 -30dBFSrms 或略低于该值。之后可以进行任何最大化。通过这种方式,我们可以录制具有更好声音的摇滚音乐会。做自动增益控制对音质没有帮助。动态范围通常太大而无法自动控制。你会得到很多的声音。最好实现两种不同的视频录制模式:音乐会模式和演讲模式。在语音模式下(针对 1m 距离的说话人进行了优化),对于 90dBspl,录音增益甚至可能高于 -22dBFSrms。我会说 90dBspl 的 -12dBFS rms 是一个合适的录音电平。 (1m 距离处的语音的 rms 电平约为 57dB spl,峰值高 20-30dB)。

比约恩·格罗恩 Sony mobile Lund,瑞典的音频系统工程师

【讨论】:

  • 嘿 Björn,感谢您的贡献,所有这些信息都很棒而且非常深刻。然而,至少对我来说,它太复杂了,无助于实现我们在 iPhone 上获得的相同测量值。这就是我认为最初的目标。请不要误会我的意思。您能否通过更简单和客观的答案帮助我们找到一种方法来始终如一地实现从振幅转换为相同数量的分贝?或者至少我们如何根据设备在任意范围内确定某物是响亮还是安静。
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多