Comment ajouter de l'audio
Faites pointer l'élément <audio> vers un fichier son et ajoutez controls :
<audio src="song.mp3" controls></audio>
controls affiche le lecteur du navigateur : lecture et pause, barre de progression, temps et réglage du volume. Sans controls, l'élément ne prend aucune place. L'aperçu ne peut pas charger de fichiers depuis votre ordinateur, donc cet exemple construit un court fichier WAV dans le navigateur avec un script et l'utilise comme src. Appuyez sur lecture :
Le lecteur a une apparence différente dans Chrome, Firefox et Safari, car chaque navigateur dessine le sien. Supprimez controls et le lecteur disparaît, même si l'audio reste disponible pour que le JavaScript le lise.
Les attributs de audio
| Attribut | Rôle |
|---|---|
controls | Affiche le lecteur du navigateur |
autoplay | Tente de lancer la lecture au chargement (bloqué avec le son, voir plus bas) |
loop | Recommence à la fin du fichier |
muted | Démarre avec le volume coupé |
preload | none (rien télécharger avant la lecture), metadata (seulement la durée) ou auto (le navigateur décide) |
src | Le fichier à lire ; ou utilisez des enfants <source> pour plusieurs formats |
Utilisez preload="none" ou "metadata" pour les pages avec beaucoup de lecteurs, comme une liste d'épisodes de podcast, pour que la page ne télécharge pas tous les fichiers d'avance.
Formats et replis
Listez plusieurs fichiers avec <source> et le navigateur lit le premier qu'il prend en charge. Le texte à l'intérieur de l'élément ne s'affiche que dans les navigateurs sans prise en charge de <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 | Type MIME | Remarques |
|---|---|---|
| MP3 | audio/mpeg | Se lit dans tous les navigateurs actuels ; le choix sûr pour un seul fichier |
AAC (.m4a) | audio/mp4 | Largement pris en charge, bonne qualité pour une petite taille |
Opus ou Vorbis (.ogg, .webm) | audio/ogg, audio/webm | Fichiers légers ; listez un MP3 en repli, car la prise en charge par Safari varie selon la version |
| WAV | audio/wav | Non compressé et lourd ; convient aux effets sonores courts |
Pourquoi l'autoplay échoue
Les navigateurs ne laissent pas une page commencer à faire du bruit d'elle-même. autoplay, ou un appel à play() avant que l'utilisateur ait cliqué ou touché l'écran, est refusé. Cet exemple tente de lire au chargement et affiche ce qui s'est passé, puis propose un bouton :
Vous verrez généralement NotAllowedError, l'erreur que donne un navigateur quand il bloque la lecture. Le bouton fonctionne car un clic vaut autorisation. Chaque navigateur a ses propres règles supplémentaires (Chrome, par exemple, retient les sites où vous lisez souvent des médias), donc ne comptez jamais sur l'autoplay : lancez le son depuis une action de l'utilisateur, et gérez toujours la promesse renvoyée par play().
new Audio(url) crée un élément audio en JavaScript sans l'ajouter à la page, ce qui est pratique pour les effets sonores.
Construire vos propres contrôles
Masquez le lecteur intégré en omettant controls, puis pilotez l'élément avec son API JavaScript : play(), pause(), currentTime, duration, volume, et des événements comme timeupdate et ended :
Le bouton est un vrai <button>, il fonctionne donc au clavier, et son libellé alterne entre Play et Pause. À la fin du fichier, le navigateur met l'élément en pause et déclenche ended, donc le bouton revient tout seul à Play. Si vous construisez des contrôles personnalisés, vous reprenez aussi à votre charge ce que les contrôles intégrés offraient gratuitement : la prise en charge du clavier, les libellés et un réglage du volume.
Accessibilité
- Ne lancez jamais le son tout seul. Il interrompt les lecteurs d'écran et fait sursauter les gens. Lancez l'audio depuis un clic.
- Proposez une transcription pour les podcasts et l'audio parlé. Un lien vers une version texte sous le lecteur suffit, et les moteurs de recherche peuvent la lire.
- Gardez
controls, ou construisez des contrôles avec de vrais boutons, pour que l'audio puisse être mis en pause au clavier.
Pour la vidéo avec son, les sous-titres et les posters, voir la page vidéo en HTML ; <audio> partage la plupart de ses attributs et toute son API JavaScript.
Erreurs fréquentes
- Oublier
controls. L'élément est invisible sans lui, et on a l'impression que rien ne s'est passé. - S'attendre à ce que
autoplayfonctionne. Lancez la lecture depuis un clic et gérez la promesse deplay(). - Un mauvais chemin ou un mauvais type de fichier. Ouvrez directement l'URL du fichier pour la vérifier, et faites correspondre
typeau vrai format (audio/mpegpour le MP3). - Charger tous les fichiers d'une longue liste. Utilisez
preload="none"ou"metadata". - Une musique de fond impossible à arrêter. Donnez toujours aux gens un moyen visible de mettre en pause.
Questions fréquentes
Comment ajouter de l'audio à une page HTML ?
Utilisez <audio src="song.mp3" controls></audio>. L'attribut controls affiche le lecteur du navigateur avec un bouton de lecture, une barre de progression et le volume. Sans lui, l'élément est invisible.
Pourquoi mon audio ne démarre pas automatiquement ?
Les navigateurs bloquent l'audio qui démarre avec du son avant que l'utilisateur n'ait interagi avec la page. Lancez plutôt la lecture depuis un clic avec audio.play(). Un élément muet peut démarrer seul, mais pour de l'audio c'est rarement utile.
Quel format audio utiliser en HTML ?
Le MP3 se lit dans tous les navigateurs actuels, c'est donc le choix sûr pour un seul fichier. L'AAC dans un fichier .m4a est aussi largement pris en charge. Utilisez des éléments <source> pour proposer plusieurs formats.
Comment lire un audio en boucle en HTML ?
Ajoutez l'attribut loop : <audio src="rain.mp3" controls loop>. À la fin du fichier, la lecture recommence depuis le début.
Comment jouer un son en JavaScript ?
Créez ou sélectionnez un élément audio et appelez play(), par exemple new Audio('click.mp3').play() dans un gestionnaire de clic. play() renvoie une promesse rejetée si le navigateur bloque la lecture.
Peut-on styliser le lecteur audio HTML ?
Seulement un peu : vous pouvez régler sa largeur, sa marge et son affichage, mais les boutons à l'intérieur sont dessinés par le navigateur et diffèrent de l'un à l'autre. Pour une apparence personnalisée, masquez les contrôles et construisez les vôtres avec des boutons et l'API JavaScript audio.