4

这似乎是一个常见问题 - Javascript Web Audio API AnalyserNode Not Working - 但我不能确定我是否在我的实现中找到了一个边缘案例。

我使用 createMediaElementSource() 创建音频源,但不是使用页面标记中的音频标签,而是使用 Buzz.js 动态创建元素。

这是我的测试设置:

window.addEventListener('load', function(e) {
    audioContext = new webkitAudioContext();
    audioAnalyser = audioContext.createAnalyser();

    sound = new buzz.sound("sound.mp3");
    sound.load().bind("canplaythrough", function(e) {
        source = audioContext.createMediaElementSource(this.sound);
        source.connect(audioAnalyser);

        audioAnalyser.connect(audioContext.destination);

        this.play().loop(); 
    });
}, false);

window.setInterval(function(){
    array = new Uint8Array(audioAnalyser.frequencyBinCount);
    console.log(audioAnalyser.getByteFrequencyData(array));                                           
})    

使用上面的代码,声音就会播放。我还可以附加其他有效的节点(双二阶滤波器、增益等),但 audioAnalyser.getByteFrequencyData 在每一帧上返回未定义的值......

可能与使用 Buzz.js 有关吗?

4

1 回答 1

9

那是理解力的失败……

基本上,我期待控制台从以下内容记录某种输出:

window.setInterval(
    array = new Uint8Array(audioAnalyser.frequencyBinCount);
    console.log(audioAnalyser.getByteFrequencyData(array));                                           
)

我应该做的是:

window.setInterval(function(){
    array = new Uint8Array(audioAnalyser.frequencyBinCount);
    audioAnalyser.getByteFrequencyData(array); 
    console.log(array);                                 
})

有点傻,但我希望这可以帮助任何来这里的人,他们可能期望 getByteFrequencyData 返回某种值。

于 2013-11-17T01:20:51.377 回答