4

オーディオの一時停止機能を作成するにはどうすればよいですか? 以下のスクリプトにはすでに再生機能があります。

http://pastebin.com/uRUQsgbh

function loadSound(url) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.responseType = 'arraybuffer';

    // When loaded decode the data
    request.onload = function() {

        // decode the data
        context.decodeAudioData(request.response, function(buffer) {
            // when the audio is decoded play the sound
            playSound(buffer);
        }, onError);
    }
    request.send();
}

function playSound(buffer) {
    sourceNode.buffer = buffer;
    sourceNode.noteOn(0);
}

しかし、どうすればそれを一時停止または停止できますか?

4

3 に答える 3

12

簡単な答えは、「一時停止することはできません。idbehold が言うように、sourceNode.noteOff(0); を呼び出すことで停止できます」です。

オーディオ ケーブルに「一時停止」ボタンがないのと同じ理由で、一時停止することはできません。一時停止できるレコーダー ノードを実装することもできますが、一時停止を解除しないと、ある時点で大量のデータをバッファリングすることになります。

このシナリオを実装する通常の方法は、再生のどこにいるかを追跡し (たとえば、いつ開始したかを記憶することによって)、一時停止したいときにそのオフセットを記憶し、noteOff(0) を呼び出すことです。再生を再開し、同じバッファを指す新しいノードを作成し、オフセットを指定して noteOnGrain を呼び出します。

于 2013-02-05T19:53:02.800 に答える
4

の問題noteOff(0)は、 が破壊されるため、AudioNodeを使用してオーディオを一時停止することができなくなることです。sourceNode代わりに、オーディオを効果的に一時停止する単純に切断することができます。再生を再開するには、再接続するだけです。あなたのコードはに接続sourceNodeするのでanalyser

function pause() {
    sourceNode.disconnect();
}

function resume() {
    sourceNode.connect(analyser);
}

それが役立つことを願っています!

于 2013-02-04T22:59:30.500 に答える
0

バッファを割り当てる前に、コンテキストを使用できる bufferSource を作成しました。bufferSource を作成するメソッドは、"createBufferSource" => context.createBufferSource です。bufferSource を作成した後、"context.destination" => source.connect(context.destination); を使用して接続を作成しました。すべてです。再生するには、start(0) を最新のブラウザーに使用し、古いブラウザーには noteOn(0) を使用します。

function loadSound() {
   xhr = new XMLHttpRequest();
   xhr.open('GET', url, true);
   xhr.responseType = 'arraybuffer';
   xhr.onload = function () {
       /* Processing response data - xhr.response */
       /* Decoding audio data. */
       var context = new webkitAudioContext();
       context.decodeAudioData(xhr.response, function onSuccess (buffer) {
           if (! buffer) {
               alert('Error decoding file data.');
               return;
           }
           var source = context.createBufferSource(); /* Create SourceNode. */
           source.buffer = buffer; /* buffer variable is data of AudioBuffer type from the decodeAudioData() function. */
           source.connect(context.destination); /* Connect SourceNode to DestinationNode. */
           source.start(0); /* Play sound. */
       }, function onError (error) {
           alert('Error decoding file data.');
       });

   };
    xhr.onerror = function () {
        /* Handling errors */
        console.log('error');
    };
    xhr.send();
}
于 2013-09-12T17:45:08.300 に答える