我正在构建一个 android 应用程序,当录制的声音超过某个阈值时,它应该开始录制音频。
我研究并发现 MediaRecorder 类的 getMaxAmplitude() 方法给出了噪声响度的估计作为声压的度量。它返回 0 到 +32767 之间的值。
这是我编写的代码。
MediaRecorder mediaRecorder = new MediaRecorder();
while(True){
if (mediaRecorder.getMaxAmplitude() > THRESHOLD)
System.out.println("Recording sound");
else
System.out.println("Sound recording not above the threshold level);
}
我无法计算 THRESHOLD 值,因为 getMaxAmplitude() 函数返回的值没有标准单位。如果有人可以建议将 getMaxAmplitude() 函数返回的值转换为分贝 (dB) 或任何其他有用的单位,那将是首选。
最佳答案
没有简单的方法可以解释 getMaxAmplitude()
的输出,因为它只会为您提供手机特定硬件获得的最大值。不幸的是,制造商符合 Android 操作系统要求这一事实并不能确保您从每个麦克风获得相同的响应。事实上,即使来自同一制造商的所有设备都没有相同类型的麦克风,因此您不会获得相同的频率响应或灵敏度。如果您想从 getMaxAmplitude()
返回的这个辅助(但取决于硬件的声音强度比例)单位转换为 dB,只需使用 dB = 20log10(getMaxAmplitude())
。现在,如果您希望它适用于各种设备,我建议您在您的应用程序中包含一个校准阶段,以便您可以设置动态设备相关阈值而不是绝对值。也许您可以将阈值设置为校准时获得的强度与 try catch 时获得的强度之间的关系。我不知道您的应用程序的具体细节,但如果我是您,我至少会考虑这两件事中的一件来进行比较。麦克风输入最安静和最饱和的时刻(也许您可以从扬声器中产生自己的响亮声音并记录下来)
关于android - 如何分析Android中mediaRecorder.getMaxAmplitude()返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556028/