Sopro TTS : modèle TTS de 169 millions de paramètres, compatible clonage vocal zero-shot et exécutable sur CPU
(github.com/samuel-vitorino)- Sopro TTS est un modèle léger de synthèse texte-parole en anglais, compatible avec le clonage vocal zero-shot et la génération en streaming
- Il compte 169 millions de paramètres et génère 30 secondes d’audio en environ 7,5 secondes sur CPU à 0,25 RTF
- Il peut cloner la voix d’un locuteur à partir de 3 à 12 secondes d’audio de référence seulement, et utilise une architecture de convolutions dilatées de style WaveNet et cross-attention légère
- Projet à petit budget entraîné sur un seul GPU L40S, avec une marge d’amélioration des performances si la qualité des données progresse
- Compatible avec les modes streaming et non streaming, ainsi qu’avec une CLI, une API Python et une démo web, ce qui le rend très pratique pour l’expérimentation et l’intégration côté développeur
Présentation de Sopro TTS
- Sopro signifie « souffle » en portugais, et a été développé comme modèle TTS léger en anglais
- Architecture combinant convolutions dilatées et cross-attention au lieu d’un Transformer
- Projet personnel entraîné sur un seul GPU L40S
- Principales caractéristiques
- 169M paramètres, prise en charge du streaming, clonage vocal zero-shot
- 0,25 RTF sur CPU, avec génération de 30 secondes d’audio en 7,5 secondes
- Clonage vocal possible à partir de 3 à 12 secondes d’audio de référence
Installation et exécution
- Seules les versions minimales des dépendances sont imposées, ce qui permet l’installation sans créer d’environnement dédié
- Exemple : la version
torch==2.6.0apporte environ 3× de performances sur un CPU M3
- Exemple : la version
- Méthodes d’installation
- PyPI :
pip install sopro - Dépôt GitHub :
git clonepuispip install -e .
- PyPI :
Exemples d’utilisation
- Exemple d’exécution en CLI
- Possibilité de définir le texte, l’audio de référence et le fichier de sortie
- Paramètres de contrôle avancés disponibles, comme
--style_strength,--no_stop_head,--stop_threshold,--stop_patience
- Exemple d’API Python
- Chargement du modèle avec
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") - Compatible à la fois avec les modes non streaming et streaming
- En mode streaming, les chunks audio générés peuvent être assemblés séquentiellement
- Chargement du modèle avec
Démo interactive en streaming
- Après installation, lancement d’un serveur local avec la commande
uvicorn demo.server:app - Possibilité également de construire et lancer avec Docker
docker build -t sopro-demo .docker run --rm -p 8000:8000 sopro-demo
- La démo est accessible dans le navigateur via
http://localhost:8000
Précautions et limites
- Manque possible de cohérence dans la sortie, pouvant nécessiter des ajustements de paramètres
- La qualité du clonage vocal dépend fortement de la qualité du micro et du bruit ambiant
- La version non streaming offre une meilleure qualité audio
- La longueur de génération est limitée à environ 32 secondes (400 frames) ; au-delà, des sorties hallucinées peuvent apparaître
- ffmpeg est requis avec torchaudio ; l’usage de
soundfileest recommandé - Les données d’entraînement sont sous forme pré-tokenisée ; les audios d’origine ont été supprimés pour des raisons d’espace de stockage
- Des projets futurs mentionnent la publication du code d’entraînement et l’extension du support multilingue
Données d’entraînement
- Utilisation des jeux de données Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22, MLS
Références et technologies de base
- Exploite des recherches et bases de code comme Mimi Codec (Kyutai), WaveNet, Attentive Stats Pooling, AudioLM, CSM
1 commentaires
Avis Hacker News
Projet sympa et utile
Personnellement, je pense que Chatterbox-TTS-Server est la meilleure alternative
C’est plus lent, mais la qualité audio est assez élevée
Je trouve ce modèle très puissant, car il permet le clonage vocal et un contrôle manuel des émotions via des vecteurs d’émotion
Il a été particulièrement utile dans mon projet actuel d’orchestration de modèles
Un modèle externe de classification des émotions contrôle à la fois le persona du LLM et la sortie TTS pour garder une cohérence
La probabilité de récupération de la « mémoire » varie aussi selon l’état émotionnel, et il existe très peu de TTS offrant un contrôle aussi fin qu’IndexTTS2
La sortie de Sopro TTS est vraiment mauvaise d’après la vidéo GitHub, au point d’être inutilisable en pratique
À l’inverse, Chatterbox produit des résultats étonnants
J’ai une RTX5090, et c’est très rapide, avec environ 2 secondes de runtime pour générer 1 seconde d’audio
Vous pouvez voir le premier exemple et le deuxième exemple. Le second est une démo clonant la voix du youtubeur ArbitorIan
Vraiment super !
J’utilise Kokoro (82M) en local, et ça fonctionne vite avec une qualité audio excellente
J’utilise ricky0123/vad pour l’activation vocale, puis la Web Speech API pour une reconnaissance rapide avant de passer à un TTS commercial
Je n’ai pas encore trouvé de solution open source vraiment rapide
Je me demandais ce que voulait dire « zero-shot »
few-shot consiste à guider le modèle avec quelques exemples, et multi-shot à passer par plusieurs prompts et itérations de correction
On dirait du clonage vocal niveau Mission Impossible sans longue phase de compilation
Je partage aussi la vidéo YouTube associée et un poème en forme de jeu de langage
Je l’ai testé en anglais et c’était assez impressionnant
Pour un projet à petit budget, le résultat était étonnant, et c’était très simple à utiliser
S’il existait une version allemande, je l’utiliserais volontiers
C’est assez impressionnant compte tenu des contraintes
Je me demande s’il est prévu de publier une version plus puissante, avec moins d’artefacts et plus gourmande en calcul
J’utilise surtout Chatterbox, mais si ça évolue vers une haute qualité, cela pourrait devenir une bonne alternative
Le coût de calcul est assez élevé, mais si la réaction de la communauté est bonne, j’ai l’intention de le faire évoluer
À noter que Chatterbox est un excellent modèle et une source d’inspiration
Je me demandais ce que signifiait « zero-shot »
C’est encore plus arbitraire que la notation Big O
Autrement dit, si le modèle apprend la probabilité conditionnelle P(Audio|Voice) et peut échantillonner pour des classes vocales jamais vues pendant l’entraînement, alors c’est du zero-shot
Fournir un audio de référence ne modifie pas les poids du modèle, cela relève plutôt du contexte fourni
J’ai écouté l’audio et j’ai été surpris par une qualité sonore absolument affreuse
C’est pire qu’une voix synthétique d’il y a 15 ans, et je ne comprends pas pourquoi certains trouvent ça bon
J’ai testé sur plusieurs navigateurs et c’était identique
Si c’est à ce point, il y a peut-être un autre problème, donc j’aimerais bien regarder ça avec toi
C’est une technologie vraiment impressionnante
Ça va sûrement encore s’améliorer
Mais même comme solution temporaire, ce serait bien d’ajouter un post-traitement audio simple pour atténuer la rugosité de la voix (razziness)
Je me demande s’il existe parmi ces modèles des versions fonctionnant comme un modulateur vocal speech-to-speech
C’est-à-dire un système qui prend un échantillon vocal fixe (prompt) et un flux audio entrant en temps réel, puis convertit la voix d’entrée selon le ton et le timbre du prompt
Pour un V-tuber, il n’y aurait pas besoin de changer souvent le prompt, donc on pourrait aussi imaginer appliquer un timbre fixe avec un seul fine-tuning
En revanche, il faut implémenter soi-même le streaming
Il prend en entrée l’audio A (style) et B (contenu), puis combine le timbre de A avec la prononciation et l’intonation de B
En réalité, ce type de modèle relève davantage du S+STS (speech+style to speech) que du simple « TTS »
C’est expliqué en détail dans leur blog officiel
Cela dit, il y a eu des conflits entre le créateur d’origine et des développeurs, donc mieux vaut éviter le fork principal et chercher un fork récent maintenu en anglais