Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 audio ended function [duplicate]

Possible Duplicate:
HTML5 audio element with dynamic source

I'm trying to get the player to reload a new track once the current one ends, but I think I might have done something wrong.

This is the player:

<audio id="audio" autoplay controls="controls" onclick="start()">
<source src="song.php" type="audio/mpeg" />
</audio>

Here's the script:

function start(){
    var audio = document.getElementById('audio');
    audio.play();
    audio.addEventListener('ended',function(){
        $.post("song.php", function(result){
        audio.src = result;
        audio.pause();
        audio.load();
        audio.play();
    });
    });
}

If I change the script to this, it works...but I don't want to reload the whole page:

function start(){
    var audio = document.getElementById('audio');
    audio.play();
    audio.addEventListener('ended',function(){
        window.location = 'player.html';
    });
}
like image 363
austinh Avatar asked Jan 11 '13 03:01

austinh


1 Answers

For starters, you are attaching a new event handler every single time the element is clicked. If someone frequently pauses the music, they will run into problems.

Intead, try this:

<audio id="audio" autoplay controls src="song.php" type="audio/mpeg"></audio>
<script type="text/javascript">
    document.getElementById('audio').addEventListener("ended",function() {
        this.src = "song.php?nocache="+new Date().getTime();
        this.play();
    });
</script>

I'm assuming that song.php is a PHP file that returns the audio data. The nocache query parameter will ensure that the file is actually called every time.

like image 60
Niet the Dark Absol Avatar answered Oct 23 '22 19:10

Niet the Dark Absol