Réponse audio et tarification
Mis à jour le 30 juillet 2026
Traiter la réponse et maîtriser les coûts
Quand l’API TTS répond avec succès, elle retourne un flux d’octets audio directement dans le corps HTTP. Comprendre comment traiter cette réponse et anticiper les coûts est essentiel pour intégrer le TTS en production.
Anatomie de la réponse HTTP
La réponse a un code 200 et le corps contient exclusivement les octets audio. Il n’y a pas d’enveloppe JSON. Les en-têtes HTTP importants sont :
Content-Type: indique le format audio (audio/mpegpour MP3,audio/wavpour WAV,audio/pcmpour PCM)Content-Length: la taille du fichier audio en octets
response = requests.post("https://api.x.ai/v1/tts", ...)
# Vérifier le succès
if response.status_code == 200:
content_type = response.headers["Content-Type"]
audio_size = len(response.content)
print(f"Format: {content_type}, Taille: {audio_size} octets")
Écrire dans un fichier
La méthode la plus simple est d’écrire la réponse directement dans un fichier :
with open("sortie.mp3", "wb") as f:
f.write(response.content)
Streamer la réponse
Pour les fichiers volumineux, vous pouvez streamer la réponse pour éviter de charger tout l’audio en mémoire :
response = requests.post(
"https://api.x.ai/v1/tts",
headers={"Authorization": f"Bearer {api_key}"},
json={"text": long_text, "voice_id": "eve", "language": "fr"},
stream=True
)
with open("sortie.mp3", "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
Jouer directement dans le navigateur
En JavaScript côté client (après avoir relayé l’audio via votre backend), vous pouvez créer un élément audio à la volée :
const audioBlob = new Blob([audioBuffer], { type: "audio/mpeg" });
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
N’oubliez pas de libérer l’URL Blob après la lecture pour éviter les fuites mémoire (vous verrez cela en détail dans la leçon sur la production).
Correspondance codec / Content-Type
| Codec demandé | Content-Type reçu | Extension fichier |
|---|---|---|
mp3 | audio/mpeg | .mp3 |
wav | audio/wav | .wav |
pcm | audio/pcm | .pcm |
mulaw | audio/basic | .ul |
alaw | audio/alaw | .al |
Tarification détaillée
Le TTS est facturé à 4,20 $ par million de caractères. La facturation est basée sur le contenu du champ text, tags expressifs inclus.
Estimation des coûts
| Volume | Caractères | Coût estimé |
|---|---|---|
| 1 phrase | ~100 | 0,00042 $ |
| 1 paragraphe | ~500 | 0,0021 $ |
| 1 page A4 | ~2 000 | 0,0084 $ |
| 1 article de blog | ~5 000 | 0,021 $ |
| 1 livre (200 pages) | ~400 000 | 1,68 $ |
| 1 million de caractères | 1 000 000 | 4,20 $ |
Tags et facturation
Les tags expressifs comme [pause], <whisper>, <loud> sont comptés dans le décompte de caractères. Un texte de 1 000 caractères avec 50 caractères de tags sera facturé pour 1 050 caractères. Cela représente généralement moins de 5 % du texte total.
Limites de concurrence
L’API autorise jusqu’à 100 requêtes concurrentes par compte. Au-delà, vous recevrez une erreur 429 (rate limited). Pour les volumes importants, espacez vos requêtes ou implémentez un système de file d’attente.
Calculer la durée audio
La durée de l’audio généré dépend du texte, de la voix et de la vitesse de parole. En moyenne, comptez :
- Français : environ 150 mots par minute, soit ~900 caractères par minute
- Anglais : environ 160 mots par minute, soit ~850 caractères par minute
Un texte de 15 000 caractères (la limite) produit donc environ 16 minutes d’audio en français.
Points clés à retenir
- La réponse TTS est un flux binaire, pas du JSON
- Le Content-Type indique le format audio reçu
- Utilisez le streaming pour les fichiers volumineux
- Le coût est de 4,20 $ par million de caractères, tags inclus
- La limite est de 100 requêtes concurrentes par compte
- Un texte de 15 000 caractères produit environ 16 minutes d’audio