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.

}
Maxali
источник
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); 

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

projectxmatt
источник
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