我正在使用nAudio库来捕获麦克风输入。但我遇到了一个问题。 我正在使用nAudio示例应用程序中的代码(我稍微修改了该代码)。 这些代码根据麦克风输入生成WAV文件并将其呈现为波形。这是代码。C# - 麦克风噪声检测
private void RenderFile()
{
SampleAggregator.RaiseRestart();
using (WaveFileReader reader = new WaveFileReader(this.voiceRecorderState.ActiveFile))
{
this.samplesPerSecond = reader.WaveFormat.SampleRate;
SampleAggregator.NotificationCount = reader.WaveFormat.SampleRate/10;
//Sample rate is 44100
byte[] buffer = new byte[1024];
WaveBuffer waveBuffer = new WaveBuffer(buffer);
waveBuffer.ByteBufferCount = buffer.Length;
int bytesRead;
do
{
bytesRead = reader.Read(waveBuffer, 0, buffer.Length);
int samples = bytesRead/2;
double sum = 0;
for (int sample = 0; sample < samples; sample++)
{
if (bytesRead > 0)
{
sampleAggregator.Add(waveBuffer.ShortBuffer[sample]/32768f);
double sample1 = waveBuffer.ShortBuffer[sample]/32768.0;
sum += (sample1 * sample1);
}
}
double rms = Math.Sqrt(sum/(SampleAggregator.NotificationCount));
var decibel = 20 * Math.Log10(rms);
System.Diagnostics.Debug.WriteLine(decibel.ToString() + " in dB");
} while (bytesRead > 0);
int totalSamples = (int)reader.Length/2;
TotalWaveFormSamples = totalSamples/sampleAggregator.NotificationCount;
SelectAll();
}
audioPlayer.LoadFile(this.voiceRecorderState.ActiveFile);
}
下面是没有声音,但只有麦克风噪音2秒WAV文件的结果有点块。
以dB -54.089102453893
以dB -51.9171950072361
以dB -53.3478098666891
-53.1845794096928以dB
-53.8851764055102以dB
以dB -57.5541358628342
-54.0121140454216以dB
-55.5204248291508以dB为单位
-54.9单位dB
-53.6831017096011单位dB
-52.8728852678309单位dB
-55.7021600863786以dB为单位
正如我们所看到的,db级别在-55没有输入声音时徘徊,只有沉默。如果我用普通的音调在麦克风中录制“你好”,那么db的值就会变成-20左右。我在某处读到平均人类谈话约为20dB,而-3dB至-6dB是麦克风的ZERO值范围。
问题:我正确计算dB值吗? (我使用了其他人在此提出的公式)......为什么dB总是出现负值?我是否缺少关键的概念或机制?
我在codeplex上搜索了nAudio文档,但没有找到答案。在我的观察,文档,需要有更多的解释则只是一堆Q的& A [无意冒犯n音讯:)]
https://en.wikipedia.org/wiki/DBFS –
感谢快速反应之间〜23-25dbm差异。 @Felix Av,我的任务是,如果话筒噪音<10db,显示“低噪音”信息,如果高于10db,则显示“高噪音”信息。只是一个愚蠢的问题,是分配范围是从人的角度给出??? ....因为我从我的程序(麦克风的角度来看所有的负值),我应该如何关联两个dB范围,即我的程序生成范围和分配范围?...非常感谢 – imran2155
我认为,如果沉默水平是X(假设麦克风连接不上,信号是-80db,你可能应该检查水平),那么低噪音就是一切< X + 10,高噪声> X + 10。 –