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.


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.

}

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 .


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.


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();
     }
}

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.


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 */ };

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
});

-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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.