Estoy reproduciendo archivos .MP3 con Web Audio API y tengo problemas para determinar mediante programación cuándo termina la reproducción de la canción.
Esto es lo que tengo:
var request = new XMLHttpRequest(); audioContext = new AudioContext(); source = audioContext.createBufferSource(); source.connect(audioContext.destination); request.open('GET',url,true); request.responseType='arraybuffer'; request.onload = function() { audioContext.decodeAudioData(request.response).then(function(buffer) { source.buffer = buffer; source.start(0); }); } request.send();
Esto funciona bien; Puedo iniciar, detener, pausar y reanudar una canción sin problemas.
Sin embargo, lo que quiero hacer es cuando una canción deja de reproducirse al finalizar (es decir, no he llamado a audioContext.close()
), quiero llamar a otra función para configurar un mensaje para el usuario. He buscado algún tipo de devolución de llamada que pueda aprovechar, he probado el finally()
de la promise
provista por audioContext.decodeAudioData()
proporciona, pero no he podido resolver esto.
Maneja el evento ended
de tu audioContext
. Consulte AudioScheduledSourceNode: evento finalizado como referencia.
source.addEventListener('ended', () => { // done! });
O usa la propiedad onended
.
source.onended = () => { // done! }