我想實現一個音量計,以幫助用戶使用NAudio來選擇他們的麥克風。我需要盡我所能去除只有背景噪聲的設備,並確保我在說話時顯示某些內容。如何從NAudio的StreamVolumeEventArgs.MaxSampleValues中計算dB?
我們目前在Unity3D應用程序中使用1.7.3版本,因此在崩潰時沒有可用的MMDevice
相關方法。
我使用的是一個WaveInEvent
,我輸入一個WaveInProvider
,隨後輸入SampleChannel
。我將SampleChannel
填入MeteringSampleProvider
,我訂閱了StreamVolume
事件。
在我的OnPostVolumeMeter
事件處理程序,當我收到StreamVolumeEventArgs
(我命名參數e
)我想知道如何計算分貝。我已經看到了大量的例子,它們從e.MaxSampleValues[0]
中剔除了峯值音量(有時似乎被稱爲振幅)。一些示例檢查它是否是立體聲信號,並將抓取最大值在e.MaxSampleValues[0]
或e.MaxSampleValues[1]
之間。
無論如何,這個數字的值是什麼?這是一個百分比嗎?當我對控制檯進行調試時,它們是相對小的小數(10^-3或10^-4)。
是計算類似,
var peak = e.MaxSampleValues[0];
if (e.MaxSampleValues.Length > 1)
{
peak = Mathf.Max(e.MaxSampleValues[0], e.MaxSampleValues[1]);
}
var dB = Mathf.Max(20.0f*Mathf.Log10(peak), -96.0f);
或是否需要通過32768.0分的峯值?如,
var dB = Mathf.Max(20.0f*Mathf.Log10(peak/32768.0f), -96.0f);
是這種方法完全不正確的,我需要收集我做的RMS排序計算的,我計算出的平均值由樣本數除以和的平方根樣本的緩衝全部除以32768並將其輸入到Log10中?
我見過幾次提到看NAudioDemo的AudioPlaybackPanel並將這volumeMeter幅度是e.MaxSampleValues[0]
和e.MaxSampleValues[1]
我還在看這篇[1]維基百科文章,現在我想知道的是我在e.MaxSampleValues []中得到的值是「幅度比」嗎? [1] https://en.wikipedia.org/wiki/Decibel#Absolute_measurements – Scott