【问题标题】:HTML 5 Audio - AnalyserNode.getByteFrequencyData() Returns UndefinedHTML 5 音频 - AnalyserNode.getByteFrequencyData() 返回未定义
【发布时间】:2013-11-16 13:56:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    理解失败了……

    基本上,我希望控制台会记录以下内容的某种输出:

    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 返回某种值的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      相关资源
      最近更新 更多