0

HTML5 Web Audio API の基本的なスクリプトを書きたいのですが、いくつかのオーディオ ファイルを再生できます。しかし、再生中のオーディオをアンロードして別のオーディオをロードする方法がわかりません。私のスクリプトでは、2 つのオーディオ ファイルが同時に再生されていますが、私が望んでいたものではありません。

これが私のコードです:

var context, 
    soundSource, 
    soundBuffer;

// Step 1 - Initialise the Audio Context
context = new webkitAudioContext();

// Step 2: Load our Sound using XHR
function playSound(url) {
    // Note: this loads asynchronously
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.responseType = "arraybuffer";

    // Our asynchronous callback
    request.onload = function() {
        var audioData = request.response;
        audioGraph(audioData);
    };

    request.send();
}

// This is the code we are interested in
function audioGraph(audioData) {
    // create a sound source
    soundSource = context.createBufferSource();

    // The Audio Context handles creating source buffers from raw binary
    soundBuffer = context.createBuffer(audioData, true/* make mono */);

    // Add the buffered data to our object
    soundSource.buffer = soundBuffer;

    // Plug the cable from one thing to the other
    soundSource.connect(context.destination);

    // Finally
    soundSource.noteOn(context.currentTime);
}

// Stop all of sounds
function stopSounds(){
    // How can do this?
}


// Events for audio buttons
document.querySelector('.pre').addEventListener('click', 
    function () {
        stopSounds();
        playSound('http://thelab.thingsinjars.com/web-audio-tutorial/hello.mp3');
    }
);
document.querySelector('.next').addEventListener('click',
    function() {
        stopSounds();
        playSound('http://thelab.thingsinjars.com/web-audio-tutorial/nokia.mp3');
    }
);
4

1 に答える 1

2

起動時に一度バッファにサウンドをプリロードし、AudioBufferSourceNode再生したいときはいつでもリセットする必要があります。

noteOn(time)複数のサウンドを順番に再生するには、バッファのそれぞれの長さに基づいて、を次々に使用してそれらをスケジュールする必要があります。

音を止めるには、を使用しますnoteOff

基本的なWebオーディオの概念が欠けているようです。これ(およびそれ以上)は詳細に説明されており、このHTML5RocksチュートリアルFAQのサンプルとともに示されています。

于 2012-07-10T15:38:59.287 に答える