voice-changer

Par elevenlabs · skills

Transformez la voix d'un enregistrement audio en une voix cible différente tout en préservant les émotions, le timing et le jeu vocal, grâce à l'API ElevenLabs Voice Changer (speech-to-speech). À utiliser pour convertir une voix en une autre, changer le locuteur/narrateur d'un enregistrement existant, doubler une voix off dans une voix différente, créer des voix de personnages à partir d'une performance brute, anonymiser un locuteur, ou toute tâche de « conversion vocale / transfert de voix / speech-to-speech ». Veillez à utiliser cette skill chaque fois que l'utilisateur mentionne le changement de voix, la conversion vocale, le speech-to-speech, le remplacement d'une voix dans un audio, le re-voicing d'un clip, ou l'application d'une voix différente à un enregistrement existant — même s'il ne dit pas explicitement « voice changer ».

npx skills add https://github.com/elevenlabs/skills --skill voice-changer

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 souvent eleven_english_sts_v2 mê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_id ici 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_id ou file_format par rapport à l'audio fourni)
  • 429 : Limite de débit dépassée

Références

Skills similaires