Я использую библиотеку 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);
}
Ниже немного кусок из результате 2second файла WAV, без звука, но только микрофонный шум.
-54,089102453893 в дБ
-51,9171950072361 в дБ
-53,3478098666891 в дБ
-53,1845794096928 в дБ
-53,8851764055102 в дБ
-57,5541358628342 в дБ
-54,0121140454216 в дБ
-55,5204248291508 в дБ
-54.9в дБ
-53.6831017096011 в дБ
-52.8728852678309 в дБ
-55.7021600863786 в дБ
Как мы видим, уровень db колеблется около -55, когда нет входного звука, только тишина. если я сделаю запись «Hello» в микрофоне обычным тоном, значение db будет достигнуто -20 или около того. Я где-то читал, что средний человеческий разговор составляет около 20 дБ, а от -3 дБ до -6 дБ - диапазон значений ZERO для микрофона.
Вопрос: Я правильно вычислил значение дБ? (я использовал формулу, предложенную здесь кем-то другим) ... Почему дБ всегда появляется отрицательно? Мне не хватает принципиальной концепции или механизма?
Я искал документацию nAudio в кодексе и не нашел ответа. По моим наблюдениям, документация там должна быть более объяснительной, а затем просто связкой Q & A [no offense nAudio :)]
https://en.wikipedia.org/wiki/DBFS –
Спасибо за быстрый ответ. @Felix Av, мое задание говорит, что если микрофонный шум <10 дБ, отобразите сообщение с низким уровнем шума, а если выше 10 дБ, отобразите сообщение «высокий уровень шума». просто глупый вопрос, диапазон заданий дается с точки зрения человека ??? .... поскольку я получаю все значения отрицательными от моей программы (перспектива микрофона), как мне сопоставить два диапазона дБ, т.е. моя программа диапазон генерации и диапазон присвоения? ... спасибо большое – imran2155
Я думаю, если уровень тишины X (скажем, микрофон даже не подключен, а сигнал -80db, вы, вероятно, должны проверить уровень), то низкий уровень шума - это все < X + 10, высокий уровень шума> X + 10. –