我使用Web音频API播放了声音,并使用gainNode更改了音量。当我更改gainNode的值时,分贝仪显示了一个意外的数字。
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的值时是否有任何错误?我想以80 db spl或其他特定数字播放声音,dbfs的值是什么以及如何使gainNode的值?
最佳答案
这种方法的一个缺点是您使用的是正弦波音调。您需要使用粉红噪声,否则房间中的反射可能会大大改变声波的能量。
理想情况下,应该在消声室或自由场中进行测量,以避免反射的干扰。
另一个问题可能是由于您的SPL计不正确或扬声器系统的非线性所致。例如,您的SPL仪表是否已校准?
我强烈建议阅读有关SPL测量的this article。
通常,与声学域(即您的房间,扬声器和麦克风)相比,数字和电气域(即,在您的计算机上以及DAC和放大器内部)的音频线性得多,并且没有失真。我将首先寻找它们的问题,而不是软件的问题。您可以尝试使用REW 作为引用,也可以先将其作为测试声音/麦克风系统的工具。