2016-08-18 73 views
1

我使用網絡音頻API播放聲音,並使用gainNode更改音量。當我改變增益節點的值時,分貝計顯示的數字不是預期的。如何校準dbfs到db spl?

context.createGain(); 
var source=context.createOscillator(); 
source.frequency.value=1000; 
source.start(); 
source.connect(gainNode); 
gainNode.connect(context.destination); 

gainNode.gain.value=Math.pow(10, dbfs/20)); 

when dbfs=0,the Decibel meter showed 90 dbspl; 
when dbfs=-10,the Decibel meter showed 84 dbspl; 
when dbfs=-20,the Decibel meter showed 78 dbspl; 
when dbfs=-30,the Decibel meter showed 72 dbspl; 
when dbfs=-40,the Decibel meter showed 62 dbspl; 
when dbfs=-50,the Decibel meter showed 52 dbspl; 

實際體積如預期沒有改變,在那裏在生成gainNode值的任何錯誤?我想播放80db spl或其他特定數字的聲音,dbfs的價值以及如何增加gainNode的價值?

回答

0

你的方法的一個缺陷是你正在使用正弦波音調。你需要使用粉紅色的噪音,否則你房間裏的反射可能會顯着改變聲波產生的能量。

理想情況下,您應該在消聲室或自由場中進行測量,以避免反射的干擾。

另一個問題可能是由於您的聲壓級測量儀的不準確或您的揚聲器系統的非線性。例如,您的SPL儀表是否已經過校準?

我強烈建議閱讀this article關於聲壓級測量。一般來說,數字和電子領域(即,在您的計算機以及DAC和放大器內部)的音頻比聲學領域(即您的房間,揚聲器和揚聲器)更線性且沒有失真。麥克風),所以我會先找他們的問題,而不是用軟件。您可以嘗試使用REW作爲參考,也可以作爲首先測試您的聲音/麥克風系統的工具。

+0

非常感謝您的回覆。使用正弦波的原因是我真正的需求,我需要播放不同頻率的聲音來測試某人的聽力水平。在那種情況下,我用iphone6上運行的應用程序作爲分貝計,並使用thinkpad x201作爲揚聲器。 iphone6離揚聲器10cm遠,聲音播放時db值非常穩定。除了所有的inpact,如果我的代碼在理想條件下運行,當dbfs減少1db時,dbspl會減少1db嗎? – user6731513

+0

我建議從粉紅色噪聲開始反正它是否有幫助。如果是這樣,那麼它的確是關於你所擁有的思考。順便說一句,如果你說麥克風距離10cm遠 - 他們是在桌面還是類似的東西?這會產生很多反思。儘量至少將設備放在支架上,以確保沒有足夠接近聲音路徑的反射表面。 –

+0

非常感謝你,你的觀點沒問題,我的環境不夠好做測試 – user6731513