我使用网络音频API播放声音,并使用gainNode更改音量。当我改变gainNode的值时,Decibel仪表显示的数字不是预期的。
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的值?
答案 0 :(得分:0)
你的方法的一个缺陷是你正在使用正弦波音调。您需要使用粉红噪声,否则房间内的反射可能会显着改变声波产生的能量。
理想情况下,您应该在消声室或自由场进行测量,以避免反射干扰。
另一个问题可能是由于SPL表的不准确或扬声器系统的非线性。例如,您的SPL仪表是否已校准?
我强烈建议您阅读有关SPL测量的this article。
通常,数字和电子领域(即计算机内部以及DAC和放大器内部)的音频比声学领域(即您的房间,扬声器和麦克风)更加线性且无失真),所以我会先找他们而不是用软件来解决问题。您可以尝试使用REW 作为参考,也可以尝试首先测试您的声音/麦克风系统。