Reponse audio et tarification
Traiter la reponse et maitriser les couts
Quand l’API TTS repond avec succes, elle retourne un flux d’octets audio directement dans le corps HTTP. Comprendre comment traiter cette reponse et anticiper les couts est essentiel pour integrer le TTS en production.
Anatomie de la reponse HTTP
La reponse a un code 200 et le corps contient exclusivement les octets audio. Il n’y a pas d’enveloppe JSON. Les en-tetes 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", ...)
# Verifier le succes
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")
Ecrire dans un fichier
La methode la plus simple est d’ecrire la reponse directement dans un fichier :
with open("sortie.mp3", "wb") as f:
f.write(response.content)
Streamer la reponse
Pour les fichiers volumineux, vous pouvez streamer la reponse pour eviter de charger tout l’audio en memoire :
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 cote client (apres avoir proxie via votre backend), vous pouvez creer un element audio a la volee :
const audioBlob = new Blob([audioBuffer], { type: "audio/mpeg" });
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
N’oubliez pas de liberer l’URL Blob apres la lecture pour eviter les fuites memoire (vous verrez cela en detail dans la lecon sur la production).
Correspondance codec / Content-Type
| Codec demande | Content-Type recu | Extension fichier |
|---|---|---|
mp3 | audio/mpeg | .mp3 |
wav | audio/wav | .wav |
pcm | audio/pcm | .pcm |
mulaw | audio/basic | .ul |
alaw | audio/alaw | .al |
Tarification detaillee
Le TTS est facture a 4,20 $ par million de caracteres. La facturation est basee sur le contenu du champ text, tags expressifs inclus.
Estimation des couts
| Volume | Caracteres | Cout estime |
|---|---|---|
| 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 caracteres | 1 000 000 | 4,20 $ |
Tags et facturation
Les tags expressifs comme [pause], <whisper>, <loud> sont comptes dans le decompte de caracteres. Un texte de 1 000 caracteres avec 50 caracteres de tags sera facture pour 1 050 caracteres. Cela represente generalement moins de 5 % du texte total.
Limites de concurrence
L’API autorise jusqu’a 100 requetes concurrentes par compte. Au-dela, vous recevrez une erreur 429 (rate limited). Pour les volumes importants, espacez vos requetes ou implementez un systeme de file d’attente.
Calculer la duree audio
La duree de l’audio genere depend du texte, de la voix et de la vitesse de parole. En moyenne, comptez :
- Francais : environ 150 mots par minute, soit ~900 caracteres par minute
- Anglais : environ 160 mots par minute, soit ~850 caracteres par minute
Un texte de 15 000 caracteres (la limite) produit donc environ 16 minutes d’audio en francais.
Points cles a retenir
- La reponse TTS est un flux binaire, pas du JSON
- Le Content-Type indique le format audio recu
- Utilisez le streaming pour les fichiers volumineux
- Le cout est de 4,20 $ par million de caracteres, tags inclus
- La limite est de 100 requetes concurrentes par compte
- Un texte de 15 000 caracteres produit environ 16 minutes d’audio