HTML5 comprobar si se está reproduciendo audio?

Respuestas:

152
function isPlaying(audelem) { return !audelem.paused; }

La etiqueta de audio tiene una pausedpropiedad. Si no está en pausa, entonces se está reproduciendo.

Niet the Dark Absol
fuente
Dado que no hay parada, esta es una solución limpia.
Todd Moses
11
¿Y si nunca empezó?
Harry
30
Esta es una respuesta incorrecta. Solo estoy trabajando con él, y antes del primer inicio .paused es falso.
Tomas
2
@Tom, ¿tienes un jsbin? Intenté esto y parece la respuesta correcta.
Harry
3
@Harry Estuve jugando más con él y parece que en algunos navegadores funciona y en otros no. Supongo que depende de la implementación. Pero para todas las actualizaciones más recientes para Chrome y Firefox, parece funcionar, por lo que esta respuesta es correcta para las implementaciones más recientes.
Tomas
44

Puedes comprobar la duración. Se está reproduciendo si la duración es superior a 0 segundos y no está en pausa.

var myAudio = document.getElementById('myAudioID');

if (myAudio.duration > 0 && !myAudio.paused) {

    //Its playing...do your job

} else {

    //Not playing...maybe paused, stopped or never played.

}
Maxali
fuente
2
Personalmente creo que !myAudio.paused||!myAudio.currentTimeharía un mejor trabajo.
m93a
11
@ m93a ¿no te refieres !myAudio.paused || myAudio.currentTime?
MalcolmOcean
5
Sí, debería serlo !myAudio.paused || myAudio.currentTime. Parece que nunca respondí ...
Parte
16

Si bien llegué muy tarde a este hilo, utilizo esta implementación para averiguar si se está reproduciendo el sonido:

service.currentAudio = new Audio();

var isPlaying = function () {
    return service.currentAudio
        && service.currentAudio.currentTime > 0
        && !service.currentAudio.paused
        && !service.currentAudio.ended
        && service.currentAudio.readyState > 2;
}

Creo que la mayoría de las banderas en el elemento de audio son obvias, aparte del estado listo, que puede leer aquí: MDN HTMLMediaElement.readyState .

Hassan Mahmud
fuente
No funciona si iOS pausó automáticamente el audio cuando estaba bloqueado.
shukshin.ivan
13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Debería hacer el truco.

proyectoxmatt
fuente
5

¡Prueba esta función! La reproducción de audio no se ejecutará si la posición es el principio o el final

function togglePause() {
     if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
         myAudio.play();
     } else {
         myAudio.pause();
     }
}
Nidlol Masyhud
fuente
0

Para comprobar si el audio está realmente empezar a jugar, especialmente si usted tiene una corriente, necesidad de comprobar audio.played.lengtha 1. Será 1 solo si el audio es realmente sonidos de inicio. De lo contrario lo será 0. Es más como un truco, pero aún funciona incluso en navegadores móviles, como Safari y Chrome.

Alex Ivasyuv
fuente
0

puedes usar el evento onplay.

var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};

o

var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };
Ricardo Ferreira
fuente
0

Estoy usando este código jquery con el botón de remolque reproducir y detener, el botón de reproducción es un botón de reproducción y posicionamiento

const help_p = new Audio("audio/help.mp3");//Set Help Audio Name
$('#help_play').click(function() {//pause-Play
if (help_p.paused == false) {
  help_p.pause();//pause if playing
} else {
  help_p.play();//Play If Pausing
}
});

$('#help_stop').click(function() {//Stop Button
  help_p.pause();//pause
  help_p.currentTime = 0; //Set Time 0
});
Mohamed Slimane
fuente
-2

Si bien no existe un método llamado isPlaying o algo similar, hay algunas formas de lograrlo.

Este método obtiene el% de progreso mientras se reproduce el audio:

function getPercentProg() {
    var myVideo = document.getElementById('myVideo');
    var endBuf = myVideo.buffered.end(0);
    var soFar = parseInt((endBuf / myVideo.duration) * 100);
    document.getElementById('loadStatus').innerHTML =  soFar + '%';
}

Si el porcentaje es mayor que 0 y menor que 100, se está reproduciendo; de lo contrario, se detiene.

Todd Moisés
fuente
Erm, ¿qué pasa si pause el audio en el medio?
Niet the Dark Absol
1
Entonces no estaría jugando.
Todd Moses
Esto solo detecta la cantidad almacenada en búfer. Si, por ejemplo, el elemento de audio ha comenzado a almacenar datos en búfer pero no ha comenzado a reproducirse porque no tiene suficientes datos, este método aún puede devolver verdadero. O si el elemento tiene datos almacenados en búfer como parte de la reproducción y posteriormente se pausó.
dhasenan
getElementsByTagName ('myVideo')? Creo que debería ser getElementById ('myVideo')
Lucky Soni
2
Em ... ¿Por qué menos? Una gran idea, aunque mal escrita. ¿Cómo puede comprobar si se reproduce audio en tiempo real (WebRTC) con .paused? Solo con verificación de búfer. No merecido menos. Yo voto a favor.
igorpavlov