Aller au contenu principal

Formats Audio et Optimisation

Mis à jour le 29 juillet 2026

Choisir le bon format pour chaque contexte

Le format audio est l’un de ces réglages qu’on expédie au démarrage et qu’on regrette ensuite. Il détermine pourtant la qualité perçue, la bande passante consommée à chaque écoute et la compatibilité avec la plateforme visée : un podcast livré en PCM brut fait exploser vos coûts de diffusion, un flux téléphonique en 24 000 Hz sera transcodé en route avec la dégradation qui l’accompagne. Cette leçon passe en revue les formats disponibles et la logique de décision qui va avec.

Les codecs supportés

CodecType MIMECompressionUsage principal
mp3audio/mpegAvec perteWeb, mobile, podcast
wavaudio/wavSans pertePost-production, archivage
pcmaudio/pcmAucune (brut)Pipeline audio, Voice Agent
mulawaudio/basicLogarithmiqueTéléphonie (Amérique, Japon)
alawaudio/alawLogarithmiqueTéléphonie (Europe, international)

Le MP3 couvre l’essentiel de la distribution grand public. Le WAV sert quand l’audio doit encore être retravaillé ou conservé sans perte. Le PCM est le format d’échange des pipelines temps réel, et notamment celui du Voice Agent, parce qu’il ne coûte rien à décoder. Mu-law et A-law n’existent que pour la téléphonie et n’ont aucune raison d’apparaître ailleurs.

Les sample rates

La fréquence d’échantillonnage fixe la finesse du signal : plus elle est élevée, mieux les hautes fréquences sont restituées, et plus le fichier pèse.

Sample rateQualitéUsage
8 000 HzTéléphonieVoIP, SIP, G.711
16 000 HzParole large bandeTranscription, reconnaissance vocale
22 050 HzRadio FMPodcasts, notifications
24 000 HzStandard TTS (défaut)Usage général
44 100 HzCD audioProduction musicale, livres audio
48 000 HzVidéo/broadcastPost-production, diffusion

En pratique, trois cas suffisent à décider. La téléphonie impose 8 000 Hz, sans discussion : c’est ce qu’exige le G.711. Le web et le mobile se contentent des 24 000 Hz par défaut, meilleur équilibre entre qualité et bande passante pour de la voix. La production — livre audio, bande-son d’une vidéo — justifie 44 100 ou 48 000 Hz, parce que le fichier sera mixé, normalisé, éventuellement réencodé, et que chaque étape ronge un peu de qualité.

Les bit rates MP3

Sur le codec MP3, le bit rate règle la compression et donc le poids final.

Bit rateQualitéTaille pour 1 min
32 000 bpsBasse~240 Ko
64 000 bpsMoyenne~480 Ko
96 000 bpsBonne~720 Ko
128 000 bps (défaut)Très bonne~960 Ko
192 000 bpsExcellente~1.4 Mo

La voix parlée n’occupe qu’une partie réduite du spectre : 128 kbps la restitue déjà très correctement, et monter à 192 kbps double le poids de votre catalogue sans qu’un auditeur entende la différence sur un contenu parlé. Réservez ce dernier palier aux productions premium ou aux passages musicaux.

Convertir l’audio en Python

Le Voice Agent vous livre du PCM brut encodé en base64, et deux conversions reviennent dans presque tous les projets. La première ramène ce flux vers un tableau numpy normalisé entre -1 et 1, format attendu par la plupart des bibliothèques de traitement du signal, et fait le chemin inverse pour renvoyer de l’audio à l’API.

import base64
import numpy as np

def base64_to_audio(base64_audio: str) -> np.ndarray:
    audio_bytes = base64.b64decode(base64_audio)
    audio_int16 = np.frombuffer(audio_bytes, dtype=np.int16)
    return audio_int16.astype(np.float32) / 32768.0

def audio_to_base64(audio_data: np.ndarray) -> str:
    audio_int16 = (audio_data * 32767).astype(np.int16)
    return base64.b64encode(audio_int16.tobytes()).decode("utf-8")

La seconde enveloppe du PCM dans un conteneur WAV. Sans cet en-tête, un lecteur audio ne sait ni combien de canaux ni quelle fréquence interpréter, et refusera le fichier ou le jouera à la mauvaise vitesse.

import wave

def pcm_to_wav(pcm_data: bytes, sample_rate: int = 24000) -> bytes:
    import io
    buffer = io.BytesIO()
    with wave.open(buffer, "wb") as wf:
        wf.setnchannels(1)
        wf.setsampwidth(2)  # 16-bit
        wf.setframerate(sample_rate)
        wf.writeframes(pcm_data)
    return buffer.getvalue()

