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.


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.

}

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 .


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.


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

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.


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

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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.