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