Cloner ma voix pour lire ce blog en six langues
Écouter l'article (expérimental) · 11:54

Ce site publie en six langues : anglais, portugais, espagnol, allemand, français et italien. Pendant un temps, cette promesse ne valait que pour le texte. Vous pouviez lire n'importe quel article dans votre langue, mais pour écouter dans les transports ou en cuisinant, il n'y avait aucun bouton lecture à presser. Ajouter l'audio était l'étape suivante évidente. La question intéressante était de savoir à qui devait appartenir la voix.
Premier round : une voix qui part en production
La première version utilisait des voix de synthèse neuronale gratuites, une par langue. C'était le bon premier pas : coût nul, intégration en quelques minutes, et un lecteur fonctionnel sur chaque article. C'est aussi sa mise en ligne qui a révélé le vrai niveau d'exigence. Les voix étaient propres mais formelles, elles lisaient mes phrases avec la cadence de quelqu'un d'autre, et un site personnel narré par une voix générique reste un pis-aller. Mon nom figure sur les textes. La voix qui les lit devrait être la mienne aussi, y compris dans les cinq langues que je ne suis pas près de narrer moi-même.
Le déclic : un modèle local qui clone
La pièce qui a rendu tout cela réalisable est Chatterbox Multilingual, un modèle TTS open source sous licence MIT de Resemble AI. Trois propriétés en faisaient le bon choix :
- Il couvre mes six langues avec un seul modèle.
- Il tourne sur un GPU grand public. Le mien est une RTX 3080, et la génération consomme environ 5,5 Go de VRAM.
- Il fait du clonage vocal zero-shot : donnez-lui un court enregistrement de référence, et il lit n'importe quel texte avec cette voix, dans n'importe laquelle de ses langues.
Ce dernier point est toute la fonctionnalité. Pas de studio, pas d'entraînement, pas de jeu de données où je parle pendant des heures. La référence qui pilote tout sur ce site est un enregistrement que j'ai fait à mon ordinateur dans une pièce calme : environ quarante secondes de moi lisant un de mes propres articles en portugais, à un rythme normal.
Pourquoi l'enregistrement de référence compte
Par défaut, la voix d'origine du modèle n'était déjà pas la mienne, et elle tirait en plus vers le brésilien en portugais, ce qui n'est pas ma façon de parler. Il n'existe aucun menu de voix pour corriger cela, aucune option « homme, portugais européen » à sélectionner. La voix est entièrement déterminée par l'audio de référence sur lequel on conditionne le modèle, donc ces quarante secondes étaient mon seul levier, et elles ont beaucoup déplacé les choses. Le timbre, le registre et le rythme sont reconnaissables comme les miens dans chacune des langues. L'accent, lui, n'a suivi qu'en partie : la narration est bien plus proche du portugais européen que ne l'était la voix d'origine, mais elle dérive encore par endroits vers une cadence brésilienne, parce que le modèle a appris son portugais sur des données où la variante brésilienne domine, et quarante secondes de moi infléchissent cet a priori sans l'effacer.
Ce qui me surprend encore, c'est que la référence est uniquement en portugais. Je n'ai jamais enregistré d'échantillon en anglais, ni en espagnol, ni en allemand, français ou italien. Les mêmes quarante secondes de portugais pilotent les six langues : le modèle extrait de l'enregistrement ce à quoi ma voix ressemble et l'applique à la langue qu'on lui demande de lire ensuite.
Deux notes de réglage tirées de la mise au point du rendu :
- Le débit par défaut était trop rapide pour une écoute au long cours. Abaisser le poids de guidage du modèle (cfg_weight 0.3) et adoucir l'expressivité a produit une lecture plus posée, adaptée à un article. Ces réglages sont figés dans le pipeline, donc chaque fichier sort avec le même rendu.
- En anglais, la voix clonée porte mon accent portugais. Je l'ai gardé. Un site personnel qui sonnerait soudain comme un natif de Californie en anglais et comme moi en portugais serait plus étrange qu'un accent, et l'accent est la version fidèle à la réalité.
Le pipeline
La marque de fabrique de ce site, c'est l'IA en production, donc la narration devait être un système, pas un lot de fichiers générés une fois pour toutes. L'ensemble se lance avec une seule commande, node scripts/generate-audio.mjs, et fait ce qui suit :
- Il parcourt chaque article dans chaque langue et compare les horodatages des fichiers, de sorte que seuls les articles nouveaux ou modifiés sont régénérés. Publier un nouveau billet revient à écrire le markdown et à lancer le script.
- Il confie les textes à un worker Python qui charge Chatterbox une seule fois et le garde en mémoire, au lieu de payer le chargement du modèle à chaque fichier.
- Il lit chaque article segment par segment et assemble l'audio avec des pauses naturelles, ce qui évite qu'une lecture de 15 minutes ressemble à un seul paragraphe dit sans reprendre son souffle.
- Il normalise le volume de chaque fichier. La sortie brute du modèle tournait autour de moins 41 LUFS, un chuchotement à côté de n'importe quel podcast. Tout est remonté au niveau sonore d'un podcast, autour de moins 16 à moins 18 LUFS, pour que le lecteur s'insère confortablement après ce que vous avez écouté en dernier.
- Il écrit le résultat sous forme d'un simple MP3 par article et par langue. L'audio est livré avec le site comme n'importe quel autre asset statique : pas de service de streaming, pas de lecteur tiers, pas de tracking.
Le contrôle qualité tourne dans le sens inverse : après un lot, des extraits de l'audio généré passent par Whisper, le modèle de reconnaissance vocale, et les transcriptions sont confrontées au texte source. C'est aujourd'hui un contrôle par échantillonnage, pas une barrière automatique dans le pipeline, et il a déjà attrapé ce que mon oreille n'aurait jamais entendu, dans les quatre langues que je ne peux pas relire à l'oreille.
Les chiffres, pour que vous puissiez dimensionner cela pour votre propre configuration : la génération par segments prend environ deux fois la durée de l'audio final, donc un long article coûte 25 à 30 minutes de temps GPU par langue. Le catalogue complet, cinq articles fois six langues, représente environ douze heures de traitement. L'enregistrement de référence n'entre jamais dans le dépôt ; le script le lit depuis un dossier local et le dépôt ne voit jamais que les MP3 finis.
Ce qu'un long batch vous apprend
Un traitement de douze heures trouvera vos points faibles. Ma première exécution complète est morte en cours de route quand le processus qui l'avait lancée a été arrêté, une panne classique des longs traitements. Ce qui l'a sauvée, c'est la même conception qui rend la publication peu coûteuse : parce que le pipeline est incrémental et que chaque fichier terminé est durable, le crash n'a coûté que le fichier en cours d'encodage, et même celui-là était récupérable depuis sa sortie temporaire. Relancez la commande et elle reprend là où la dernière exécution s'était arrêtée. Si vous construisez un pipeline de génération de longue durée, quel qu'il soit, cette propriété, la reprise par défaut, vaut plus qu'une barre de progression.
Ce que ça donne à l'écoute aujourd'hui
Je ne vais pas survendre le résultat. La narration est tout à fait écoutable et c'est indéniablement moi, et il reste des aspérités : de temps en temps une phrase sort tronquée, ou un segment bégaie comme un disque rayé avant de se rattraper. Et le portugais garde la dérive décrite plus haut. C'est mon timbre qui lit mes mots, avec une cadence qu'une oreille portugaise repérera par endroits comme tirant vers le brésilien. Assez discret pour que je le publie, assez présent pour que je le consigne ici par écrit. Les contrôles par échantillonnage avec Whisper attrapent les échecs grossiers ; les plus subtils passent entre les mailles, et dans quatre de ces langues je ne les entendrais jamais moi-même. Je traite donc l'audio pour ce qu'il est aujourd'hui, un compagnon de lecture. Lancez la lecture pendant que vous lisez et il vous porte à travers le texte. Les prochaines itérations se dessinent déjà d'ici : un enregistrement de référence plus long et plus propre pour ramener l'accent encore plus près du mien, et la transformation du contrôle qualité en boucle de réparation, où tout segment dont la transcription s'écarte de la source est régénéré automatiquement, pour que chaque fichier publié converge vers une version propre.
La frontière du consentement
Il a fallu quarante secondes d'audio pour produire une copie convaincante de ma voix, sur un GPU de gamer, avec du logiciel gratuit. C'est vrai de votre voix aussi.
Je suis à l'aise pour publier ceci pour une seule raison : c'est ma voix, clonée par moi, avec mon consentement, lisant mes propres mots, et étiquetée pour ce qu'elle est. La même capacité pointée vers la voix de quelqu'un d'autre sans permission est une fraude, et le fait que la barrière tienne désormais dans un court enregistrement signifie que la charge de la preuve a changé de camp. La voix seule n'authentifie plus personne. Si votre entreprise considère encore « on dirait le PDG au téléphone » comme une autorisation, ce paragraphe est votre rapport d'incident venu du futur.
Ce que ça coûte
Une fois la mise en place initiale faite, le coût marginal pour narrer un nouvel article en six langues se résume à quelques heures de GPU en tâche de fond et à l'électricité correspondante. Il n'y a aucun frais d'API au caractère, et aucun texte d'article ne quitte jamais ma machine. Les plateformes vocales hébergées clonent avec plus de finition, et pour des produits commerciaux dont la narration est le cœur elles méritent d'être évaluées, mais pour un site personnel la voie locale gagne sur le coût, la confidentialité et le contrôle, et elle réduit toute la fonctionnalité à deux ou trois scripts dans un dépôt.
Chaque article de ce site a désormais un lecteur en haut de page. Choisissez une langue, lancez la lecture et suivez le texte : vous entendrez ce texte à peu près comme je vous le lirais, à un accent près que j'ai décidé de garder, et à quelques syllabes près que le modèle apprend encore à poser.
Les questions auxquelles cet article répond
Peut-on vraiment cloner une voix à partir d'un enregistrement de quarante secondes ?
Oui, et sans entraînement, sans studio et sans jeu de données de plusieurs heures de parole. Chatterbox Multilingual, le modèle open source sous licence MIT de Resemble AI, fait du clonage vocal zero-shot : on le conditionne sur un court enregistrement de référence et il lit n'importe quel texte avec cette voix. Il tourne en local sur une RTX 3080 et consomme environ 5,5 Go de VRAM.
Faut-il un échantillon de voix pour chaque langue ?
Non. La référence derrière chaque fichier de ce site est uniquement en portugais, environ quarante secondes de lecture d'un article à un rythme normal, et rien n'a jamais été enregistré en anglais, en espagnol, en allemand, en français ou en italien. Le modèle extrait de cet enregistrement ce à quoi la voix ressemble et l'applique à la langue qu'on lui demande de lire ensuite.
Est-ce que ça ressemble vraiment à votre voix, ou est-ce généreux de le dire ?
C'est tout à fait écoutable et c'est indéniablement mon timbre, avec des aspérités que je préfère dire plutôt que masquer. De temps en temps une phrase sort tronquée ou un segment bégaie comme un disque rayé avant de se rattraper, et le portugais garde par endroits une cadence tirant vers le brésilien. Les transcriptions Whisper d'extraits échantillonnés attrapent les échecs grossiers, les plus subtils passent entre les mailles, et dans quatre de ces langues je ne les entendrais jamais moi-même. L'audio est donc aujourd'hui un compagnon du texte, pas un remplacement de la lecture.
Combien de temps et combien ça coûte de narrer un article en six langues ?
La génération par segments prend environ deux fois la durée de l'audio final, donc un long article coûte 25 à 30 minutes de temps GPU par langue, et le catalogue complet, cinq articles fois six langues, a représenté environ douze heures de traitement. Une fois la mise en place initiale faite, le coût marginal d'un nouvel article se résume à quelques heures de GPU en tâche de fond et à l'électricité correspondante : aucun frais d'API au caractère, et aucun texte d'article ne quitte la machine. Les plateformes hébergées clonent avec plus de finition et méritent d'être évaluées quand la narration est au cœur d'un produit commercial, mais pour un site personnel la voie locale gagne sur le coût, la confidentialité et le contrôle.
À lire ensuite
AIQuand l'IA doit filmer sa propre relecture
Quand une pull request est ouverte, la mienne ou une autre que je dois relire, je demande désormais à l'agent de la lancer sur ma machine, d'essayer de la casser et de se filmer en train de le faire. Un paragraphe peut affirmer qu'un test a eu lieu. Un enregistrement doit le montrer, et décider de ce qu'il signifie reste mon travail.
AIJev répond en probabilités. La question reste la vôtre.
Jev, de TypeSafe, n'écrira pas une phrase. Vous lui tendez un état et des questions typées, et il vous rend un choix, un score ou une probabilité oui/non, pour quatre millièmes de centime par décision sur mille tokens. La nouveauté, c'est la forme, qui remet l'autorité dans votre code, et le piège, c'est qu'une probabilité ressemble à un recours et n'en est pas un. J'ai lancé le pilote qu'il me faudrait avant de croire le moindre chiffre, sur mes propres essais avec le modèle ouvert qui a servi de doublure à Jev, et la réponse a été non.