制作分贝计(第一个Android应用程序),将Amplitude转换为Decibels的问题

时间:2015-04-16 22:10:05

标签: android decibel

作为更大的应用程序的一部分,我目前正在制作一个分贝计,它的平均声级为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));
            }

如果有人有任何提示或需要更多信息,请告诉我们!

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

负分贝很好,因为它无论如何都是相对的衡量标准。实际上,通常的做法是将最大可能幅度作为参考点,因此分贝从0下降到负空间。当剪切和声音失真时,专业系统通常会将正分贝指示为过载。

因此,例如,如果您的幅度范围是0到1(可接受的float-PCM标准),那么您的amp_ref将为1,您的分贝值将取决于某个负值,该值取决于您的源的位数分辨率(例如32位为-186dB,16位源为-90dB,最高为0dB。这很正常!

编辑:实际上,你的float-PCM幅度范围是-1到1,但是分贝计算“降低”减号并给出负幅度和正幅度的相同结果。

相关问题