Aller au contenu principal

Génération de parole basique

Votre première génération vocale

Maintenant que vous savez créer et gérer des voix, passons à l’essentiel : générer de la parole. L’API Speech de Mistral transforme du texte en audio en quelques lignes de Python. Cette leçon couvre la génération basique avec une voix sauvegardée.

L’endpoint /v1/audio/speech

La génération de parole utilise la méthode client.audio.speech.complete(). Elle prend en entrée du texte et un identifiant de voix, et retourne de l’audio encodé en base64.

Code Python complet

Voici le code pour générer un fichier audio à partir de texte :

import base64
from pathlib import Path
from mistralai.client import Mistral

client = Mistral(api_key="votre-cle-api")

# Générer de la parole avec une voix sauvegardée
response = client.audio.speech.complete(
    model="voxtral-mini-tts-2603",
    input="Bonjour et bienvenue dans cette formation sur Voxtral TTS.",
    voice_id="votre-voice-id",
    response_format="mp3",
)

# Décoder le base64 et sauvegarder en fichier
audio_bytes = base64.b64decode(response.audio_data)
Path("sortie.mp3").write_bytes(audio_bytes)
print(f"Audio généré : {len(audio_bytes)} octets")

Décortiquer les paramètres

model

Le modèle à utiliser pour la génération. Pour l’instant, le seul modèle disponible est voxtral-mini-tts-2603. Spécifiez-le toujours explicitement pour garantir la compatibilité si de nouveaux modèles sont ajoutés.

input

Le texte à convertir en parole. Quelques règles :

  • Longueur maximale : 300 mots pour une qualité optimale
  • Pas d’emojis : le modèle ne sait pas les interpréter
  • Pas de formatage complexe : évitez le Markdown, le HTML ou les caractères spéciaux
  • Épeler les chiffres : écrivez « vingt-trois » plutôt que « 23 »
  • Épeler les abréviations : écrivez « Société à Responsabilité Limitée » plutôt que « SARL »

voice_id

L’identifiant de la voix à utiliser. Vous l’obtenez soit :

  • En créant une voix via client.audio.voices.create() (voir leçon 5)
  • En listant vos voix via client.audio.voices.list()
  • En utilisant l’ID d’une voix professionnelle Mistral

response_format

Le format de l’audio généré. Les options sont mp3, wav, pcm, flac et opus. Nous détaillerons chaque format dans la leçon 12.

Exemple : générer un audiobook

Voici un exemple plus élaboré qui génère un chapitre d’audiobook en découpant le texte en segments :

import base64
from pathlib import Path
from mistralai.client import Mistral

client = Mistral(api_key="votre-cle-api")
voice_id = "votre-voice-id"

# Texte découpé en paragraphes (max 300 mots chacun)
paragraphes = [
    "Premier paragraphe du chapitre. Le narrateur introduit le contexte.",
    "Deuxième paragraphe. L'action commence à se développer.",
    "Troisième paragraphe. Le suspense monte progressivement.",
]

audio_complet = b""

for i, texte in enumerate(paragraphes):
    print(f"Génération du segment {i + 1}/{len(paragraphes)}...")
    response = client.audio.speech.complete(
        model="voxtral-mini-tts-2603",
        input=texte,
        voice_id=voice_id,
        response_format="wav",
    )
    audio_complet += base64.b64decode(response.audio_data)

Path("chapitre-01.wav").write_bytes(audio_complet)
print("Chapitre audio généré avec succès !")

Limites de la concaténation

La concaténation brute de fichiers WAV fonctionne car le format est non compressé. Pour les formats compressés (MP3, Opus), vous devrez utiliser une bibliothèque comme pydub pour fusionner correctement les segments.

Gestion des erreurs

En production, gérez toujours les erreurs possibles :

try:
    response = client.audio.speech.complete(
        model="voxtral-mini-tts-2603",
        input="Texte à convertir en parole.",
        voice_id=voice_id,
        response_format="mp3",
    )
    audio_bytes = base64.b64decode(response.audio_data)
    Path("sortie.mp3").write_bytes(audio_bytes)
except Exception as e:
    print(f"Erreur lors de la génération : {e}")

Les erreurs courantes incluent :

  • voice_id invalide ou supprimé
  • Texte trop long (> 300 mots)
  • Quota API dépassé
  • Format de sortie non supporté

Points clés à retenir

  • La génération utilise client.audio.speech.complete() avec le modèle voxtral-mini-tts-2603
  • Le texte doit respecter la limite de 300 mots et éviter les emojis et le formatage
  • Épelez les chiffres et les abréviations pour une prononciation correcte
  • L’audio retourné est en base64 — décodez-le avant de sauvegarder
  • Pour les textes longs, découpez en segments et concaténez les résultats