Aller au contenu principal
Leçon 4 sur 14 · Text-to-Speech API

Réponse audio et tarification

Leçon 4 sur 14 Mis à jour le 3 novembre 2026 Développeur
Sur cette page
  1. Traiter la réponse et maîtriser les coûts
  2. Anatomie de la réponse HTTP
  3. Correspondance codec / Content-Type
  4. Tarification détaillée
  5. Calculer la durée audio
  6. Points clés à retenir

Leçon corrigée le 3 novembre 2026 d’après les pages Pricing, Rate limits et Text to Speech de xAI : 15 $ par million de caractères et non 4,20 $ (tableau recalculé), limites de débit par palier et non « 100 requêtes concurrentes par compte », 60 000 caractères par requête et non 15 000. Sources : Pricing · Rate limits · Text to Speech.

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/mpeg pour MP3, audio/wav pour WAV, audio/pcm pour 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çuExtension fichier
mp3audio/mpeg.mp3
wavaudio/wav.wav
pcmaudio/pcm.pcm
mulawaudio/basic.ul
alawaudio/alaw.al

Tarification détaillée

Le TTS est facturé 15 $ par million de caractères (grille de xAI au 3 novembre 2026). La facturation porte sur le contenu du champ text tel que vous l’envoyez, tags expressifs inclus.

Estimation des coûts

VolumeCaractèresCoût estimé
1 phrase~1000,0015 $
1 paragraphe~5000,0075 $
1 page A4~2 0000,03 $
1 article de blog~5 0000,075 $
1 livre (200 pages)~400 0006 $
1 million de caractères1 000 00015 $

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

D’après la page Rate limits de xAI, le TTS accepte au palier d’entrée 50 requêtes par seconde et 100 sessions simultanées, des limites qui grandissent avec le palier de votre équipe (jusqu’à 500 et 500). La page Text to Speech indique par ailleurs 50 sessions WebSocket simultanées par équipe. Au-delà, l’API répond par une erreur 429 : pour les volumes importants, espacez vos requêtes ou passez par une 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 du paramètre speed. Pour un ordre de grandeur, la parole lue tourne autour de 150 mots par minute, soit quelque 900 caractères par minute en français : mesurez-le sur votre voix avant de promettre une durée. Pour une mesure exacte, with_timestamps renvoie la durée de l’audio (duration) avec les horodatages.

À ce rythme, un texte de 60 000 caractères — la limite d’une requête — donne un peu plus d’une heure 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 15 $ par million de caractères, tags inclus
  • Au palier d’entrée : 50 requêtes par seconde et 100 sessions simultanées
  • Une requête de 60 000 caractères donne de l’ordre d’une heure d’audio en français