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')}")