4

これはよくある質問のようです - Javascript Web Audio API AnalyserNode が機能していません- しかし、私の実装でエッジケースが見つかったかどうかはわかりません。

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 に答える