【发布时间】: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