HTML 5 Audio - AnalyserNode.getByteFrequencyData()返回Undefined

时间:2013-11-16 13:56:09

标签: javascript audio html5-audio webkitaudiocontext buzz.js

这似乎是一个常见问题 - 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有关吗?

1 个答案:

答案 0 :(得分:6)

理解失败......

基本上,我期望控制台记录以下某种输出:

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返回somekind的值。