HTML5 kiểm tra xem âm thanh có đang phát không?


Câu trả lời:


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

Thẻ Âm thanh có một thuộc pausedtính. Nếu nó không bị tạm dừng, thì nó đang phát.


Vì không có điểm dừng nên đây là một giải pháp sạch.
Todd Moses

11
Điều gì sẽ xảy ra nếu nó không bao giờ bắt đầu?
Harry

30
Đây là câu trả lời sai. Tôi chỉ đang làm việc với nó và trước lần bắt đầu đầu tiên. Tạm dừng là sai.
Tomas,

2
@Tom bạn có jsbin? Tôi đã thử điều này và nó có vẻ như là câu trả lời chính xác.
Harry

3
@Harry Tôi đã chơi với nó nhiều hơn và có vẻ như trong một số trình duyệt, nó hoạt động và một số thì không. Tôi đoán nó phụ thuộc vào việc thực hiện. Nhưng đối với tất cả các bản cập nhật mới nhất cho chrome và firefox, nó dường như hoạt động, vì vậy câu trả lời này đúng cho các triển khai mới nhất.
Tomas

44

Bạn có thể kiểm tra thời lượng. Nó đang phát nếu thời lượng hơn 0 giây và nó không bị tạm dừng.

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
Cá nhân tôi tin rằng điều đó !myAudio.paused||!myAudio.currentTimesẽ làm một công việc tốt hơn.
m93a

11
@ m93a ý bạn !myAudio.paused || myAudio.currentTimekhông?
MalcolmOcean

5
Có, nên được !myAudio.paused || myAudio.currentTime. Có vẻ như không bao giờ trả lời lại ...
Parth

16

Mặc dù tôi thực sự muộn với chủ đề này, tôi sử dụng triển khai này để tìm hiểu xem âm thanh có đang phát hay không:

service.currentAudio = new Audio();

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

Tôi nghĩ rằng hầu hết các cờ trên phần tử âm thanh là rõ ràng ngoài trạng thái sẵn sàng mà bạn có thể đọc tại đây: MDN HTMLMediaElement.readyState .


Không hoạt động nếu âm thanh bị iOS tự động tạm dừng khi bị khóa.
shukshin.ivan

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

Nên làm thủ thuật.


5

Hãy thử chức năng này! Phát âm thanh sẽ không được thực hiện nếu vị trí là đầu hoặc cuối

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

0

Để kiểm tra xem âm thanh thực sự bắt đầu chơi, đặc biệt là nếu bạn có một dòng suối, cần phải kiểm tra audio.played.lengthđể 1. Nó sẽ chỉ là 1 nếu âm thanh thực sự là âm thanh bắt đầu. Nếu không sẽ được 0. Nó giống như một cuộc tấn công hơn, nhưng nó vẫn hoạt động ngay cả trong các trình duyệt dành cho thiết bị di động, như Safari và Chrome.


0

bạn có thể sử dụng sự kiện onplay.

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

hoặc là

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

0

đang sử dụng mã jquery này với nút kéo và phát và dừng, nút phát là nút phát và dừng

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

Mặc dù không có phương pháp nào được gọi là isPlaying hoặc thứ gì đó tương tự, nhưng có một số cách để thực hiện điều này.

Phương pháp này nhận% tiến độ khi âm thanh đang phát:

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

Nếu phần trăm lớn hơn 0 và nhỏ hơn 100, nó đang phát, nếu không nó sẽ bị dừng.


Erm, nếu tôi tạm dừng âm thanh ở giữa thì sao?
Niet the Dark Absol

1
Sau đó, nó sẽ không được chơi.
Todd Moses

Điều này chỉ phát hiện số lượng được lưu vào bộ đệm. Ví dụ: nếu phần tử âm thanh đã bắt đầu lưu dữ liệu vào bộ đệm nhưng chưa bắt đầu phát vì không có đủ dữ liệu, phương thức này vẫn có thể trả về true. Hoặc nếu phần tử có dữ liệu được lưu vào bộ đệm như một phần của quá trình phát lại và sau đó bị tạm dừng.
dhasenan

getElementsByTagName ('myVideo')? tôi nghĩ nó phải là getElementById ('myVideo')
Lucky Soni

2
Em ... Tại sao lại nhỏ nhẹ? Một ý tưởng tuyệt vời, mặc dù viết dở. Làm cách nào bạn có thể kiểm tra xem âm thanh thời gian thực (WebRTC) có đang phát với .paused hay không? Chỉ với kiểm tra bộ đệm. Không đáng bị chê bai. Tôi ủng hộ.
igorpavlov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.