So fügst du Audio ein
Lass das <audio>-Element auf eine Tondatei zeigen und füg controls hinzu:
<audio src="song.mp3" controls></audio>
controls zeigt den Player des Browsers: Abspielen und Pause, eine Zeitleiste, die Zeit und eine Lautstärkeregelung. Ohne controls nimmt das Element überhaupt keinen Platz ein. Die Vorschau kann keine Dateien von deinem Computer laden, deshalb erzeugt dieses Beispiel per Skript im Browser eine kurze WAV-Datei und nimmt sie als src. Drück auf Play:
Der Player sieht in Chrome, Firefox und Safari unterschiedlich aus, weil jeder Browser seinen eigenen zeichnet. Lösch controls, und der Player verschwindet, auch wenn das Audio für JavaScript zum Abspielen noch da ist.
Audio-Attribute
| Attribut | Was es macht |
|---|---|
controls | Zeigt den Player des Browsers |
autoplay | Versucht, beim Laden abzuspielen (mit Ton blockiert, siehe unten) |
loop | Beginnt am Ende der Datei von vorn |
muted | Startet mit ausgeschalteter Lautstärke |
preload | none (nichts laden bis Play), metadata (nur die Länge) oder auto (der Browser entscheidet) |
src | Die abzuspielende Datei; oder <source>-Kindelemente für mehrere Formate |
Nimm preload="none" oder "metadata" auf Seiten mit vielen Playern, etwa einer Liste von Podcast-Folgen, damit die Seite nicht vorab jede Datei herunterlädt.
Formate und Fallbacks
Führ mit <source> mehrere Dateien auf, und der Browser spielt die erste ab, die er unterstützt. Text im Element erscheint nur in Browsern ohne Unterstützung für <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>
| Format | MIME-Typ | Hinweise |
|---|---|---|
| MP3 | audio/mpeg | Läuft in jedem aktuellen Browser; die sichere Wahl für eine einzelne Datei |
AAC (.m4a) | audio/mp4 | Breit unterstützt, gute Qualität bei kleiner Größe |
Opus oder Vorbis (.ogg, .webm) | audio/ogg, audio/webm | Kleine Dateien; führ MP3 als Fallback auf, weil die Unterstützung in Safari je nach Version schwankt |
| WAV | audio/wav | Unkomprimiert und groß; gut für kurze Soundeffekte |
Warum autoplay scheitert
Browser lassen eine Seite nicht von selbst Töne abspielen. autoplay oder ein Aufruf von play(), bevor der Nutzer geklickt oder getippt hat, wird abgelehnt. Dieses Beispiel versucht beim Laden abzuspielen, gibt aus, was passiert ist, und bietet dann einen Button an:
Meistens siehst du NotAllowedError, den Fehler, den ein Browser beim Blockieren der Wiedergabe liefert. Der Button funktioniert, weil ein Klick als Erlaubnis zählt. Jeder Browser hat eigene zusätzliche Regeln (Chrome merkt sich zum Beispiel Websites, auf denen du oft Medien abspielst), verlass dich also nie auf autoplay: Starte Töne durch eine Aktion des Nutzers und behandle immer das Promise, das play() zurückgibt.
new Audio(url) erzeugt in JavaScript ein audio-Element, ohne es der Seite hinzuzufügen; praktisch für Soundeffekte.
Eigene Steuerelemente bauen
Versteck den eingebauten Player, indem du controls weglässt, und steuere das Element über seine JavaScript-API: play(), pause(), currentTime, duration, volume und Events wie timeupdate und ended:
Der Button ist ein echter <button>, funktioniert also mit der Tastatur, und seine Beschriftung wechselt zwischen Play und Pause. Am Ende der Datei pausiert der Browser das Element und feuert ended, der Button springt also von selbst auf Play zurück. Wenn du eigene Steuerelemente baust, übernimmst du auch, was dir die eingebauten geschenkt haben: Tastaturbedienung, Beschriftungen und eine Lautstärkeregelung.
Barrierefreiheit
- Starte Ton nie von selbst. Er unterbricht Screenreader und erschreckt Menschen. Starte Audio mit einem Klick.
- Biete ein Transkript an für Podcasts und gesprochenes Audio. Ein Link zu einer Textfassung unter dem Player reicht, und Suchmaschinen können ihn lesen.
- Behalte
controlsoder bau Steuerelemente aus echten Buttons, damit sich das Audio per Tastatur anhalten lässt.
Für Videos mit Ton, Untertiteln und Vorschaubildern siehe die Seite zum HTML Video; <audio> teilt die meisten seiner Attribute und die ganze JavaScript-API.
Häufige Fehler
controlsvergessen. Ohne ist das Element unsichtbar, und es sieht aus, als wäre nichts passiert.- Erwarten, dass
autoplayfunktioniert. Starte die Wiedergabe bei einem Klick und behandle das Promise vonplay(). - Ein falscher Dateipfad oder Typ. Öffne die Datei-URL direkt, um sie zu prüfen, und pass
typean das echte Format an (audio/mpegfür MP3). - Jede Datei einer langen Liste laden. Nimm
preload="none"oder"metadata". - Hintergrundmusik, die sich nicht stoppen lässt. Gib den Leuten immer eine sichtbare Möglichkeit, sie anzuhalten.
Häufig gestellte Fragen
Wie füge ich einer HTML-Seite Audio hinzu?
Mit <audio src="song.mp3" controls></audio>. Das Attribut controls zeigt den Player des Browsers mit Play-Button, Zeitleiste und Lautstärke. Ohne es ist das Element unsichtbar.
Warum startet mein Audio nicht automatisch?
Browser blockieren Audio, das mit Ton startet, bevor der Nutzer mit der Seite interagiert hat. Starte die Wiedergabe stattdessen bei einem Klick mit audio.play(). Ein stummgeschaltetes Element darf automatisch starten, aber bei Audio bringt das selten etwas.
Welches Audioformat soll ich in HTML verwenden?
MP3 läuft in jedem aktuellen Browser und ist daher die sichere Wahl für eine einzelne Datei. AAC in einer .m4a-Datei wird ebenfalls breit unterstützt. Mit <source>-Elementen bietest du mehr als ein Format an.
Wie spiele ich Audio in HTML in Schleife ab?
Füg das Attribut loop hinzu: <audio src="rain.mp3" controls loop>. Wenn die Datei zu Ende ist, beginnt sie wieder von vorn.
Wie spiele ich mit JavaScript einen Ton ab?
Erzeug oder wähl ein audio-Element aus und ruf play() auf, zum Beispiel new Audio('click.mp3').play() in einem Klick-Handler. play() gibt ein Promise zurück, das abgelehnt wird, wenn der Browser die Wiedergabe blockiert.
Kann ich den HTML-Audio-Player stylen?
Nur ein wenig: Du kannst Breite, margin und display setzen, aber die Buttons darin zeichnet der Browser, und sie sehen in jedem anders aus. Für ein eigenes Aussehen versteckst du die controls und baust eigene mit Buttons und der JavaScript-API für Audio.