TTS Diphone
Lectura TTS Diphone
Moteur de concaténation de diphones WORLD — prosodie réglée, retimbre multi-voix, 44.1 kHz
Présentation
Moteur de synthèse vocale pour le français basé sur la concaténation de diphones dans le domaine WORLD (F0 + spectral envelope + aperiodicity). Produit un signal audio haute fidélité à 44100 Hz avec une prosodie réglée (intonation, pauses, expressivité).
| Caractéristique | Valeur |
|---|---|
| Qualité | Voix féminine claire (corpus SIWIS) |
| Sortie | Audio 44100 Hz, float32 |
| Taille modèle | ~15 Mo (diphones compressés) |
| Entrée | Phonèmes IPA (groupes de lecture) |
| Prosodie | Déclaratif, interrogatif, exclamatif, suspensif |
| Contrôles | Vitesse, pauses, expressivité macro/micro, contraste spectral |
| Retimbre | OpenVoice zero-shot (optionnel) : presets, blend de voix, variantes homme/enfant |
Trois modes de lecture : FLUIDE (lecture naturelle), MOT_A_MOT et SYLLABES — adapté à l’apprentissage de la lecture.
Brique vs Pipeline : Ce moteur est la brique acoustique diphonique (phonèmes → audio). Pour le pipeline complet TTS (texte → audio avec G2P intégré et choix de moteur), voir la page TTS.
Essayer en ligne
Exemple de code
from lectura_diphone import creer_engine
engine = creer_engine()
# Depuis des phonèmes IPA avec contrôles
audio = engine.synthesize_groups(
[
{"phones": ["l", "ə", "s", "ɔ", "l", "ɛ", "j"], "boundary": "none"},
{"phones": ["b", "ʁ", "i", "j"], "boundary": "none"},
{"phones": ["s", "y", "ʁ", "l", "a", "v", "i", "l"], "boundary": "period"},
],
mode="FLUIDE",
duration_scale=1.2,
macro_expressivity=2.0,
micro_expressivity=5.0,
spectral_contrast=1.5,
)
from lectura_diphone import synthetiser
# Synthèse simple (nécessite lectura-g2p)
audio = synthetiser("Le soleil brille sur la ville.")
# Avec retimbre OpenVoice
audio = synthetiser("Bonjour comment allez-vous.", voix="siwis")
# Blend de presets
audio = synthetiser("Bonjour.", voix={"siwis": 0.5, "nadine": 0.3, "ezwa": 0.2})
# Variante vocale (formants décalés)
audio = synthetiser("Bonjour.", voix="siwis", voix_variante=0.3)
Architecture
Phonemes IPA --> Diphone chain
|
WORLD params (F0 + SP + AP)
|
Stretch + Concat (overlap)
|
Prosodie (F0 contour + durees)
|
GV compensation (contraste spectral)
|
pw.synthesize --> Audio 44100 Hz
|
[Retimbre OpenVoice] (optionnel, si voix!=None)
|
Audio final 44100 Hz
Les diphones sont des paramètres WORLD (F0 + spectral envelope + aperiodicity) extraits du corpus SIWIS et moyennés par type de transition phonétique. La prosodie est réglée par des contours F0 adaptés au français (chute déclarative, montée interrogative, pauses aux ponctuations).
Contrôles prosodiques
| Paramètre | Défaut | Description |
|---|---|---|
| duration_scale | 1.0 | Vitesse globale (>1 = plus lent) |
| pause_scale | 1.0 | Durée des pauses intra-phrase (virgules, etc.) |
| sentence_pause_ms | 400 | Pause inter-phrase en ms (entre phrases séparées par . ! ? …) |
| macro_expressivity | 2.0 | Gestes prosodiques aux ponctuations (0=neutre, 4=exagéré) |
| micro_expressivity | 5.0 | Micro-variations (0=robot, 10=très expressif) |
| spectral_contrast | 1.5 | Contraste spectral GV (1.0=off, 2.0=fort) |
| prosody_style | “regles” | Style prosodique : “regles” (LHiLH*, stable) ou “corpus” (extrait du corpus SIWIS, plus varié) |
| seed | None | Graine aléatoire pour micro-prosodie reproductible |
Installation
# Moteur brut (phonèmes → audio)
pip install lectura-diphone # mode API (zero config, zéro dépendance)
pip install "lectura-diphone[local]" # inférence locale (pyworld + numpy + scipy)
# Pipeline complet (texte → audio)
pip install "lectura-tts-dipho[local]" # G2P + moteur local
pip install "lectura-tts-dipho[local,retimbre]" # + retimbre multi-voix (OpenVoice)
| Extra | Package | Contenu |
|---|---|---|
[local] |
lectura-diphone |
Backend local pyworld + numpy + scipy |
[local] |
lectura-tts-dipho |
Pipeline G2P + moteur local |
[retimbre] |
lectura-tts-dipho |
Retimbre multi-voix via OpenVoice |
[aligneur] |
lectura-tts-dipho |
Syllabation pour le mode lecture syllabique (lectura-aligneur) |
Caractéristiques techniques
- Vocoder WORLD : analyse/synthèse haute qualité à 44100 Hz
- 1290 diphones moyennés depuis le corpus SIWIS (~9800 phrases)
- Prosodie française : déclinaison, chute déclarative non-linéaire, montée interrogative, allongement pré-frontière
- GV compensation : restaure le contraste spectral perdu par le moyennage
- 3 modes : FLUIDE, MOT_A_MOT, SYLLABES
- Retimbre OpenVoice (optionnel) : presets, blend pondéré, variantes formantiques
- Python 3.10+ avec type hints complets (PEP-561)
- Licence : AGPL-3.0 (code) — les modèles sont sous licence commerciale