Aller au contenu principal

Formats Audio et Optimisation

Choisir le bon format pour chaque contexte

Le choix du format audio impacte directement la qualite sonore, la bande passante consommee et la compatibilite avec votre plateforme cible. Cette lecon detaille chaque format supporte et vous guide vers le choix optimal selon votre cas d’usage.

Les codecs audio supportes

Codec Type MIME Compression Usage principal
mp3 audio/mpeg Avec perte Web, mobile, podcast
wav audio/wav Sans perte Post-production, archivage
pcm audio/pcm Aucune (brut) Pipeline audio, Voice Agent
mulaw audio/basic Logarithmique Telephonie (Amerique, Japon)
alaw audio/alaw Logarithmique Telephonie (Europe, international)

Les sample rates

Le sample rate (frequence d’echantillonnage) determine la qualite du signal audio. Plus il est eleve, meilleure est la reproduction des hautes frequences.

Sample rateQualiteUsage
8 000 HzTelephonieVoIP, SIP, G.711
16 000 HzParole large bandeTranscription, reconnaissance vocale
22 050 HzRadio FMPodcasts, notifications
24 000 HzStandard TTS (defaut)Usage general
44 100 HzCD audioProduction musicale, livres audio
48 000 HzVideo/broadcastPost-production, diffusion

Regle simple

  • Telephonie : 8 000 Hz (obligatoire pour G.711)
  • Web/mobile : 24 000 Hz (bon equilibre qualite/bande passante)
  • Production : 44 100 ou 48 000 Hz (qualite maximale)

Bit rates MP3

Pour le codec MP3, le bit rate controle la compression :

Bit rateQualiteTaille pour 1 min
32 000 bpsBasse~240 Ko
64 000 bpsMoyenne~480 Ko
96 000 bpsBonne~720 Ko
128 000 bps (defaut)Tres bonne~960 Ko
192 000 bpsExcellente~1.4 Mo

Pour la voix parlee, 128 kbps est largement suffisant. Reservez 192 kbps aux contenus premium ou musicaux.

Conversion audio en Python

Quand vous recevez de l’audio du Voice Agent (PCM brut en base64), vous devez souvent le convertir. Voici les utilitaires essentiels :

Base64 vers numpy

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")

PCM vers WAV

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()

Optimisation de la bande passante

Pour les applications web

  • Utilisez MP3 128 kbps a 24 000 Hz pour le TTS
  • Utilisez PCM 24 000 Hz pour le Voice Agent (necessaire pour le streaming bidirectionnel)
  • Compressez les fichiers audio statiques (jingles, messages preenregistres) en MP3

Pour la telephonie

  • Utilisez G.711 a 8 000 Hz exclusivement
  • Ne transcodez pas en temps reel si possible : configurez le Voice Agent directement en G.711

Pour le stockage

  • Archivez en WAV 24 000 Hz pour conserver la qualite
  • Distribuez en MP3 128 kbps pour minimiser la taille

Gestion de la memoire dans le navigateur

Quand vous jouez de l’audio en streaming dans le navigateur, gerez les Blob URLs pour eviter les fuites memoire :

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...
}

Codes d’erreur TTS

CodeSignificationAction
200SuccesAudio dans le corps de la reponse
400Requete invalideVerifier le texte, le codec, le sample rate
401Non autoriseVerifier la cle API
429Quota depasseImplementer un backoff exponentiel
500/503Erreur serveurReessayer avec backoff

Points cles a retenir

  • Cinq codecs sont disponibles : MP3, WAV, PCM, mu-law et A-law, chacun adapte a un contexte specifique
  • Le sample rate par defaut est 24 000 Hz ; utilisez 8 000 Hz pour la telephonie et 44 100+ Hz pour la production
  • Le MP3 a 128 kbps offre le meilleur compromis qualite/taille pour la voix parlee
  • Gerez les Blob URLs dans le navigateur pour eviter les fuites memoire
  • Implementez un backoff exponentiel pour gerer les erreurs 429 (rate limiting) et 5xx