Благодаря тегу <audio>, появившемуся в HTML5, можно очень просто добавлять звук на сайт. В javascript работать со звуком позволяет соответствующий класс Audio, а проверить поддержку формата звукового файла в браузере - метод canPlayType.
Доступ к audio в javascript
Если в HTML есть тег <audio>, доступ к соответствующему объекту Audio можно получить через имя тега
var audio = document.getElementsByTagName('audio')[index];
или через id
var audio = document.getElementById('my-audio-id');
Объект Audio также можно создать в js.
Создание объекта Audio в javascript
var aud = new Audio();
aud.src = 'sound.ogg';
//или
var aud = new Audio('sound.ogg');
или
$('audio').attr('src', 'audio_file.mp3')
*** Используется один из поддерживаемых форматов (mp3, wav, ogg)
Воспроизведение звука и пауза:
myaudio.play(); //воспроизведение звука myaudio.pause(); // пауза // после паузы воспроизведение продолжится с места остановки myaudio.play();
Как остановить воспроизведение audio
Команды stop нет, и чтобы остановить воспроизведение звукового файла, нужно два действия - пауза и задание нулевого значения для свойства currentTime- текущее время:
// Функция stop для Audio:
HTMLAudioElement.prototype.stop = function()
{
this.pause();
this.currentTime = 0.0;
}
...
myaudio.stop(); // использование
События audio
loadeddata - данные загружены
Используем событие loadeddata , чтобы начать воспроизведение большого звукового файла после окончания загрузки:
var loaded = false;
var aud = new Audio();
aud.addEventListener('loadeddata', function() {
loaded = true;
aud.play();
}, false);
aud.src = 'background.ogg';
Обработчик события окончания загрузки записан раньше, т.к. он должен быть доступен во время загрузки файла, которая начинается сразу после задания src.
error - обработка ошибки загрузки
aud.addEventListener('error' , function() {
alert('ошибка загрузки файла');
}, false);
aud.src = 'nofile.ogg';
ended - окончание воспроизведения
<span id="thesimbol" >▶ </span>
<script language="javascript">
document.getElementById("thesimbol").onclick = function(){
var audio = new Audio();
audio.src ="myaudio.mp3";
audio.play();
// циклический повтор после паузы 2 сек
audio.addEventListener('ended', function() {
setTimeout(() => audio.play(), 2000);
});
}
</script>
Длительность звукового файла
var audio = document.createElement('audio');
audio.src = 'mus3.mp3';
var time = audio.duration; // time=NaN
Свойство duration может быть недоступно, если не завершена загрузка метаданных, правильно:
audio.addEventListener('loadedmetadata', function() {
time = audio.duration;
});
Cj,Изменение скорости воспроизведения ratechange
const video = document.querySelector('video');
audio.addEventListener('ratechange', (event) => {
console.log('The playback rate changed.');
});
// или
audio.onratechange = (event) => {
console.log('The playback rate changed.');
};
Изменение свойств audio
Свойство playbackRate позволяет изменять скорость воспроизведения звука
- =1 по умолчанию
- положительное число меньше 1 - замедление
- больше 1 - ускорение
// замедление воспроизведения в 2 раза audio.playbackRate = 0.5; audio.play();
defaultPlaybackRate - устанавливает или возвращает скорость воспроизведения аудио/видео по умолчанию
Используем свойство muted - кнопки включения и выключения звука на странице:
<html> <body> <input type="button" onclick="aud.muted=true" value="Выключить" /> <input type="button" onclick="aud.muted=false" value="Включить" /> </body> </html>
Хотелось бы выключать фоновый звук, когда посетитель сайта переключается на другое окно или вкладку браузера. Важно, что выражение muted=true сработает, если будет выполняться после завершения загрузки звукового файла, т.е. его следует поместить в обработчик события loadeddata:
var loaded = false;
var aud = new Audio();
aud.addEventListener('loadeddata', function() {
aud.muted = true;
}, false);
aud.src = 'background.ogg';
aud.play();
played Возвращает объект TimeRanges, представляющий воспроизводимые части аудио/видео
startDate Возвращает объект Date, представляющий текущее смещение времени
currentTime Устанавливает или возвращает текущую позицию воспроизведения в аудио/видео (в секундах)
paused Возвращает, приостановлено ли аудио/видео или нет
Поддержка элемента Audio и форматов звуковых файлов
Для проверки поддержки форматов звуковых файлов браузером используется метод canPlayType с параметром текстовым значением MIME-типа.
audio.canPlayType('audio/ogg');
Можно явно указать кодек:
audio.canPlayType('audio/ogg; codecs="vorbis"');
canPlayType возвращает одно из 3 значений:
- probably - наверное
- maybe - может быть
- "" (пустая строка) - формат не поддерживается
Пример проверки поддержки формата mp3
Можете проверить, Opera не поддерживает формата mp3
var audio = new Audio();
var canPlayMmp3 = !!audio.canPlayType && audio.canPlayType('audio/mp3') != "";
if(!canPlayMmp3) {
document.write('mp3 не поддерживается!<br />');
}
*** "!!" преобразует объект строки в логический тип
Пример проверки поддержки audio и форматов файлов
<script>
function check_audio() {
var elem = document.createElement('audio'), bool = false;
try {
if ( bool = !!elem.canPlayType ) {
bool = new Boolean(bool);
bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
bool.mp3 = elem.canPlayType('audio/mpeg;').replace(/^no$/,'');
bool.wav = elem.canPlayType('audio/wav; codecs="1"').replace(/^no$/,'');
bool.m4a = (elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;')).replace(/^no$/,'');
}
}
catch(e) {
}
return bool;
}
var b = check_audio();
if(!b) {
document.write('Audio не поддерживается');
}
else {
var formats = ['ogg', 'mp3', 'wav', 'm4a'];
for(var i = 0; i < formats.length; i++) {
document.write(formats[i] + ' - ' + b[formats[i]] + '<br />');
}
}
</script>
Если функция check_audio возвращает false, браузер не поддерживает элемент audio. Если элемент audio поддерживается, проверяется возможность использования форматов файлов ogg, mpeg, wav и m4a.