KokoroSharp : TTS local, rapide et multi‑plateforme

KokoroSharp est un moteur d'inférence pour Kokoro TTS, écrit en C# et propulsé par ONNX Runtime. Il permet de synthétiser de la voix localement, hors ligne, avec prise en charge de multiples voix et langues.

Installation

# .NET CLI
dotnet add package KokoroSharp.CPU

Pour l'accélération GPU, consultez RUNNING_ON_GPU.md sur le dépôt GitHub. Les voix officielles (Hexgrad Kokoro 82M v1.0) sont incluses dans le package NuGet.

Démarrage rapide

using KokoroSharp;

// Charger ou télécharger le modèle (~320 Mo en précision complète)
KokoroTTS tts = KokoroTTS.LoadModel();

// Choisir une voix (incluse dans le package NuGet)
KokoroVoice heart = KokoroVoiceManager.GetVoice("af_heart");

// Parler une phrase (détection de langue automatique selon la voix)
tts.SpeakFast("Bonjour le monde", heart);
Streaming par segments
using KokoroSharp;
using System.Threading.Channels;

var tts = KokoroTTS.LoadModel();
var voice = KokoroVoiceManager.GetVoice("af_alloy");

// Diffuser les segments au fil de la synthèse
await foreach (var segment in tts.StreamSegmentsAsync("Texte long à lire", voice))
{
    // segment.Audio contient des octets PCM que vous pouvez mettre en file d'attente dans un lecteur
    Console.WriteLine($"Segment reçu: {segment.Index}, {segment.DurationMs}ms");
}
Mixage de voix
using KokoroSharp;

var tts = KokoroTTS.LoadModel();
var mix = new KokoroVoiceMix()
    .Add(KokoroVoiceManager.GetVoice("af_heart"), weight: 0.6f)
    .Add(KokoroVoiceManager.GetVoice("af_alloy"), weight: 0.4f);

tts.SpeakFast("Mixage de voix en temps réel", mix);

Fonctionnalités clés

FonctionnalitéDescription
Plug & Play (NuGet)Dépendances gérées automatiquement
Voix inclusesVoix officielles Hexgrad Kokoro 82M v1.0
Interface haut-niveauAPI simple pour tous les profils
Streaming de segmentsSynthèse progressive pour une latence perçue faible
Mixage de voixCombiner plusieurs voix avec des poids libres
Programmation linéairePlanification des jobs et file d'attente audio
Lecture multi‑plateformePrise en charge optionnelle des sorties audio

Notes et bonnes pratiques

  • La détection de langue est automatique selon la voix chargée.
  • Le répertoire 'voices' est copié automatiquement dans le dossier de build.
  • La phonémisation intégrée repose sur eSpeak NG selon la plateforme.
  • Vous pouvez charger un modèle spécifique avec KokoroTTS.LoadModel(path).
  • Le tokeniseur intégré peut être contourné si vous fournissez des phonèmes.
Écrit le 2025-08-26