text-to-speech

Par elevenlabs · skills

Convertit du texte en parole grâce à la voix IA d'ElevenLabs. À utiliser pour générer de l'audio à partir de texte, créer des voix off, développer des applications vocales ou synthétiser de la parole dans plus de 70 langues.

npx skills add https://github.com/elevenlabs/skills --skill text-to-speech

ElevenLabs Synthèse vocale

Générer une parole naturelle à partir de texte - supporte 70+ langues, plusieurs modèles pour des compromis qualité/latence.

Configuration : Voir le Guide d'installation. Pour JavaScript, utilisez uniquement les packages @elevenlabs/*.

Démarrage rapide

Python

from elevenlabs import ElevenLabs

client = ElevenLabs()

audio = client.text_to_speech.convert(
    text="Hello, welcome to ElevenLabs!",
    voice_id="JBFqnCBsd6RMkjVDRZzb",  # George
    model_id="eleven_multilingual_v2"
)

with open("output.mp3", "wb") as f:
    for chunk in audio:
        f.write(chunk)

JavaScript

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { createWriteStream } from "fs";

const client = new ElevenLabsClient();
const audio = await client.textToSpeech.convert("JBFqnCBsd6RMkjVDRZzb", {
  text: "Hello, welcome to ElevenLabs!",
  modelId: "eleven_multilingual_v2",
});
audio.pipe(createWriteStream("output.mp3"));

cURL

curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/JBFqnCBsd6RMkjVDRZzb" \
  -H "xi-api-key: $ELEVENLABS_API_KEY" -H "Content-Type: application/json" \
  -d '{"text": "Hello!", "model_id": "eleven_multilingual_v2"}' --output output.mp3

Modèles

ID du modèle Langues Latence Idéal pour
eleven_v3 70+ Standard Meilleure qualité, gamme émotionnelle
eleven_multilingual_v2 29 Standard Haute qualité, contenu long
eleven_flash_v2_5 32 ~75ms Ultra-basse latence, temps réel
eleven_flash_v2 Anglais ~75ms Anglais uniquement, plus rapide
eleven_turbo_v2_5 32 ~250-300ms Qualité/vitesse équilibrée
eleven_turbo_v2 Anglais ~250-300ms Anglais uniquement, équilibré

IDs de voix

Utilisez des voix pré-créées ou créez des voix personnalisées dans le tableau de bord.

Voix populaires :

  • JBFqnCBsd6RMkjVDRZzb - George (masculin, narratif)
  • EXAVITQu4vr4xnSDxMaL - Sarah (féminin, doux)
  • onwK4e9ZLuTAKqWW03F9 - Daniel (masculin, autoritaire)
  • XB0fDUnXU5powFXDhCwa - Charlotte (féminin, conversationnel)
voices = client.voices.get_all()
for voice in voices.voices:
    print(f"{voice.voice_id}: {voice.name}")

Paramètres de voix

Affinez le son de la voix :

  • Stabilité : Cohérence de la voix. Valeurs basses = plus de gamme émotionnelle et variation, mais peut sonner instable. Valeurs hautes = débit régulier et prévisible.
  • Similarité : Proximité avec l'échantillon de voix original. Valeurs hautes sonnent plus comme l'original mais peuvent amplifier les artefacts audio.
  • Style : Exagère les caractéristiques de style unique de la voix (fonctionne uniquement avec les modèles v2+).
  • Amplification du locuteur : Post-traitement qui améliore la clarté et la similarité vocale.
from elevenlabs import VoiceSettings

audio = client.text_to_speech.convert(
    text="Customize my voice settings.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    voice_settings=VoiceSettings(
        stability=0.5,
        similarity_boost=0.75,
        style=0.5,
        speed=1.0,             # 0.25 to 4.0 (default 1.0)
        use_speaker_boost=True
    )
)

Forçage de langue

Forcez une langue spécifique pour la prononciation :

audio = client.text_to_speech.convert(
    text="Bonjour, comment allez-vous?",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    model_id="eleven_multilingual_v2",
    language_code="fr"  # Code ISO 639-1
)

Normalisation de texte

Contrôle la conversion des nombres, dates et abréviations en mots parlés. Par exemple, « 01/15/2026 » devient « January fifteenth, twenty twenty-six » :

  • "auto" (défaut) : Le modèle décide selon le contexte
  • "on" : Toujours normaliser (utilisez quand vous voulez une parole naturelle)
  • "off" : Lire littéralement (utilisez quand vous voulez « zero one slash one five... »)
audio = client.text_to_speech.convert(
    text="Call 1-800-555-0123 on 01/15/2026",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    apply_text_normalization="on"
)

Assemblage de requêtes

Lors de la génération d'audio long en plusieurs requêtes, l'audio peut avoir des dépops, des pauses non naturelles ou des changements de ton aux limites. L'assemblage de requêtes résout cela en informant chaque requête de ce qui vient avant/après :

# Première requête
audio1 = client.text_to_speech.convert(
    text="This is the first part.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    next_text="And this continues the story."
)

# Deuxième requête utilisant le contexte précédent
audio2 = client.text_to_speech.convert(
    text="And this continues the story.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    previous_text="This is the first part."
)

Formats de sortie

Format Description
mp3_44100_128 MP3 44,1 kHz 128 kbps (défaut) - compressé, bon pour le web/applications
mp3_44100_192 MP3 44,1 kHz 192 kbps (Creator+) - qualité compressée plus haute
mp3_44100_64 MP3 44,1 kHz 64 kbps - qualité inférieure, fichiers plus petits
mp3_22050_32 MP3 22,05 kHz 32 kbps - fichiers MP3 les plus petits
pcm_16000 PCM brut 16 kHz - utiliser pour le traitement temps réel
pcm_22050 PCM brut 22,05 kHz
pcm_24000 PCM brut 24 kHz - bon équilibre pour le streaming
pcm_44100 PCM brut 44,1 kHz (Pro+) - qualité CD
pcm_48000 PCM brut 48 kHz (Pro+) - qualité la plus élevée
ulaw_8000 μ-law 8 kHz - standard pour systèmes téléphoniques (Twilio, téléphonie)
alaw_8000 A-law 8 kHz - téléphonie (alternative à μ-law)
opus_48000_64 Opus 48 kHz 64 kbps - codec de streaming efficace
wav_44100 WAV 44,1 kHz - sans compression avec en-têtes

Streaming

Pour les applications temps réel, utilisez la méthode stream (retourne les chunks audio au fur et à mesure de leur génération) :

audio_stream = client.text_to_speech.stream(
    text="This text will be streamed as audio.",
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    model_id="eleven_flash_v2_5"  # Ultra-low latency
)

for chunk in audio_stream:
    play_audio(chunk)

Voir references/streaming.md pour le streaming WebSocket.

Gestion des erreurs

try:
    audio = client.text_to_speech.convert(
        text="Generate speech",
        voice_id="invalid-voice-id"
    )
except Exception as e:
    print(f"API error: {e}")

Erreurs courantes :

  • 401 : Clé API invalide
  • 422 : Paramètres invalides (vérifiez voice_id, model_id)
  • 429 : Limite de débit dépassée

Suivi des coûts

Surveillez l'utilisation des caractères via les en-têtes de réponse (x-character-count, request-id) :

response = client.text_to_speech.convert.with_raw_response(
    text="Hello!", voice_id="JBFqnCBsd6RMkjVDRZzb", model_id="eleven_multilingual_v2"
)
audio = response.parse()
print(f"Characters used: {response.headers.get('x-character-count')}")

Références

Skills similaires