Menu

Audio w HTML: znacznik audio, controls, autoplay i loop

Element <audio> odtwarza pliki dźwiękowe we wbudowanym odtwarzaczu przeglądarki. Poznaj kod, atrybuty (controls, autoplay, loop, muted, preload), zalecane formaty, powód blokowania autoodtwarzania z dźwiękiem i sposób na własny przycisk odtwarzania w JavaScripcie.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Jak dodać dźwięk

Wskaż elementowi <audio> plik dźwiękowy i dodaj controls:

<audio src="song.mp3" controls></audio>

controls pokazuje odtwarzacz przeglądarki: odtwarzanie i pauzę, oś czasu, czas i regulację głośności. Bez controls element w ogóle nie zajmuje miejsca. Podgląd nie może wczytać plików z twojego komputera, więc ten przykład tworzy w przeglądarce skryptem krótki plik WAV i używa go jako src. Naciśnij odtwarzanie:

Odtwarzacz wygląda inaczej w Chrome, Firefoksie i Safari, bo każda przeglądarka rysuje własny. Usuń controls, a odtwarzacz zniknie, choć dźwięk nadal będzie dostępny do odtworzenia z JavaScriptu.

Atrybuty audio

AtrybutDo czego służy
controlsPokazuje odtwarzacz przeglądarki
autoplayPróbuje rozpocząć odtwarzanie po załadowaniu (z dźwiękiem blokowane, patrz niżej)
loopZaczyna od nowa, gdy plik się skończy
mutedStartuje z wyłączoną głośnością
preloadnone (nic nie pobiera do czasu odtworzenia), metadata (tylko długość) lub auto (decyduje przeglądarka)
srcPlik do odtworzenia; albo użyj dzieci <source> dla kilku formatów

Na stronach z wieloma odtwarzaczami, np. na liście odcinków podcastu, używaj preload="none" lub "metadata", żeby strona nie pobierała od razu każdego pliku.

Formaty i treść zastępcza

Wypisz kilka plików za pomocą <source>, a przeglądarka odtworzy pierwszy, który obsługuje. Tekst wewnątrz elementu pokazuje się tylko w przeglądarkach bez obsługi <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>
FormatTyp MIMEUwagi
MP3audio/mpegDziała we wszystkich obecnych przeglądarkach; bezpieczny wybór, gdy masz jeden plik
AAC (.m4a)audio/mp4Szerokie wsparcie, dobra jakość przy małym rozmiarze
Opus lub Vorbis (.ogg, .webm)audio/ogg, audio/webmMałe pliki; dodaj MP3 jako zapas, bo wsparcie w Safari zależy od wersji
WAVaudio/wavBez kompresji i duży; nadaje się do krótkich efektów dźwiękowych

Dlaczego autoplay nie działa

Przeglądarki nie pozwalają stronie samodzielnie zacząć wydawać dźwięku. autoplay albo wywołanie play(), zanim użytkownik kliknie lub dotknie ekranu, zostaje odrzucone. Ten przykład próbuje odtworzyć dźwięk po załadowaniu i wypisuje, co się stało, a potem daje przycisk:

Zwykle zobaczysz NotAllowedError, czyli błąd, który przeglądarka zgłasza, gdy blokuje odtwarzanie. Przycisk działa, bo kliknięcie liczy się jako zgoda. Każda przeglądarka ma własne dodatkowe reguły (Chrome na przykład zapamiętuje strony, na których często odtwarzasz multimedia), więc nigdy nie polegaj na autoplay: uruchamiaj dźwięk w reakcji na działanie użytkownika i zawsze obsługuj obietnicę zwracaną przez play().

new Audio(url) tworzy element audio w JavaScripcie bez dodawania go do strony, co przydaje się przy efektach dźwiękowych.

Własne kontrolki

Ukryj wbudowany odtwarzacz, pomijając controls, a potem steruj elementem przez jego API w JavaScripcie: play(), pause(), currentTime, duration, volume oraz zdarzenia takie jak timeupdate i ended:

Przycisk to prawdziwy <button>, więc działa z klawiatury, a jego etykieta zmienia się między Play i Pause. Na końcu pliku przeglądarka pauzuje element i wywołuje zdarzenie ended, więc przycisk sam wraca do Play. Budując własne kontrolki, bierzesz na siebie też to, co wbudowane dawały za darmo: obsługę klawiatury, etykiety i regulację głośności.

Dostępność

  • Nigdy nie włączaj dźwięku samoczynnie. Przerywa to czytniki ekranu i zaskakuje ludzi. Uruchamiaj dźwięk kliknięciem.
  • Udostępnij transkrypcję podcastów i nagrań mowy. Wystarczy link do wersji tekstowej pod odtwarzaczem, a wyszukiwarki też mogą ją przeczytać.
  • Zostaw controls albo zbuduj kontrolki z prawdziwych przycisków, żeby dźwięk dało się zatrzymać z klawiatury.

O wideo z dźwiękiem, napisach i plakatach przeczytasz na stronie o znaczniku video; <audio> ma większość jego atrybutów i całe API w JavaScripcie.

Częste błędy

  • Brak controls. Bez niego element jest niewidoczny i wygląda, jakby nic się nie stało.
  • Liczenie na to, że autoplay zadziała. Uruchamiaj odtwarzanie kliknięciem i obsługuj obietnicę z play().
  • Zła ścieżka lub typ pliku. Otwórz adres pliku bezpośrednio, żeby go sprawdzić, i dopasuj type do prawdziwego formatu (audio/mpeg dla MP3).
  • Wczytywanie każdego pliku z długiej listy. Użyj preload="none" lub "metadata".
  • Muzyka w tle, której nie da się wyłączyć. Zawsze daj widoczny sposób na pauzę.

Najczęściej zadawane pytania

Jak dodać dźwięk do strony HTML?

Użyj <audio src="song.mp3" controls></audio>. Atrybut controls pokazuje odtwarzacz przeglądarki z przyciskiem odtwarzania, osią czasu i głośnością. Bez niego element jest niewidoczny.

Dlaczego mój dźwięk nie odtwarza się automatycznie?

Przeglądarki blokują dźwięk, który zaczyna grać, zanim użytkownik wejdzie w interakcję ze stroną. Zamiast tego uruchom odtwarzanie kliknięciem przez audio.play(). Wyciszony element może odtworzyć się automatycznie, ale w przypadku audio rzadko ma to sens.

Jakiego formatu audio używać w HTML?

MP3 działa we wszystkich obecnych przeglądarkach, więc to bezpieczny wybór, gdy masz jeden plik. AAC w pliku .m4a też ma szerokie wsparcie. Aby zaoferować więcej niż jeden format, użyj elementów <source>.

Jak zapętlić dźwięk w HTML?

Dodaj atrybut loop: <audio src="rain.mp3" controls loop>. Gdy plik się skończy, zacznie się od nowa.

Jak odtworzyć dźwięk w JavaScripcie?

Utwórz lub wybierz element audio i wywołaj play(), na przykład new Audio('click.mp3').play() w obsłudze kliknięcia. play() zwraca obietnicę (promise), która zostaje odrzucona, jeśli przeglądarka zablokuje odtwarzanie.

Czy mogę zmienić wygląd odtwarzacza audio w HTML?

Tylko trochę: możesz ustawić jego szerokość, margines i display, ale przyciski w środku rysuje przeglądarka i w każdej wyglądają inaczej. Aby uzyskać własny wygląd, ukryj kontrolki i zbuduj swoje z przycisków i API audio w JavaScripcie.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