Как вставить аудио
Укажите элементу <audio> звуковой файл и добавьте controls:
<audio src="song.mp3" controls></audio>
controls показывает плеер браузера: воспроизведение и пауза, шкала времени, время и регулятор громкости. Без controls элемент вообще не занимает места. Превью не может загружать файлы с вашего компьютера, поэтому этот пример создает скриптом короткий файл WAV прямо в браузере и использует его как src. Нажмите воспроизведение:
В Chrome, Firefox и Safari плеер выглядит по-разному, потому что каждый браузер рисует свой. Удалите controls, и плеер исчезнет, хотя аудио по-прежнему доступно для воспроизведения из JavaScript.
Атрибуты audio
| Атрибут | Что делает |
|---|---|
controls | Показывает плеер браузера |
autoplay | Пытается начать воспроизведение при загрузке (со звуком блокируется, см. ниже) |
loop | Начинает сначала, когда файл заканчивается |
muted | Запускает с выключенной громкостью |
preload | none (ничего не скачивать до воспроизведения), metadata (только длительность) или auto (решает браузер) |
src | Файл для воспроизведения; или используйте дочерние <source> для нескольких форматов |
Используйте preload="none" или "metadata" на страницах с множеством плееров, например в списке выпусков подкаста, чтобы страница не скачивала заранее каждый файл.
Форматы и запасные варианты
Перечислите несколько файлов в <source>, и браузер воспроизведет первый поддерживаемый. Текст внутри элемента показывается только в браузерах без поддержки <audio>:
<audio controls preload="metadata">
<source src="episode.opus" type="audio/ogg; codecs=opus">
<source src="episode.mp3" type="audio/mpeg">
<p>Your browser cannot play audio. <a href="episode.mp3">Download the episode</a>.</p>
</audio>
| Формат | MIME-тип | Примечания |
|---|---|---|
| MP3 | audio/mpeg | Воспроизводится во всех современных браузерах; надежный выбор, если файл один |
AAC (.m4a) | audio/mp4 | Широко поддерживается, хорошее качество при небольшом размере |
Opus или Vorbis (.ogg, .webm) | audio/ogg, audio/webm | Небольшие файлы; добавьте MP3 как запасной вариант, потому что поддержка в Safari зависит от версии |
| WAV | audio/wav | Без сжатия и большой; подходит для коротких звуковых эффектов |
Почему не работает autoplay
Браузеры не позволяют странице самой начинать издавать звук. autoplay или вызов play() до того, как пользователь кликнул или коснулся экрана, отклоняется. Этот пример пытается воспроизвести звук при загрузке, выводит результат, а затем предлагает кнопку:
Обычно вы увидите NotAllowedError, ошибку, которую браузер выдает, когда блокирует воспроизведение. Кнопка работает, потому что клик считается разрешением. У каждого браузера есть свои дополнительные правила (Chrome, например, запоминает сайты, где вы часто воспроизводите медиа), поэтому никогда не полагайтесь на autoplay: запускайте звук по действию пользователя и всегда обрабатывайте промис, который возвращает play().
new Audio(url) создает элемент audio в JavaScript, не добавляя его на страницу, и это удобно для звуковых эффектов.
Собственные элементы управления
Скройте встроенный плеер, не указывая controls, а затем управляйте элементом через его JavaScript API: play(), pause(), currentTime, duration, volume и события вроде timeupdate и ended:
Кнопка это настоящий <button>, поэтому она работает с клавиатуры, а ее подпись переключается между Play и Pause. В конце файла браузер ставит элемент на паузу и вызывает ended, поэтому кнопка сама возвращается к Play. Если вы делаете свои элементы управления, то берете на себя и то, что встроенные давали бесплатно: поддержку клавиатуры, подписи и регулятор громкости.
Доступность
- Никогда не запускайте звук сами. Он прерывает программы чтения с экрана и пугает людей. Запускайте аудио по клику.
- Предлагайте расшифровку для подкастов и устной речи. Достаточно ссылки на текстовую версию под плеером, и поисковики смогут ее прочитать.
- Оставляйте
controlsили делайте элементы управления из настоящих кнопок, чтобы аудио можно было поставить на паузу с клавиатуры.
Про видео со звуком, субтитры и постеры читайте на странице видео в HTML; у <audio> большая часть атрибутов и весь JavaScript API такие же.
Частые ошибки
- Забытый
controls. Без него элемент невидим, и кажется, что ничего не произошло. - Ожидание, что
autoplayсработает. Запускайте воспроизведение по клику и обрабатывайте промис отplay(). - Неправильный путь или тип файла. Откройте URL файла напрямую, чтобы проверить его, и указывайте
typeв соответствии с реальным форматом (audio/mpegдля MP3). - Загрузка каждого файла в длинном списке. Используйте
preload="none"или"metadata". - Фоновая музыка, которую нельзя остановить. Всегда давайте видимый способ поставить на паузу.
Часто задаваемые вопросы
Как добавить аудио на HTML-страницу?
Используйте <audio src="song.mp3" controls></audio>. Атрибут controls показывает плеер браузера с кнопкой воспроизведения, шкалой времени и громкостью. Без него элемент невидим.
Почему аудио не воспроизводится автоматически?
Браузеры блокируют аудио, которое начинается со звуком до того, как пользователь взаимодействовал со страницей. Запускайте воспроизведение по клику через audio.play(). Беззвучный элемент может воспроизводиться автоматически, но для аудио это редко полезно.
Какой формат аудио использовать в HTML?
MP3 воспроизводится во всех современных браузерах, поэтому это надежный выбор для одного файла. AAC в файле .m4a тоже широко поддерживается. Чтобы предложить несколько форматов, используйте элементы <source>.
Как зациклить аудио в HTML?
Добавьте атрибут loop: <audio src="rain.mp3" controls loop>. Когда файл заканчивается, он начинается сначала.
Как воспроизвести звук через JavaScript?
Создайте или выберите элемент audio и вызовите play(), например new Audio('click.mp3').play() внутри обработчика клика. play() возвращает промис, который отклоняется, если браузер блокирует воспроизведение.
Можно ли оформить аудиоплеер HTML?
Лишь немного: можно задать ширину, отступы и display, но кнопки внутри рисует браузер, и в каждом они выглядят по-своему. Для своего вида скройте controls и сделайте собственные элементы управления из кнопок и JavaScript API аудио.