AudioBufferSourceNode.loopEnd
loopEnd
は AudioBufferSourceNode
インターフェイスのプロパティで、 AudioBuffer
の再生が loopStart
プロパティで示される時刻にループで戻るオフセットを秒単位で指定する浮動小数点の数値です。
これは loop
プロパティが true
である場合にのみ使用されます。
値
各ループがループの最初に戻る(つまり、現在の再生時刻が AudioBufferSourceNode.loopStart
にリセットされる)音声バッファー内のオフセットを、秒単位で示した浮動小数点の数値です。このプロパティは loop
プロパティが true
である場合にのみ使用されます。
既定値は 0 です。
例
この例では、 AudioContext.decodeAudioData()
関数を使用して音声トラックをデコードし、 AudioBufferSourceNode
へ格納しています。音声の再生と停止にはボタンが指定され、playbackRate
、loopStart
、loopEnd
のプロパティをその場で変更するためにスライダーコントロールが使用されます。
音声を最後まで再生するとループしますが、 loopStart
と loopEnd
を変更することによってループの長さを制御することができます。例えば、それらの値をそれぞれ 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