【发布时间】:2011-05-08 07:43:53
【问题描述】:
我正在使用 XNA 库录制麦克风输入(我不认为这真的是特定于技术的,但它永远不会受到伤害)。每次我得到一个样本时,我都想计算分贝。我在互联网上进行了很多搜索,但没有找到可靠的例子......
这是我从样本中计算分贝的尝试:
double peak = 0;
for (var i = 0; i < _buffer.Length; i = i + 2)
{
var sample = BitConverter.ToInt16(_buffer, i);
if (sample > peak)
peak = sample;
else if (sample < -peak)
peak = -sample;
}
var decibel = (20 * Math.Log10(peak/32768));
如果我将分贝值输出到屏幕上,我可以看到分贝值会随着我的声音变得越来越大而随着我说话的声音越来越小而变得越来越低。但是,当我绝对安静时,它总是徘徊在 -40 左右……我认为它会是 -90。我在上面的块中一定有一个计算错误??从我在某些网站上读到的内容来看,-40 相当于“轻声细语”……但是,它完全安静。
另外,如果我将麦克风静音,它会直接变为 -90。
我做错了吗?
【问题讨论】:
-
可能有背景噪音?
-
对找到此页面的研究人员有用:float rms2db(float value) { return 10 * log10(value); }
标签: c# audio audio-recording