HTML5 vérifie si l'audio est lu?


Réponses:


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

La balise audio a une pausedpropriété. S'il n'est pas mis en pause, c'est qu'il joue.


Puisqu'il n'y a pas d'arrêt, c'est une solution propre.
Todd Moses

11
Et si ça n'avait jamais commencé?
Harry

30
C'est une mauvaise réponse. Je travaille juste avec, et avant le premier démarrage.
Tomas

2
@Tom vous avez un jsbin? J'ai essayé ceci et cela semble être la bonne réponse.
Harry

3
@Harry Je jouais plus avec et il semble que dans certains navigateurs, cela fonctionne et d'autres non. Je suppose que cela dépend de la mise en œuvre. Mais pour toutes les dernières mises à jour pour Chrome et Firefox, cela semble fonctionner, donc cette réponse est correcte pour les dernières implémentations.
Tomas

44

Vous pouvez vérifier la durée. Il est en cours de lecture si la durée est supérieure à 0 seconde et qu'il n'est pas interrompu.

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
Personnellement, je pense que !myAudio.paused||!myAudio.currentTimecela ferait un meilleur travail.
m93a

11
@ m93a tu ne veux pas dire !myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
Oui, ça devrait être !myAudio.paused || myAudio.currentTime. Jamais répondu, il semble ...
Parth

16

Bien que je sois vraiment en retard dans ce fil, j'utilise cette implémentation pour déterminer si le son joue:

service.currentAudio = new Audio();

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

Je pense que la plupart des drapeaux sur l'élément audio sont évidents en dehors de l'état prêt que vous pouvez lire ici: MDN HTMLMediaElement.readyState .


Ne fonctionne pas si l'audio a été automatiquement mis en pause par iOS lorsqu'il est verrouillé.
shukshin.ivan

13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Devrait faire l'affaire.


5

Essayez cette fonction! La lecture audio ne serait pas exécutée si la position est le début ou la fin

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

0

Pour vérifier que le son est vraiment commencer à jouer, surtout si vous avez un flux, besoin de vérifier audio.played.lengthà 1. Ce ne sera 1 que si l'audio est vraiment des sons de démarrage. Sinon le sera 0. C'est plus comme un hack, mais cela fonctionne toujours même dans les navigateurs mobiles, comme Safari et Chrome.


0

vous pouvez utiliser l'événement onplay.

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

ou

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

0

J'utilise ce code jquery avec le bouton de remorquage jouer et arrêter, le bouton de lecture est un bouton de lecture et de pouse

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

Bien qu'il n'y ait pas de méthode appelée isPlaying ou quelque chose de similaire, il existe plusieurs façons d'y parvenir.

Cette méthode obtient le% de progression pendant la lecture de l'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 le pourcentage est supérieur à 0 et inférieur à 100, il est en cours de lecture, sinon il est arrêté.


Euh, et si je mets le son en pause au milieu?
Niet the Dark Absol

1
Alors ça ne jouerait pas.
Todd Moses

Cela détecte uniquement la quantité mise en mémoire tampon. Si, par exemple, l'élément audio a commencé la mise en mémoire tampon des données mais n'a pas commencé à jouer car il ne dispose pas de suffisamment de données, cette méthode peut toujours retourner true. Ou si l'élément a mis des données en mémoire tampon dans le cadre de la lecture et a ensuite été mis en pause.
dhasenan

getElementsByTagName ('myVideo')? Je pense que ça devrait être getElementById ('myVideo')
Lucky Soni

2
Em ... Pourquoi réduire? Une bonne idée, mal écrite cependant. Comment vérifier si l'audio en temps réel (WebRTC) joue avec .paused? Uniquement avec vérification du tampon. Pas mérité moins. Je vote pour.
igorpavlov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.