该函数的返回值应该是一个从 0 到 32767 的整数,代表音频的幅度。
但是,经过测试,即使是很小的声音也很容易达到最大值(32767)。例如,婴儿哭声将输出 (32767) 幅度。但是一点声音也会输出(32767)幅度。
请问如何管理这个函数的返回值?
谢谢您的帮助。
该函数的返回值应该是一个从 0 到 32767 的整数,代表音频的幅度。
但是,经过测试,即使是很小的声音也很容易达到最大值(32767)。例如,婴儿哭声将输出 (32767) 幅度。但是一点声音也会输出(32767)幅度。
请问如何管理这个函数的返回值?
谢谢您的帮助。
假设您的传感器/麦克风/解码器在 0 到 100 范围内响应,因此 0 映射到 0 和 100 将映射到 32767。
ScaleConstant = 32767/100
对于 50 的输出:
value = 50*ScaleConstant
看来您的设备对声音非常敏感。我之前在android中实现过这段代码没有问题。我建议在另一台设备上测试它并检查问题是否仍然存在或代码是否存在问题。
getMaxAmplitude() 函数返回一个介于 0 到 +32767 之间的值,这是作为声压测量的噪声响度的估计值。要近似获得以 dB 为单位的值,您可以在 android 中使用以下代码,这是对数学方程的直接解释。
20 * Math.log10(mediaRecorderObject.getMaxAmplitude())
这将返回一个近似的 dB 值。
我建议的另一件事是,您使用手机校准应用程序。在应用程序启动之前,您可以在静音环境中进行录音。因此,如果在两部不同手机上运行的应用程序在静音环境中的录音显示值为 4000 和 6000,您可以添加适合您的应用程序的缩放因子。