AudioBufferSourceNode.loopEnd

loopEndAudioBufferSourceNode インターフェイスのプロパティで、 AudioBuffer の再生が loopStart プロパティで示される時刻にループで戻るオフセットを秒単位で指定する浮動小数点の数値です。 これは loop プロパティが true である場合にのみ使用されます。

各ループがループの最初に戻る(つまり、現在の再生時刻が AudioBufferSourceNode.loopStart にリセットされる)音声バッファー内のオフセットを、秒単位で示した浮動小数点の数値です。このプロパティは loop プロパティが true である場合にのみ使用されます。

既定値は 0 です。

この例では、 AudioContext.decodeAudioData() 関数を使用して音声トラックをデコードし、 AudioBufferSourceNode へ格納しています。音声の再生と停止にはボタンが指定され、playbackRateloopStartloopEnd のプロパティをその場で変更するためにスライダーコントロールが使用されます。

音声を最後まで再生するとループしますが、 loopStartloopEnd を変更することによってループの長さを制御することができます。例えば、それらの値をそれぞれ 20 と 25 に設定し、再生を始めると、 25 秒の位置に到達するまで正常に再生されます。そして、現在の再生位置は 20 秒の位置に戻り、 25 秒の位置まで無限に(少なくとも stop() が呼び出されるまで)再生し続けるループとなります。

メモ: 動作する完全な例は、このコードをライブで実行するか、ソースを表示することができます。.

js
function getData() {
  source = audioCtx.createBufferSource();
  request = new XMLHttpRequest();

  request.open("GET", "viper.ogg", true);

  request.responseType = "arraybuffer";

  request.onload = () => {
    const audioData = request.response;

    audioCtx.decodeAudioData(
      audioData,
      (buffer) => {
        myBuffer = buffer;
        songLength = buffer.duration;
        source.buffer = myBuffer;
        source.playbackRate.value = playbackControl.value;
        source.connect(audioCtx.destination);
        source.loop = true;

        loopstartControl.setAttribute("max", Math.floor(songLength));
        loopendControl.setAttribute("max", Math.floor(songLength));
      },

      (e) => console.error(`Error with decoding audio data: ${e.err}`),
    );
  };

  request.send();
}

// …

loopstartControl.oninput = () => {
  source.loopStart = loopstartControl.value;
  loopstartValue.innerHTML = loopstartControl.value;
};

loopendControl.oninput = () => {
  source.loopEnd = loopendControl.value;
  loopendValue.innerHTML = loopendControl.value;
};

仕様書

Specification
Web Audio API
# dom-audiobuffersourcenode-loopend

ブラウザーの互換性

BCD tables only load in the browser

関連情報