VC ZeroShot
Lectura VC ZeroShot
Conversion vocale zero-shot via OpenVoice v2 — presets, blend de voix, ONNX pur
Présentation
Brique atomique de conversion vocale zero-shot basée sur OpenVoice v2 (ONNX). Transforme n’importe quel audio source vers le timbre d’une voix cible — à partir d’un preset, d’un extrait audio de référence, ou d’un mélange pondéré de plusieurs voix.
| Caractéristique | Valeur |
|---|---|
| Backend | OpenVoice v2 — ONNX Runtime pur (pas de PyTorch) |
| Presets | 6 voix pré-calculées : siwis, ezwa, nadine, bernard, gilles, zeckou |
| Blend | Mélange pondéré de presets ou d’extraits audio |
| Trick SR | Décalage des formants (voix grave/aiguë) via le sample rate |
| Modèles | 2 fichiers ONNX (~126 Mo total) |
| Sortie | Audio @ 22050 Hz |
Brique vs Meta-package : Le VC ZeroShot est la brique OpenVoice seule. Pour le méta-package unifié (ZeroShot + RVC Locuteurs), voir lectura-vc.
Essayer en ligne
Presets de voix
Six voix pré-calculées sont intégrées au package (speaker embeddings moyennées sur 100 échantillons du corpus). Utilisables directement par nom, sans fichier audio de référence.
| Preset | Genre | Description |
|---|---|---|
| siwis | F | Voix féminine claire (corpus SIWIS) |
| ezwa | F | Voix féminine douce |
| nadine | F | Voix féminine naturelle |
| bernard | M | Voix masculine posée |
| gilles | M | Voix masculine grave |
| zeckou | M | Voix masculine dynamique |
Exemple de code
from lectura_vc_zeroshot import creer_engine, PRESET_SPEAKERS
engine = creer_engine()
# Conversion avec un preset
audio, sr = engine.convert(
audio="input.wav",
reference="siwis", # preset par nom
sr_in=16000,
)
# sr == 22050
# Blend de plusieurs presets (poids égaux)
audio, sr = engine.convert(
audio="input.wav",
reference=["siwis", "nadine"],
sr_in=16000,
)
# Blend pondéré
audio, sr = engine.convert(
audio="input.wav",
reference={"siwis": 0.5, "nadine": 0.3, "ezwa": 0.2},
sr_in=16000,
)
# Depuis un fichier audio de référence
audio, sr = engine.convert(
audio="input.wav",
reference="reference_5s.wav",
sr_in=16000,
)
# Variante aiguë (formants décalés via trick SR)
audio, sr = engine.convert(
audio="input.wav",
reference="siwis",
sr_in=16000,
sr_override=11025, # formants x2 (aiguë/enfant)
)
Architecture
Audio source --> OpenVoice SE --> source embedding (1, 256, 1)
Reference --> OpenVoice SE --> target embedding (1, 256, 1)
|
OpenVoice VC (ONNX)
(source audio + src_se + tgt_se + tau)
|
Audio converti @ 22050 Hz
La référence cible est polymorphe :
- str : nom de preset (“siwis”) ou chemin vers un fichier audio
- ndarray : audio brut (1D) ou speaker embedding (1, 256, 1)
- list : plusieurs références (poids égaux)
- dict : blend pondéré (
{"siwis": 0.5, "nadine": 0.5})
Les 2 modèles ONNX :
openvoice_se.onnx(3.2 Mo) — extraction de speaker embeddingopenvoice_vc.onnx(123 Mo) — conversion zero-shot
Trick SR (décalage de formants)
Le paramètre sr_override trompe OpenVoice sur le sample rate de la référence, ce qui décale les formants sans changer le pitch. Cela permet de créer des variantes homme/enfant à partir d’un même preset.
| sr_override | Factor | Effet |
|---|---|---|
| 44100 | 0.5x | Formants baissés (voix grave/masculine) |
| 22050 | 1.0x | Neutre (pas de décalage) |
| 11025 | 2.0x | Formants montés (voix aiguë/enfant) |
Formule : factor = 22050 / sr_override
Installation
pip install lectura-vc-zeroshot # module public (~7 Ko)
Le module public utilise l’API Lectura pour l’inférence. Le backend local ONNX nécessite les modèles pré-entraînés (~126 Mo), disponibles sous licence commerciale.
Caractéristiques techniques
- OpenVoice v2 ONNX : conversion zero-shot, n’importe quelle voix cible
- 6 presets : speaker embeddings pré-calculés (moyennes sur 100 échantillons)
- Blend pondéré : mélange linéaire des speaker embeddings
- Cache SE : les embeddings sont cachés pour éviter les ré-extractions
- Lazy loading : sessions ONNX chargées à la première utilisation
- ONNX Runtime pur : pas de dépendance PyTorch
- Python 3.10+ avec type hints complets (PEP-561)
- Licence : AGPL-3.0 (code) — les modèles sont sous licence commerciale