Que fait natural-voice ?
La plupart des voix off ElevenLabs dites « robotiques » ne sont pas un problème de voix. Ce sont un problème de script. Le modèle lit exactement ce qu'on lui donne, et un script écrit pour l'œil (titres, fragments en points, chiffres, tirets) ressort saccadé, peu importe la voix qui le lit.
Trois outils dans ce dossier sont réellement exécutables. Utilisez-les ; ne jugez pas le flux en lisant le texte.
python3 speakable.py script.txt # est-ce écrit pour l'oreille ?
python3 takes.py script.txt --voice VOICE_ID # prises seedées (payant, demande d'abord)
python3 gaps.py takes/ # classe les prises par les pauses intra-phrase
Tous les trois sont en Python 3.9+ pur, sans paquets. gaps.py utilise ffmpeg s'il est dans le PATH pour confirmer les pauses avec l'audio lui-même.
Le cycle
1. Diagnostiquez avant de changer quoi que ce soit. S'il existe déjà une prise, lancez gaps.py dessus. Une pause de plus de 0,2 s à l'intérieur d'une phrase (pas après une virgule ou un point) est ce que les gens entendent comme « IA ». Dans notre propre prise de départ, la voix s'est arrêtée 0,3 s avant « run » et à nouveau avant « Instagram », en plein milieu de l'accroche. Rien dans notre montage ne l'a causé : les pauses étaient dans le fichier brut.
2. Réécrivez pour l'oreille. Lancez speakable.py et corrigez chaque drapeau. Les règles :
- Phrases, pas de titres. « 13 compétences Claude gratuites gèrent maintenant votre Instagram. » est un titre. « Treize compétences Claude gratuites gèrent tout votre Instagram. » est ce qu'une personne dit.
- Les listes prennent des virgules, pas des points. « Reels. Légendes. Carrousels. » oblige le modèle à s'arrêter trois fois. « reels, légendes, carrousels, stories » coule.
- Les nombres en toutes lettres dans la ligne parlée : « quatre-vingt-quatre sur cent », pas « 84 sur 100 ». Le texte à l'écran peut garder les chiffres.
- Les contractions (t'as, c'est, on va). Personne ne dit « tu as » à voix haute.
- Reliez les fragments avec « donc », « et », « puis ». Un connecteur est un signal pour que le modèle continue.
- Pas de tirets. ElevenLabs traite un tiret comme une courte pause et dit lui-même que c'est « moins cohérent ». Utilisez une virgule pour continuer, ou des points de suspension pour une pause.
- Pas de SSML.
<break time="1s"/>n'est pas pris en charge sur Eleven v4 ou v3.
3. Dirigez-le. Eleven v4 accepte des tags audio entre crochets. Mettez un tag au début d'un segment, pas sur chaque ligne, et faites-le correspondre à ce que fait la ligne. Voir tags.md pour la liste. speakable.py signale les tags qu'il ne connaît pas, car un tag inconnu peut être lu comme un effet sonore.
[excited] Treize compétences Claude gratuites gèrent tout votre Instagram.
[mischievously] Alors on l'a laissé écrire ce Reel...
La ponctuation est aussi une direction. Des points de suspension ajoutent une pause pesante, un point d'exclamation ajoute de l'énergie, et les MAJUSCULES ajoutent de l'emphase (utilisez-les une fois, sur le mot important).
4. Réglages. Sur eleven_v4 :
| réglage | utilisation | pourquoi |
|---|---|---|
| stability | 0,30 à 0,40 | Plus bas donne une « gamme émotionnelle plus large » ; le défaut 0,5 est plus plat. En dessous de 0,3 une prise peut dériver. |
| similarity_boost | 0,75 | le défaut ; conserve la voix elle-même |
| style | 0 | le défaut ; tout autre chose ajoute de la latence |
| speed | 1,0 à 1,08 | la plage autorisée est 0,7 à 1,2 ; une voix off sociale se situe juste au-dessus de 1 |
5. Trois prises, même texte, graines différentes. Une seule prise est un coup de pile ou face. Lancez takes.py avec les graines 1, 2 et 3, puis gaps.py pour les classer. Écoutez les deux premières et choisissez à l'oreille. Gardez la graine : elle permet une réexécution proche de la même prise (ElevenLabs appelle cela « best effort », non garanti).
6. Montez doucement. Si votre éditeur coupe les silences, conservez environ une seconde après les phrases et la majeure partie d'une seconde après les virgules. Des pauses coupées à la même courte longueur à chaque fois sont l'autre chose qui sonne artificiel.
7. Ça sonne toujours généré ? Arrêtez de tourner les boutons. Enregistrez-vous en disant la ligne sur votre téléphone et passez-la dans le Voice Changer (speech-to-speech) d'ElevenLabs vers la voix que vous voulez. Votre rythme, votre emphase et votre émotion sont conservés ; seule la voix change.
Ce que nous avons mesuré
Sur l'un de nos propres Reels (les fichiers sont dans examples/) :
| avant | après | |
|---|---|---|
| script | écrit pour l'œil : fragments, chiffres | écrit pour l'oreille : speakable.py propre |
| tags | aucun | [excited], [mischievously] |
| réglages | stability 0,5, speed 1,0 | stability 0,35, speed 1,05 |
| prises | 1 | 3 graines, choisies par gaps.py puis à l'oreille |
speakable.py | 65, REWRITE (une liste en points, chiffres, pas de tags) | 100, SPEAKABLE |
| pauses dans les phrases | 0,34 s entre « now » et « run », dans l'accroche | aucune |
La voix a aussi changé (Will en Chris), donc ce n'est pas un test en laboratoire d'un seul réglage. La réécriture du script a fait la plus grande différence que nous ayons entendue.
Règles
- N'envoyez jamais une requête payante sans dire combien elle coûte.
takes.pyaffiche le nombre de caractères et s'arrête sauf si vous passez--yes. - N'imprimez ni ne commitez jamais la clé API.
takes.pylitELEVENLABS_API_KEYà partir de l'environnement et rien d'autre. - Étiquetez-la. Si la voix est générée, activez l'étiquette IA de la plateforme.