下面是一个简单的代码片段,用于演示此问题。
在谷歌浏览器中,将gainNode.gain.value
设置为极低的值(如0.01)将导致所有getByteTimeDomainData
数据保持相对接近128,如预期的那样。
但是,在Firefox中,将gainNode.gain.value
设置为高于0的任何值都会导致值在0到255之间变化,就好像信号尽可能大。
var ctx = (new AudioContext() || new webkitAudioContext());
var oscillator = ctx.createOscillator();
var gainNode = ctx.createGain();
var analyser = ctx.createAnalyser();
var processor = ctx.createScriptProcessor(2048,1,1);
window.waveData = new Uint8Array(analyser.frequencyBinCount);
oscillator.type = 'sine';
oscillator.frequency.value = 440;
oscillator.start();
gainNode.gain.value = 0.01;
processor.onaudioprocess = function(){
analyser.getByteTimeDomainData(waveData);
console.log(waveData[0]);
};
oscillator.connect(gainNode);
gainNode.connect(analyser);
analyser.connect(processor);
processor.connect(ctx.destination);
在Firefox中是否有任何解决方法可以“模仿”Chrome的实施并获得预期的数据?
我的第一个想法是使用振荡器输出填充音频源,但我不确定这是多么可行,而且看起来不合理的丑陋。