HTML5 проверить, воспроизводится ли звук?


Ответы:


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

Тег Audio имеет pausedсвойство. Если не поставить на паузу, значит, играет.


Поскольку остановки нет, это чистое решение.
Тодд Мозес,

11
Что, если это так и не начнется?
Гарри

30
Это неправильный ответ. Я как раз работаю с ним, и перед первым запуском .paused ложно.
Tomas

2
@Tom у тебя есть jsbin? Я пробовал это, и мне кажется, что это правильный ответ.
Гарри

3
@Harry Я больше играл с этим, и кажется, что в некоторых браузерах он работает, а в некоторых - нет. Думаю, это зависит от реализации. Но для всех последних обновлений для chrome и firefox, похоже, это работает, поэтому этот ответ верен для последних реализаций.
Tomas

44

Вы можете проверить продолжительность. Он воспроизводится, если продолжительность превышает 0 секунд и не приостанавливается.

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
Лично я считаю, что так !myAudio.paused||!myAudio.currentTimeбудет лучше.
m93a

11
@ m93a ты имеешь в виду !myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
Да, должно быть !myAudio.paused || myAudio.currentTime. Никогда не отвечал, кажется ...
Parth

16

Хотя я очень опаздываю на эту тему, я использую эту реализацию, чтобы выяснить, воспроизводится ли звук:

service.currentAudio = new Audio();

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

Я думаю, что большинство флагов на аудиоэлементе очевидны, за исключением состояния готовности, о котором вы можете прочитать здесь: MDN HTMLMediaElement.readyState .


Не работает, если звук был автоматически приостановлен iOS при блокировке.
shukshin.ivan

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

Должен сделать свое дело.


5

Попробуйте эту функцию! Воспроизведение звука не будет выполняться, если позиция является началом или концом

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

0

Чтобы проверить, действительно ли воспроизводится звук, особенно если у вас есть поток, необходимо проверить audio.played.lengthего 1. Это будет 1, только если звук действительно запускается. Иначе будет 0. Это больше похоже на взлом, но он по-прежнему работает даже в мобильных браузерах, таких как Safari и Chrome.


0

вы можете использовать событие onplay.

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

или

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

0

Я использую этот код jquery с кнопкой воспроизведения и остановки, кнопка воспроизведения - это кнопка воспроизведения и приостановки

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

Хотя не существует метода isPlaying или чего-то подобного, есть несколько способов сделать это.

Этот метод получает% прогресса при воспроизведении звука:

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

Если процент больше 0 и меньше 100, он воспроизводится, иначе он остановлен.


Эээ, а что если я приостановлю звук посередине?
Niet the Dark Absol

1
Тогда бы не играл.
Тодд Мозес,

Это только определяет количество буферизованных. Если, например, элемент audio начал буферизацию данных, но не начал воспроизведение, потому что у него недостаточно данных, этот метод все равно может вернуть true. Или, если элемент буферизовал данные как часть воспроизведения и впоследствии был приостановлен.
dhasenan

getElementsByTagName ('myVideo')? Я думаю, это должно быть getElementById ('myVideo')
Lucky Soni

2
Эм ... Почему минус? Отличная идея, хотя и плохо написанная. Как проверить, воспроизводится ли звук в реальном времени (WebRTC) с .paused? Только с проверкой буфера. Незаслуженный минус. Я голосую за.
igorpavlov 06
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.