2016-08-18 206 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