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 rate | Qualite | Usage |
|---|---|---|
| 8 000 Hz | Telephonie | VoIP, SIP, G.711 |
| 16 000 Hz | Parole large bande | Transcription, reconnaissance vocale |
| 22 050 Hz | Radio FM | Podcasts, notifications |
| 24 000 Hz | Standard TTS (defaut) | Usage general |
| 44 100 Hz | CD audio | Production musicale, livres audio |
| 48 000 Hz | Video/broadcast | Post-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 rate | Qualite | Taille pour 1 min |
|---|---|---|
| 32 000 bps | Basse | ~240 Ko |
| 64 000 bps | Moyenne | ~480 Ko |
| 96 000 bps | Bonne | ~720 Ko |
| 128 000 bps (defaut) | Tres bonne | ~960 Ko |
| 192 000 bps | Excellente | ~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
| Code | Signification | Action |
|---|---|---|
| 200 | Succes | Audio dans le corps de la reponse |
| 400 | Requete invalide | Verifier le texte, le codec, le sample rate |
| 401 | Non autorise | Verifier la cle API |
| 429 | Quota depasse | Implementer un backoff exponentiel |
| 500/503 | Erreur serveur | Reessayer 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