Technique6 min de lecture

Web Audio API vs fichiers audio pour alarmes web

Générer un son d'alarme à la volée avec la Web Audio API est plus fiable qu'un fichier MP3 chargé. Latence, autoplay, taille : comparatif technique.

Pour faire sonner une alarme dans un navigateur, deux approches coexistent : charger un fichier audio (MP3, WAV) ou générer le son à la volée avec la Web Audio API. Convertly CHRONO a choisi la seconde. Voici pourquoi.

Approche 1 — Fichier audio préchargé

const audio = new Audio('/beep.mp3');
audio.play();

Simple, mais trois problèmes :

  • Latence variable — le décodage du fichier peut prendre 50 à 300 ms selon l'appareil.
  • Échec silencieux — si le fichier n'est pas chargé, play() ne signale pas toujours l'erreur.
  • Poids du fichier — même quelques ko à télécharger augmentent le temps avant disponibilité.

Approche 2 — Web Audio API (oscillateur)

const ctx = new AudioContext();
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.frequency.value = 880; // La5
osc.connect(gain).connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 0.3);

Le son est synthétisé en temps réel. Aucun fichier à charger, latence négligeable (< 5 ms), contrôle total de la fréquence et de l'enveloppe.

Le piège commun à tous les navigateurs : autoplay

Depuis 2018, Chrome et Safari bloquent toute lecture audio non précédée d'une interaction utilisateur (clic, tap, touche). Que vous utilisiez un fichier ou la Web Audio API, le premier son ne sera jamais joué si l'utilisateur n'a pas interagi avec la page.

Convertly CHRONO contourne le problème en débloquant AudioContext dès le clic sur "Démarrer" — la sonnerie de fin tombe ensuite sans heurt.

Comparatif

CritèreFichier MP3Web Audio API
Latence50–300 ms< 5 ms
Poids2–50 ko à charger0 octet
Fiabilité hors-ligneDépend du cacheToujours dispo
PersonnalisationMultiples fichiersFréquence libre
${CTA('alarme/sonore', "Tester l'alarme sonore")}

Pour aller plus loin