Changeur de Voix ElevenLabs
Transformez la voix d'un enregistrement audio en une voix cible différente. Le Changeur de Voix (anciennement appelé Speech-to-Speech — le endpoint API et les méthodes SDK utilisent toujours le nom speech_to_speech / speechToSpeech) conserve la performance originale — émotion, rythme, intonation, respirations, chuchotements, rires, pleurs — et ne change que qui parle.
Installation : Voir Installation Guide. Pour JavaScript, utilisez uniquement les packages
@elevenlabs/*.
Informations clés
- Longueur d'entrée maximale : 5 minutes par demande — divisez les enregistrements plus longs en chunks et assemblez les résultats.
- Taille de fichier maximale : 50 MB par demande — compressez en MP3 si votre source est plus grande.
- Tarification : 1 000 caractères par minute d'audio traité (basée sur la durée, non sur le texte).
- Modèle recommandé :
eleven_multilingual_sts_v2— surpasse souventeleven_english_sts_v2même pour du contenu anglais uniquement.
Démarrage rapide
Python
from elevenlabs import ElevenLabs
client = ElevenLabs()
with open("source.mp3", "rb") as audio_file:
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb", # George
audio=audio_file,
model_id="eleven_multilingual_sts_v2",
output_format="mp3_44100_128",
)
with open("converted.mp3", "wb") as f:
for chunk in audio_stream:
f.write(chunk)
JavaScript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { createReadStream, createWriteStream } from "fs";
const client = new ElevenLabsClient();
const audioStream = await client.speechToSpeech.convert("JBFqnCBsd6RMkjVDRZzb", {
audio: createReadStream("source.mp3"),
modelId: "eleven_multilingual_sts_v2",
outputFormat: "mp3_44100_128",
});
audioStream.pipe(createWriteStream("converted.mp3"));
cURL
curl -X POST "https://api.elevenlabs.io/v1/speech-to-speech/JBFqnCBsd6RMkjVDRZzb?output_format=mp3_44100_128" \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-F "audio=@source.mp3" \
-F "model_id=eleven_multilingual_sts_v2" \
--output converted.mp3
Paramètres
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
voice_id |
string (obligatoire) | — | Voix cible pour parler. Utilisez un ID de voix prédéfini, une voix clonée ou une voix de la bibliothèque |
audio |
file (obligatoire) | — | Audio source dont la performance (émotion, timing, délivrance) sera préservée |
model_id |
string | eleven_english_sts_v2 |
eleven_multilingual_sts_v2 pour 29 langues, eleven_english_sts_v2 pour l'anglais uniquement |
output_format |
string | mp3_44100_128 |
Voir le tableau des formats de sortie ci-dessous |
voice_settings |
JSON string | — | Remplacer les paramètres de voix stockés pour cette demande uniquement |
seed |
integer | — | Échantillonnage déterministe au meilleur effort (0 – 4294967295) |
remove_background_noise |
boolean | false |
Exécuter le modèle d'isolation sur l'entrée avant la conversion |
file_format |
string | other |
other pour tout audio encodé, ou pcm_s16le_16 pour PCM 16-bit mono @ 16kHz little-endian (latence inférieure) |
optimize_streaming_latency |
int (query) | — | 0–4. Échangez la qualité contre la latence. 4 est le plus rapide mais désactive le normalisateur de texte |
enable_logging |
boolean (query) | true |
Définir à false pour le mode zéro-rétention (enterprise uniquement — désactive l'historique/l'assemblage) |
Modèles
| ID du modèle | Langues | Meilleur pour |
|---|---|---|
eleven_multilingual_sts_v2 |
29 | Recommandé pour tout — surpasse souvent le modèle anglais même sur l'audio anglais |
eleven_english_sts_v2 |
Anglais | Défaut API — repli anglais uniquement |
Seuls les modèles dont la propriété can_do_voice_conversion est true peuvent être utilisés ici. Le Changeur de Voix n'a actuellement pas de niveau « flash/turbo » à faible latence — si vous en avez besoin, conservez l'entrée pcm_s16le_16, une sortie opus_* / mp3_* à faible débit binaire, et augmentez optimize_streaming_latency.
Langues (eleven_multilingual_sts_v2)
Anglais (US, UK, AU, CA), Japonais, Chinois, Allemand, Hindi, Français (FR, CA), Coréen, Portugais (BR, PT), Italien, Espagnol (ES, MX), Indonésien, Néerlandais, Turc, Philippin, Polonais, Suédois, Bulgare, Roumain, Arabe (SA, AE), Tchèque, Grec, Finnois, Croate, Malais, Slovaque, Danois, Tamoul, Ukrainien, Russe.
Voix cibles
Utilisez n'importe quel ID de voix à partir des voix prédéfinies, vos voix clonées ou la bibliothèque de voix.
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}")
Conversion à partir d'une URL
import requests
from io import BytesIO
from elevenlabs import ElevenLabs
client = ElevenLabs()
audio_url = "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3"
response = requests.get(audio_url)
audio_data = BytesIO(response.content)
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=audio_data,
model_id="eleven_multilingual_sts_v2",
output_format="mp3_44100_128",
)
with open("converted.mp3", "wb") as f:
for chunk in audio_stream:
f.write(chunk)
Remplacement des paramètres de voix
Affinez la voix cible pour une seule demande sans modifier ses paramètres par défaut stockés :
from elevenlabs import VoiceSettings
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=audio_file,
model_id="eleven_multilingual_sts_v2",
voice_settings=VoiceSettings(
stability=0.5,
similarity_boost=0.75,
style=0.0,
use_speaker_boost=True,
),
)
- Stabilité : inférieur = plage émotionnelle plus grande (suit la source plus librement), supérieur = délivrance plus stable.
- Similitude boost : supérieur = plus proche du timbre de la voix cible, peut amplifier les artefacts de la source.
- Style : exagère les caractéristiques uniques de la voix cible (modèles v2+).
- Speaker boost : post-traitement pour affiner la clarté de la voix cible.
Nettoyage de l'audio source bruyant
Si l'enregistrement d'entrée est bruyant, soit pré-traitez avec la skill voice-isolator, soit passez remove_background_noise=True pour le faire en un seul appel :
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=audio_file,
model_id="eleven_multilingual_sts_v2",
remove_background_noise=True,
)
L'entrée plus propre produit presque toujours une meilleure conversion — le modèle essaie de faire correspondre les phonèmes et la prosodie, et le bruit de fond gêne.
Entrée PCM à faible latence
Si vous avez déjà du PCM brut 16-bit mono @ 16kHz, passer file_format="pcm_s16le_16" saute le décodage et réduit la latence :
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=pcm_bytes,
model_id="eleven_multilingual_sts_v2",
file_format="pcm_s16le_16",
)
Associez ceci à optimize_streaming_latency (0–4) comme paramètre de query pour des réductions de latence supplémentaires avec un coût de qualité.
Formats de sortie
| Format | Description |
|---|---|
mp3_44100_128 |
MP3 44,1kHz 128kbps (par défaut) — bon pour web/apps |
mp3_44100_192 |
MP3 44,1kHz 192kbps (Creator+) — qualité supérieure |
mp3_44100_64 |
MP3 44,1kHz 64kbps — fichiers plus petits |
mp3_22050_32 |
MP3 22,05kHz 32kbps — plus petit MP3 |
pcm_16000 |
PCM brut 16kHz — pipelines temps réel |
pcm_24000 |
PCM brut 24kHz — bon équilibre streaming |
pcm_44100 |
PCM brut 44,1kHz (Pro+) — qualité CD |
pcm_48000 |
PCM brut 48kHz (Pro+) — meilleure qualité |
ulaw_8000 |
μ-law 8kHz — Twilio / téléphonie |
alaw_8000 |
A-law 8kHz — téléphonie |
opus_48000_64 |
Opus 48kHz 64kbps — streaming efficace |
Sortie déterministe
Passez une seed pour faire en sorte que les conversions répétées de la même entrée retournent (au meilleur effort) un audio identique — utile pour les tests et les comparaisons A/B.
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=audio_file,
model_id="eleven_multilingual_sts_v2",
seed=12345,
)
Bonnes pratiques pour l'audio d'entrée
La qualité de conversion est limitée par l'enregistrement d'entrée — le modèle ne peut que changer le timbre, pas sauver une mauvaise source. Quelques règles pratiques :
- Soyez expressif. Chuchotez, criez, riez, pleurez — le modèle préserve tout. Une entrée plate vous donne une sortie plate.
- Surveillez le gain du microphone. Trop faible et le modèle sous-détecte les phonèmes ; trop fort et l'écrêtage saigne dans la conversion. Visez des crêtes saines, pas d'écrêtage.
- L'accent et le débit proviennent de la source, pas de la cible. Si vous lisez avec un accent américain et ciblez la voix britannique "George", vous obtenez le timbre de George avec un accent américain. Pour doubler dans un accent ou une langue différente, enregistrez quelqu'un parlant dans cet accent/cette langue cible et convertissez en voix clonée/bibliothèque.
- Nettoyez d'abord le bruit. Soit passez
remove_background_noise=True, soit exécutez la source via la skill voice-isolator avant la conversion. Le bruit nuit plus ici que dans TTS. - Divisez les longs enregistrements. Tout ce qui dépasse 5 minutes doit être fragmenté. Coupez aux pauses naturelles, convertissez chaque partie, et concaténez l'audio résultant.
Workflows courants
- Re-voix une narration — conservez la performance d'un enregistrement brouillon, échangez une voix de narrateur différente.
- Localiser / doubler — convertissez un voix-off en voix clonée du même locuteur dans une autre langue (en utilisant
eleven_multilingual_sts_v2). - Créer des voix de personnage — jouez une ligne vous-même, convertissez en voix de personnage distinctive pour jeux ou animation.
- Anonymiser un locuteur — remplacez une voix reconnaissable par une voix prédéfinie neutre tout en préservant ce qui a été dit et comment.
- Associer à voice-isolator — isolez d'abord la voix source (ou définissez
remove_background_noise=True) pour les enregistrements bruyants de terrain avant la conversion. - Associer au clonage de voix — clonez une voix cible à partir d'un court échantillon, puis utilisez son
voice_idici comme cible de conversion.
Gestion des erreurs
try:
audio_stream = client.speech_to_speech.convert(
voice_id="JBFqnCBsd6RMkjVDRZzb",
audio=audio_file,
model_id="eleven_multilingual_sts_v2",
)
except Exception as e:
print(f"Voice changer failed: {e}")
Erreurs courantes :
- 401 : Clé API invalide
- 422 : Paramètres invalides (vérifiez
voice_id,model_idoufile_formatpar rapport à l'audio fourni) - 429 : Limite de débit dépassée