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.

Niet the Dark Absol
źródło
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.

}
Maxali
źródło
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 .

Hassan Mahmud
źródło
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ę.

projectxmatt
źródło
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();
     }
}
Nidlol Masyhud
źródło
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.

Alex Ivasyuv
źródło
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 */ };
Ricardo Ferreira
źródło
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
});
Mohamed Slimane
źródło
-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.

Todd Moses
źródło
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