Menu

Audio en HTML : balise audio, controls, autoplay et loop

L'élément <audio> lit des fichiers son avec le lecteur intégré du navigateur. Découvrez le balisage, les attributs (controls, autoplay, loop, muted, preload), les formats à utiliser, pourquoi l'autoplay avec son est bloqué, et comment construire votre propre bouton de lecture en JavaScript.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

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

AttributRôle
controlsAffiche le lecteur du navigateur
autoplayTente de lancer la lecture au chargement (bloqué avec le son, voir plus bas)
loopRecommence à la fin du fichier
mutedDémarre avec le volume coupé
preloadnone (rien télécharger avant la lecture), metadata (seulement la durée) ou auto (le navigateur décide)
srcLe 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>
FormatType MIMERemarques
MP3audio/mpegSe lit dans tous les navigateurs actuels ; le choix sûr pour un seul fichier
AAC (.m4a)audio/mp4Largement pris en charge, bonne qualité pour une petite taille
Opus ou Vorbis (.ogg, .webm)audio/ogg, audio/webmFichiers légers ; listez un MP3 en repli, car la prise en charge par Safari varie selon la version
WAVaudio/wavNon 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 autoplay fonctionne. Lancez la lecture depuis un clic et gérez la promesse de play().
  • Un mauvais chemin ou un mauvais type de fichier. Ouvrez directement l'URL du fichier pour la vérifier, et faites correspondre type au vrai format (audio/mpeg pour 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.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER