Sprawdź HTML5, czy dźwięk jest odtwarzany?


Odpowiedzi:


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

Znacznik audio ma pausedwłaściwość. Jeśli nie jest wstrzymany, to gra.


Ponieważ nie ma przystanku, jest to czyste rozwiązanie.
Todd Moses,

11
A jeśli to się nigdy nie zaczęło?
Harry

30
To jest zła odpowiedź. Po prostu nad tym pracuję i przed pierwszym uruchomieniem .paused jest fałszywe.
Tomas

2
@Tom masz jsbin? Próbowałem tego i wydaje się, że jest to prawidłowa odpowiedź.
Harry,

3
@Harry Bardziej się tym bawiłem i wygląda na to, że w niektórych przeglądarkach to działa, a inne nie. Myślę, że to zależy od implementacji. Ale w przypadku wszystkich najnowszych aktualizacji Chrome i Firefox wydaje się działać, więc Ta odpowiedź jest poprawna dla najnowszych implementacji.
Tomas

44

Możesz sprawdzić czas trwania. Odtwarza, jeśli czas trwania jest dłuższy niż 0 sekund i nie jest wstrzymywany.

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
Osobiście uważam, że to !myAudio.paused||!myAudio.currentTimebyłoby lepsze.
m93a

11
@ m93a nie masz na myśli !myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
Tak, powinno !myAudio.paused || myAudio.currentTime. Wydaje się, że nigdy nie odpowiedziałem ...
Parth

16

Chociaż jestem naprawdę spóźniony na ten wątek, używam tej implementacji, aby dowiedzieć się, czy dźwięk jest odtwarzany:

service.currentAudio = new Audio();

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

Myślę, że większość flag na elemencie audio jest oczywista poza stanem gotowości, o którym możesz przeczytać tutaj: MDN HTMLMediaElement.readyState .


Nie działa, jeśli dźwięk został automatycznie wstrzymany przez iOS po zablokowaniu.
shukshin.ivan

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

Powinien załatwić sprawę.


5

Wypróbuj tę funkcję! Odtwarzanie dźwięku nie zostanie wykonane, jeśli pozycja jest początkiem lub końcem

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

0

Aby sprawdzić, czy dźwięk jest naprawdę zacząć grać, zwłaszcza jeśli masz strumień, potrzeba sprawdzenia audio.played.lengthsię 1. Będzie 1 tylko wtedy, gdy dźwięk jest naprawdę dźwiękami początkowymi. W przeciwnym razie będzie 0. To bardziej przypomina włamanie, ale nadal działa nawet w przeglądarkach mobilnych, takich jak Safari i Chrome.


0

możesz skorzystać z wydarzenia onplay.

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

lub

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

0

Używam tego kodu jQuery z przyciskiem holowania odtwórz i zatrzymaj, przycisk odtwórz to przycisk odtwórz i 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

Chociaż nie ma metody o nazwie isPlaying lub podobnej, można to osiągnąć na kilka sposobów.

Ta metoda uzyskuje% postępu podczas odtwarzania dźwięku:

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

Jeśli procent jest większy niż 0 i mniejszy niż 100, gra, w przeciwnym razie jest zatrzymywany.


Eee, a co jeśli wstrzymam dźwięk w środku?
Niet the Dark Absol

1
Wtedy nie grałby.
Todd Moses,

To tylko wykrywa zbuforowaną kwotę. Jeśli na przykład element audio zaczął buforować dane, ale nie zaczął odtwarzać, ponieważ nie ma wystarczającej ilości danych, ta metoda może nadal zwracać wartość true. Lub jeśli element zbuforował dane w ramach odtwarzania, a następnie został wstrzymany.
dhasenan

getElementsByTagName („myVideo”)? Myślę, że powinno to być getElementById ('myVideo')
Lucky Soni

2
Em ... Dlaczego minus? Świetny pomysł, choć źle napisany. Jak sprawdzić, czy dźwięk w czasie rzeczywistym (WebRTC) jest odtwarzany z .paused? Tylko ze sprawdzaniem bufora. Nie zasłużył na minus. Głosuję za.
igorpavlov
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.