こんにちは、さち です。
今回は、<audio> や <video> 要素を使って指定した時間の範囲(X秒~Y秒)だけを再生する方法について書いていきます。
まえおき
サンプルでは <audio> 要素を使って解説していますが、同じ方法で <video> 要素も操作できます。
両方の要素で使ってみて下さい。
【方法1】 「HTML」だけで実装
HTML だけで実装できるので記述がシンプルで実装が簡単です。
サンプル
0:10~0:15 までを再生するようにしています。
HTML
<audio src="sample.mp3#t=10,15" controls>
このブラウザは audio タグ未対応です
</audio>
音声ファイルのソースの記述の末尾に #t=10,15 を追加することで、0:10~0:15 を再生するように指定しています。
書き方
<audio src="sample.mp3#t=開始時間,終了時間" controls>
このブラウザは audio タグ未対応です
</audio>
src のファイル指定の末尾に #t=開始時間,終了時間 を付け加えます。時間を指定する単位は「秒」です(小数も使える)。
「終了時間」は記述を省略できます。例えば src="sample.mp3#t=10" と記述した場合、再生が 0:10 から開始されて、最後まで再生されます。
【方法2】 「JavaScript」を使って実装
JavaScript を使うため記述が少し複雑になりますが、細かく動作を制御できます。
サンプル
JavaScript を使って 0:10~0:15 までを再生するようにしています。
HTML
<audio src="sample.mp3" controls> このブラウザは audio タグ未対応です </audio>
JavaScript
const audio = document.querySelector('audio');
const start = 10;// 再生の開始時間[秒]
const end = 15;// 再生の終了時間[秒]
// 再生位置を開始時間にする関数
function setStartTime() {
audio.currentTime = start;
}
// 初回用にセット
setStartTime();
// 再生が進むと定期的にイベントが発火する
audio.addEventListener('timeupdate', function() {
// 再生時間が終了時間を超えたら停止する
if(audio.currentTime >= end) {
audio.pause();// 再生を停止
setStartTime();
}
// 再生時間が開始時間より前なら開始時間に移動する
if(audio.currentTime < start) {
setStartTime();
}
});
やっていることとしては、開始時間に移動して再生を開始し、定期的に現在の再生時間を取得、終了時間を超えたら停止するという流れです。
<audio> 要素の currentTime プロパティには現在の再生時間が入っているので、start の値を入れることで再生の開始時間を変更しています。
さらに、addEventListener の timeupdate を使用して、再生時間が進む度にイベントを発火させています。
イベントを使って定期的に currentTime プロパティの値(現在の再生時間)を取得し、終了時間を超えたら pause() メソッドで再生を停止しています。
timeupdate のイベント発火間隔は0.1~0.2秒くらいです。もっと短い間隔にしたいときは、このイベントは使わずに setInterval() メソッドなどを使いましょう。JavaScript によるその他の操作方法
JavaScript による他の操作についてこちらの記事で紹介しているので、参考にしてみて下さい。

使用させて頂いた素材
記事内で使わせて頂いたオーディオはこちらです。ありがとうございました。


コメント