Aller au contenu principal

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/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", ...)

# 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 demandeContent-Type recuExtension fichier
mp3audio/mpeg.mp3
wavaudio/wav.wav
pcmaudio/pcm.pcm
mulawaudio/basic.ul
alawaudio/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

VolumeCaracteresCout estime
1 phrase~1000,00042 $
1 paragraphe~5000,0021 $
1 page A4~2 0000,0084 $
1 article de blog~5 0000,021 $
1 livre (200 pages)~400 0001,68 $
1 million de caracteres1 000 0004,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