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.


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.

}

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 .


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.


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

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.


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

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

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


Ä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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.