3 points par GN⁺ 2026-01-10 | 1 commentaires | Partager sur WhatsApp
  • 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.0 apporte environ 3× de performances sur un CPU M3
  • Méthodes d’installation
    • PyPI : pip install sopro
    • Dépôt GitHub : git clone puis pip install -e .

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

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 soundfile est 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

 
GN⁺ 2026-01-10
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

    • Moi, je préfère IndexTTS2
      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
    • Mais la qualité de sortie de Chatterbox-TTS est bien meilleure
      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

    • Quelqu’un connaît une bonne stack open source d’assistant vocal ?
      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
    • J’ai aussi testé Kokoro-JS dans le navigateur, mais la latence était trop élevée et la langue que je voulais n’était pas prise en charge, ce qui était dommage
  • Je me demandais ce que voulait dire « zero-shot »

    • zero-shot, c’est une façon de faire fonctionner un modèle avec un seul prompt (ou avec du contexte additionnel sous forme de fichier)
      few-shot consiste à guider le modèle avec quelques exemples, et multi-shot à passer par plusieurs prompts et itérations de correction
    • Ici, ça semble vouloir dire qu’on peut obtenir un bon clone sans fournir d’autre échantillon vocal
  • 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

    • En revanche, c’est uniquement en anglais, donc je n’ai pas pu essayer d’autres langues
      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

    • C’est mon side project
      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 »

    • Je pense que ces termes en *-shot sont en pratique du jargon marketing dénué de sens
      C’est encore plus arbitraire que la notation Big O
    • Selon la définition de Wikipedia, le zero-shot est un cadre où l’on prédit au test des échantillons de classes jamais vues à l’entraînement
      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

    • Certaines voix de référence peuvent provoquer une dégradation de qualité
      Si c’est à ce point, il y a peut-être un autre problème, donc j’aimerais bien regarder ça avec toi
    • Si cet échantillon est le meilleur de la démo, la distorsion de prononciation était si forte que j’ai eu un rejet immédiat
    • Pendant un instant, j’ai cru que c’était la voix de RFK
    • J’ai essayé plusieurs voix, mais l’audio généré ne leur ressemblait pas du tout, et ce n’était même pas une voix correcte
    • Moi aussi, j’ai eu du mal à y croire en l’écoutant. C’était une qualité sonore pénible au point qu’il était difficile d’en supporter plus d’une minute
  • 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

    • Chatterbox TTS prend en charge cela en mode « voice cloning »
      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 »
    • Je ne connais pas d’option open source, mais ElevenLabs met cette idée en œuvre depuis longtemps
      C’est expliqué en détail dans leur blog officiel
    • RVC (Retrieval Voice Conversion) est aussi un bon convertisseur vocal open source
      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
    • En pratique, beaucoup de V-tubers utilisent ce genre de technologie, donc il doit clairement exister des solutions stables