HTML5 memeriksa apakah audio sedang diputar?

Jawaban:

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

Tag Audio memiliki pausedproperti. Jika tidak dihentikan sebentar, maka itu sedang diputar.

Niet the Dark Absol
sumber
Karena tidak ada henti ini adalah solusi yang bersih.
Todd Moses
11
Bagaimana jika tidak pernah dimulai?
Harry
30
Ini jawaban yang salah. Saya hanya mengerjakannya, dan sebelum permulaan pertama .pause is false.
Tomas
2
@Tom Anda memiliki jsbin? Saya mencoba ini dan sepertinya jawaban yang benar.
Harry
3
@Harry Saya lebih sering bermain-main dengannya dan sepertinya di beberapa browser itu berfungsi dan ada yang tidak. Saya kira itu tergantung pada implementasi. Tetapi untuk semua pembaruan terbaru untuk chrome dan firefox tampaknya berfungsi, jadi Jawaban ini benar untuk implementasi terbaru.
Tomas
44

Anda dapat memeriksa durasinya. Sedang diputar jika durasinya lebih dari 0 detik dan tidak dihentikan sementara.

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
sumber
2
Secara pribadi saya percaya itu !myAudio.paused||!myAudio.currentTimeakan melakukan pekerjaan yang lebih baik.
m93a
11
@ m93a bukan maksudmu !myAudio.paused || myAudio.currentTime?
MalcolmOcean
5
Ya, seharusnya !myAudio.paused || myAudio.currentTime. Tidak pernah membalas kembali sepertinya ...
Parth
16

Meskipun saya sangat terlambat ke utas ini, saya menggunakan implementasi ini untuk mencari tahu apakah suaranya diputar:

service.currentAudio = new Audio();

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

Saya rasa sebagian besar tanda pada elemen audio sudah jelas terlepas dari status siap yang dapat Anda baca di sini: MDN HTMLMediaElement.readyState .

Hassan Mahmud
sumber
Tidak berfungsi jika audio dijeda secara otomatis oleh iOS saat terkunci.
shukshin.ivan
13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Harus melakukan trik.

projectxmatt
sumber
5

Coba fungsi ini! Pemutaran audio tidak akan dijalankan jika posisinya di awal atau di akhir

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

Untuk memeriksa apakah audio benar-benar mulai bermain, terutama jika Anda memiliki sungai, perlu untuk memeriksa audio.played.lengthke 1. Ini akan menjadi 1 hanya jika audio benar-benar mulai berbunyi. Jika tidak akan 0. Ini lebih seperti peretasan, tetapi masih berfungsi bahkan di browser seluler, seperti Safari dan Chrome.

Alex Ivasyuv
sumber
0

Anda bisa menggunakan acara onplay.

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

atau

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

Saya menggunakan kode jquery ini dengan tombol putar dan berhenti, tombol putar adalah tombol putar dan putar

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

Meskipun tidak ada metode yang disebut isPlaying atau yang serupa, ada beberapa cara untuk melakukannya.

Metode ini mendapatkan% kemajuan saat audio diputar:

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

Jika persen lebih besar dari 0 dan kurang dari 100, itu diputar, jika tidak maka dihentikan.

Todd Moses
sumber
Erm, bagaimana jika saya menghentikan audio di tengah?
Niet the Dark Absol
1
Maka itu tidak akan dimainkan.
Todd Moses
Ini hanya mendeteksi jumlah buffer. Jika, misalnya, elemen audio telah mulai melakukan buffering data tetapi belum mulai diputar karena tidak memiliki cukup data, metode ini masih dapat menampilkan true. Atau jika elemen memiliki data buffer sebagai bagian dari pemutaran dan selanjutnya dijeda.
dhasenan
getElementsByTagName ('myVideo')? saya pikir itu harus getElementById ('myVideo')
Lucky Soni
2
Em ... Kenapa minus? Ide bagus, tapi tulisannya buruk. Bagaimana Anda bisa memeriksa apakah audio realtime (WebRTC) diputar dengan .paused? Hanya dengan pemeriksaan buffer. Tidak pantas dikurangi. Saya suka.
igorpavlov