Optimiser selon la destination

Pour une application web, tenez-vous au MP3 128 kbps à 24 000 Hz pour le TTS et au PCM 24 000 Hz pour le Voice Agent, ce dernier étant imposé par le streaming bidirectionnel. Vos ressources audio statiques — jingles, messages préenregistrés — passent en MP3 une fois pour toutes plutôt que d’être servies en WAV à chaque visiteur.

En téléphonie, restez exclusivement en G.711 à 8 000 Hz et configurez le Voice Agent directement dans ce format : tout transcodage en temps réel ajoute de la latence là où vous n’en avez pas à revendre.

Pour le stockage, dissociez archive et diffusion : le master reste en WAV 24 000 Hz, retravaillable, et la distribution se fait en MP3 128 kbps, bien plus léger. Un même contenu, deux fichiers, deux usages.

Gérer la mémoire dans le navigateur

En lecture streaming, chaque URL.createObjectURL réserve de la mémoire que le navigateur ne libère pas tout seul. Sur une session longue, ces URL s’accumulent jusqu’à faire ramer l’onglet. Révoquez la précédente avant d’en créer une nouvelle :

let currentBlobUrl = null;

function playAudioChunk(base64Data) {
  // Liberer l'URL precedente
  if (currentBlobUrl) {
    URL.revokeObjectURL(currentBlobUrl);
  }

  const audioBuffer = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0));
  const blob = new Blob([audioBuffer], { type: "audio/pcm" });
  currentBlobUrl = URL.createObjectURL(blob);
  // Jouer l'audio...
}

Interpréter les codes d’erreur TTS

CodeSignificationAction
200SuccèsAudio dans le corps de la réponse
400Requête invalideVérifier le texte, le codec, le sample rate
401Non autoriséVérifier la clé API
429Quota dépasséImplémenter un backoff exponentiel
500/503Erreur serveurRéessayer avec backoff

Les 400 se règlent dans votre code et ne partiront pas d’eux-mêmes : c’est un paramètre incompatible, typiquement un sample rate refusé par le codec choisi. Les 429 et les 5xx, en revanche, appellent la même réponse — un backoff exponentiel, avec des délais qui doublent à chaque tentative. Une boucle de réessai immédiate ne fait qu’aggraver la situation en saturant un peu plus le quota que vous venez de dépasser.

Points clés à retenir

  • Cinq codecs sont disponibles : MP3, WAV, PCM, mu-law et A-law, chacun adapté à un contexte spécifique
  • Le sample rate par défaut est 24 000 Hz ; utilisez 8 000 Hz pour la téléphonie et 44 100+ Hz pour la production
  • Le MP3 à 128 kbps offre le meilleur compromis qualité/taille pour la voix parlée
  • Gérez les Blob URLs dans le navigateur pour éviter les fuites mémoire
  • Implémentez un backoff exponentiel pour gérer les erreurs 429 (rate limiting) et 5xx

Testez vos connaissances

Voice Agent et TTS : la voix de bout en bout, en cinq questions.

1. Comment fonctionne une session Voice Agent ?

Réponse : En WebSocket temps réel : la session se configure (voix, personnalité, instructions), puis les événements circulent dans les deux sens — l’audio de l’utilisateur, les réponses vocales de l’agent.

2. Que permet le function calling en vocal ?

Réponse : L’agent vocal appelle vos outils en pleine conversation — consulter un compte, réserver, agir — la voix devient une interface complète, pas un simple dictaphone.

3. Qu'apportent les tags expressifs du TTS ?

Réponse : Le contrôle de la parole : intonations, pauses, emphases — la synthèse cesse d’être monocorde et suit l’intention du texte, y compris en multilingue.

4. Pourquoi les tokens éphémères sont-ils importants ?

Réponse : Ils permettent au client (navigateur, mobile) de se connecter au service vocal sans exposer la clé API principale — des identifiants courts, limités, révocables : la sécurité du temps réel.

5. Que règle-t-on avec les formats audio ?

Réponse : Le compromis qualité/latence/bande passante : choisir le format et l’échantillonnage adaptés au canal (web, téléphonie SIP/LiveKit) — l’optimisation de la dernière ligne droite.

Session, outils, expressivité, sécurité, formats : l’assistant vocal complet du cours assemble les cinq — le vôtre suivra le même plan.