作为更大应用程序的一部分,我目前正在研究分贝计,该计采用 10 秒时间跨度的平均声级。
为了实现这一点,我制作了一个 10 000 毫秒的 CountDownTimer,每 100 毫秒滴答一次。
在每个 onTick 事件中,我都会更新显示剩余时间的文本字段,并且还会更新实时分贝值。
然而,我的问题是将最大幅度转换为分贝。我找到了“power_db = 20 * log10(amp / amp_ref);” StackOverflow 上的公式,我理解它是如何工作的,但我似乎总是以负分贝值结束。
我知道这是因为 amp_ref 值错误,但我完全不知道应该使用哪个。我在网上发现了很多不同的价值观,但似乎没有一个能奏效。
有谁知道我应该使用哪个参考幅度来在我的仪表上获得正确的分贝读数?我正在测试的手机是谷歌 Nexus 5。如果有帮助的话,如果它只是这个手机上的一个真正准确的值就足够了。
我在 onTick 事件中的代码如下(我暂时删除了公式,因为无论如何它似乎都是错误的):
public void onTick(long ms) {
meetBtn.setText(String.valueOf((ms/1000)+1));
amplitude = mRecorder.getMaxAmplitude();
decibelView.setText(String.valueOf(amplitude));
}
如果有人有任何提示或需要更多信息,请告诉我!
提前致谢!:)