Firefox getByteTimeDomainData在处理oscillatorNode输出时假设最大波幅

时间:2015-05-15 05:51:59

标签: javascript firefox web-audio

下面是一个简单的代码片段,用于演示此问题。

在谷歌浏览器中,将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的实施并获得预期的数据?

我的第一个想法是使用振荡器输出填充音频源,但我不确定这是多么可行,而且看起来不合理的丑陋。

0 个答案:

没有答案