如何分析Android中mediaRecorder.getMaxAmplitude()返回的值

How to analyze the value returned by the mediaRecorder.getMaxAmplitude() in Android

我正在构建一个 android 应用程序,它应该在录制的声音超过特定阈值时开始录制音频。

我研究并发现 MediaRecorder class 的方法 getMaxAmplitude() 给出了噪声响度的估计作为声压的度量。它 returns 一个介于 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() 的输出,因为它只会为您提供 phone 的特定硬件获得的最大值。不幸的是,制造商遵守 Android OS 要求这一事实并不能确保您从每个微型 phone 获得相同的响应。事实上,即使来自同一制造商的所有设备都具有相同类型的微型 phone,因此您不会获得相同的频率响应或灵敏度。如果你想从这个辅助(但硬件相关的声音强度成比例)单位转换为 dB getMaxAmplitude() 正在返回,只需使用 dB = 20log10(getMaxAmplitude())。现在,如果您希望它适用于各种设备,我建议您在您的应用程序中包含一个校准阶段,以便您可以设置动态设备相关阈值而不是绝对值。也许您可以将阈值设置为校准时获得的强度与尝试捕获时获得的强度之间的关系。我不知道您的应用程序的具体细节,但如果我是您,我至少会考虑这两件事中的一件来进行比较。微phone输入最安静和最饱和的时刻(也许你可以从扬声器中产生自己的响亮声音并记录下来)