2012-02-17 15 views
11

別のオーディオが完成した後、html5でいくつかのオーディオを再生するにはどうすればいいですか?HTML5オーディオプレイリスト - 最初のオーディオファイルが終了した後に2番目のオーディオファイルを再生する方法は?

私はjquery delay()機能で試してみましたが、動作しません。タイマー付きhtml5オーディオでpause()を使用することは可能ですか?たとえば、pause('500',function(){});

+0

あなたはこれを試してみました: http://stackoverflow.com/questions/7652031/how-to-find-audio-is-paused-or-track-finished-in-jquery-html5-audio – Laszlo

+0

はい、 delay()ではなく、最初のオーディオファイルの再生後に2番目のオーディオファイルがどうやって再生できるのですか? –

答えて

12

ここJSLinted、控えめなJavascriptの例はendedmediaeventを処理し、使用する方法を示すのです。特定の状況では、endedイベントハンドラの2番目のオーディオファイルの再生をトリガーします。

以下のコードまたはrun the test fiddleを使用することができます。

再生を開始するには、プレイリストの項目をクリックします。 1つのオーディオが終了すると、次のオーディオが開始されます。

マークアップ:(<li>要素間の空白の意図的な回避の点に注意してください - これはnextSiblingでDOMをトラバース簡単にすることである。)

<audio id="player"></audio> 

<ul id="playlist"><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%201%20by%20Lionel%20Allorge.ogg">Space 1</li><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%202%20by%20Lionel%20Allorge.ogg">Space 2</li><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%203%20by%20Lionel%20Allorge.ogg">Space Lab</li></ul> 

<button id="stop">Stop</button> 

スクリプト:

// globals 
var _player = document.getElementById("player"), 
    _playlist = document.getElementById("playlist"), 
    _stop = document.getElementById("stop"); 

// functions 
function playlistItemClick(clickedElement) { 
    var selected = _playlist.querySelector(".selected"); 
    if (selected) { 
     selected.classList.remove("selected"); 
    } 
    clickedElement.classList.add("selected"); 

    _player.src = clickedElement.getAttribute("data-ogg"); 
    _player.play(); 
} 

function playNext() { 
    var selected = _playlist.querySelector("li.selected"); 
    if (selected && selected.nextSibling) { 
     playlistItemClick(selected.nextSibling); 
    } 
} 

// event listeners 
_stop.addEventListener("click", function() { 
    _player.pause(); 
}); 
_player.addEventListener("ended", playNext); 
_playlist.addEventListener("click", function (e) { 
    if (e.target && e.target.nodeName === "LI") { 
     playlistItemClick(e.target); 
    } 
});​ 


​ 
+0

ありがとうLloyd、感謝、しかし、私はul li子emelement domを使用していない、それはbakground(いくつかの小さなゲームのバックグラウンドミュージック)で耳を傾けるのが好きです –

+0

これはあなたのための正確な解決策ではありません問題は(どのようにすることができます、私はあなたのゲームについては何も知りません)..これは、 'terminated'メディアイベントの処理を示す例です - このイベントは、再生が終了したときに起動します。このイベントのハンドラで、2番目のオーディオファイルを再生するコードを記述します。 – Lloyd

+0

更新された回答はデモだけ – Lloyd

0
私はこの答えはあなたを助けると思う

...

html5 audio player - jquery toggle click play/pause?

ので、代わりにあなたが絶えずチェックする今までにあなたがして、より快適に感じるのsetTimeout、またはのsetIntervalを使用する必要がありますクリックしてください.paused==false動画の長さを確認して終了したかどうかを確認し、最大長(=ファイルの最後)と比較することができます。

+0

最初のオーディオ再生後にオーディオを再生するにはどうすればいいですか?それは可能ですか?最初のオーディオが終了したら、2番目のオーディオは再生を続けますか? –

+0

@Valこのメソッドを使って 'ended'イベントに応答する利点はありますか? – Lloyd

+0

私は自分の知識しか提供できません:)私は終了イベントについて知りませんでした。 – Val

9

これはあなたのオーディオタグである場合:

<audio id="player" src="someAudio.mp3"/> 

次に、イベントリスナーt o "終了"イベントの場合は、ソースを変更して次のサウンドを再生することができます。

var audio = document.getElementById("player"); 
audio.addEventListener("ended", function() { 
    audio.src = "nextAudio.mp3"; 
    audio.play(); 
}); 
1

クロムを使用している場合は、現在、オーディオタグの再生を許可していないバグがあることに注意してください。この問題を回避するには、srcをリセットするか、またはプログラムで新しいAudioオブジェクトを作成するだけです。

+0

をクリーンアップ本当にですか?私は毎日Chromeで '

+0

私はそれが音声クリップのバグリストで探している短いクリップ –

+0

にしか影響しないと思っています。http://code.google.com/p/chromium/issues/list?can = 2&q =フィーチャ=メディア - オーディオ&colspec = ID%20Pri%20Mstone%20ReleaseBlock%20Area%20Feature%20Status%20Owner%20Summary – Lloyd

関連する問題