VC ZeroShot
Lectura VC ZeroShot
Conversion vocale zero-shot via OpenVoice v2 — presets, blend de voix, ONNX pur
Presentation
Sous-module leger de conversion vocale zero-shot base sur OpenVoice v2 (ONNX). Transforme n’importe quel audio source vers le timbre d’une voix cible — a partir d’un preset, d’un extrait audio de reference, ou d’un melange pondere de plusieurs voix.
| Caracteristique | Valeur |
|---|---|
| Backend | OpenVoice v2 — ONNX Runtime pur (pas de PyTorch) |
| Presets | 6 voix pre-calculees : siwis, ezwa, nadine, bernard, gilles, zeckou |
| Blend | Melange pondere de presets ou d’extraits audio |
| Trick SR | Decalage des formants (voix grave/aigue) via le sample rate |
| Modeles | 2 fichiers ONNX (~126 Mo total) |
| Sortie | Audio @ 22050 Hz |
Presets de voix
Six voix pre-calculees sont integrees au package (speaker embeddings moyennes sur 100 echantillons du corpus). Utilisables directement par nom, sans fichier audio de reference.
| Preset | Genre | Description |
|---|---|---|
| siwis | F | Voix feminine claire (corpus SIWIS) |
| ezwa | F | Voix feminine douce |
| nadine | F | Voix feminine naturelle |
| bernard | M | Voix masculine posee |
| 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 egaux)
audio, sr = engine.convert(
audio="input.wav",
reference=["siwis", "nadine"],
sr_in=16000,
)
# Blend pondere
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 reference
audio, sr = engine.convert(
audio="input.wav",
reference="reference_5s.wav",
sr_in=16000,
)
# Variante aigue (formants decales via trick SR)
audio, sr = engine.convert(
audio="input.wav",
reference="siwis",
sr_in=16000,
sr_override=11025, # formants x2 (aigu/enfant)
)
# API presets
from lectura_vc_zeroshot import PRESET_SPEAKERS
print(PRESET_SPEAKERS)
# ['siwis', 'ezwa', 'nadine', 'bernard', 'gilles', 'zeckou']
# Manipuler les speaker embeddings directement
from lectura_vc_zeroshot import blend_se
from lectura_vc_zeroshot.engine import ZeroShotEngine
se_siwis = ZeroShotEngine.get_preset_se("siwis")
se_nadine = ZeroShotEngine.get_preset_se("nadine")
se_custom = blend_se([se_siwis, se_nadine], weights=[0.7, 0.3])
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 reference 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 references (poids egaux)
- dict : blend pondere (
{"siwis": 0.5, "nadine": 0.5})
Les 2 modeles ONNX :
openvoice_se.onnx(3.2 Mo) — extraction de speaker embeddingopenvoice_vc.onnx(123 Mo) — conversion zero-shot
Trick SR (decalage de formants)
Le parametre sr_override trompe OpenVoice sur le sample rate de la reference, ce qui decale les formants sans changer le pitch. Cela permet de creer des variantes homme/enfant a partir d’un meme preset.
| sr_override | Factor | Effet |
|---|---|---|
| 44100 | 0.5x | Formants baisses (voix grave/masculine) |
| 22050 | 1.0x | Neutre (pas de decalage) |
| 11025 | 2.0x | Formants montes (voix aigue/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’inference. Le backend local ONNX necessite les modeles pre-entraines (~126 Mo), disponibles sous licence commerciale.
Caracteristiques techniques
- OpenVoice v2 ONNX : conversion zero-shot, n’importe quelle voix cible
- 6 presets : speaker embeddings pre-calcules (moyennes sur 100 echantillons)
- Blend pondere : melange lineaire des speaker embeddings
- Cache SE : les embeddings sont caches pour eviter les re-extractions
- Lazy loading : sessions ONNX chargees a la premiere utilisation
- ONNX Runtime pur : pas de dependance PyTorch
- Python 3.10+ avec type hints complets (PEP-561)
- Licence : AGPL-3.0 (code) — les modeles sont sous licence commerciale