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.

Niet the Dark Absol
la source
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.

}
Maxali
la source
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 .

Hassan Mahmud
la source
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.

projectxmatt
la source
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();
     }
}
Nidlol Masyhud
la source
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.

Alex Ivasyuv
la source
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 */ };
Ricardo Ferreira
la source
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
});
Mohamed Slimane
la source
-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é.

Todd Moses
la source
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