HTML5 prüfen, ob Audio abgespielt wird?

Antworten:

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

Das Audio-Tag hat eine pausedEigenschaft. Wenn es nicht angehalten ist, wird es abgespielt.

Niet the Dark Absol
quelle
Da es kein Ende gibt, ist dies eine saubere Lösung.
Todd Moses
11
Was ist, wenn es nie angefangen hat?
Harry
30
Das ist eine falsche Antwort. Ich arbeite nur damit und vor dem ersten Start ist .paused falsch.
Tomas
2
@ Tom hast du einen jsbin? Ich habe es versucht und es scheint die richtige Antwort zu sein.
Harry
3
@ Harry Ich habe mehr damit herumgespielt und es scheint, dass es in einigen Browsern funktioniert und in einigen nicht. Ich denke, es hängt von der Implementierung ab. Aber für alle neuesten Updates für Chrome und Firefox scheint es zu funktionieren, daher ist diese Antwort für die neuesten Implementierungen korrekt.
Tomas
43

Sie können die Dauer überprüfen. Es wird abgespielt, wenn die Dauer mehr als 0 Sekunden beträgt und nicht angehalten wird.

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
quelle
2
Persönlich glaube ich, dass !myAudio.paused||!myAudio.currentTimedas einen besseren Job machen würde.
M93a
11
@ m93a meinst du nicht !myAudio.paused || myAudio.currentTime?
MalcolmOcean
5
Ja sollte sein !myAudio.paused || myAudio.currentTime. Nie geantwortet, wie es scheint ...
Parth
16

Während ich zu spät zu diesem Thread komme, benutze ich diese Implementierung, um herauszufinden, ob der Sound abgespielt wird:

service.currentAudio = new Audio();

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

Ich denke, die meisten Flags auf dem Audioelement sind offensichtlich, abgesehen von dem Bereitschaftszustand, über den Sie hier lesen können: MDN HTMLMediaElement.readyState .

Hassan Mahmud
quelle
Funktioniert nicht, wenn Audio von iOS beim Anhalten automatisch angehalten wurde.
Shukshin.ivan
13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Sollte den Trick machen.

projectxmatt
quelle
5

Probieren Sie diese Funktion aus! Die Audiowiedergabe wird nicht ausgeführt, wenn die Position der Anfang oder das Ende ist

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

Um zu überprüfen , ob Audio wirklich abgespielt wird beginnen, vor allem , wenn Sie einen Stream haben, müssen überprüfen audio.played.lengthzu 1. Es wird nur 1 sein, wenn Audio wirklich Startsounds ist. Sonst wird es sein 0. Es ist eher wie ein Hack, aber das funktioniert auch in mobilen Browsern wie Safari und Chrome.

Alex Ivasyuv
quelle
0

Sie können das Onplay-Ereignis verwenden.

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

oder

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

Ich verwende diesen Abfragecode mit zwei Tasten zum Abspielen und Stoppen. Die Wiedergabetaste ist eine Wiedergabe- und Pouse-Taste

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
quelle
-2

Obwohl es keine Methode namens isPlaying oder ähnliches gibt, gibt es einige Möglichkeiten, dies zu erreichen.

Diese Methode ermittelt den Prozentsatz des Fortschritts während der Audiowiedergabe:

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 + '%';
}

Wenn Prozent größer als 0 und kleiner als 100 ist, wird abgespielt, andernfalls wird es gestoppt.

Todd Moses
quelle
Ähm, was ist, wenn ich den Ton in der Mitte pausiere?
Niet the Dark Absol
1
Dann würde es nicht spielen.
Todd Moses
Dies erkennt nur die gepufferte Menge. Wenn das Audioelement beispielsweise mit dem Puffern von Daten begonnen hat, aber nicht mit der Wiedergabe begonnen hat, weil es nicht über genügend Daten verfügt, kann diese Methode dennoch true zurückgeben. Oder wenn das Element im Rahmen der Wiedergabe Daten gepuffert hat und anschließend angehalten wurde.
Dhasenan
getElementsByTagName ('myVideo')? Ich denke, es sollte getElementById ('myVideo') sein
Lucky Soni
2
Em ... Warum minusen? Eine großartige Idee, aber schlecht geschrieben. Wie können Sie überprüfen, ob Echtzeit-Audio (WebRTC) mit .paused abgespielt wird? Nur mit Pufferprüfung. Nicht verdient Minus. Ich stimme zu.
Igorpavlov