Skip to content

Olbrasoft/OmniVoiceExample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OmniVoiceExample

Ukázkový projekt, jak lokálně používat k2-fsa/OmniVoice — multilingvální zero-shot Text-to-Speech model podporující přes 600 jazyků (včetně češtiny).

Co model umí:

  • Voice cloning — naklonování hlasu z krátké (3–10 s) ukázky
  • Voice design — popíšeš hlas slovy (female, low pitch, british accent) a model ho vyrobí
  • Auto voice — model si vybere hlas sám
  • Non-verbal symboly[laughter], výslovnostní opravy přes pinyin / fonémy
  • Rychlost — RTF ~0.025 (40× rychlejší než realtime na GPU)

Postavený nad Qwen3-0.6B s diffusion-language-model architekturou. Licence Apache-2.0.

Poznámka k použití: Autoři výslovně zakazují použití pro neautorizované klonování hlasu, podvody a impersonaci. Projekt je určen pro výzkumné a osobní účely.


Požadavky

  • Python 3.10–3.12 (3.13 zatím není oficiálně podporován závislostmi PyTorch ekosystému)
  • GPU s CUDA doporučeno (běží i na CPU, ale výrazně pomaleji), funguje i Apple Silicon (MPS)
  • ~5 GB volného místa (PyTorch + váhy modelu)
  • ffmpeg a espeak-ng (Linux: sudo apt install ffmpeg espeak-ng)

Instalace

Doporučuji použít uv — moderní rychlý správce Python prostředí.

# 1. Vytvoř venv s Pythonem 3.11
uv venv --python 3.11
source .venv/bin/activate

# 2. Nainstaluj PyTorch — vyber variantu podle hardwaru:

# NVIDIA GPU (CUDA 12.8 wheely fungují i s novějšími drivery):
uv pip install torch==2.8.0 torchaudio==2.8.0 --extra-index-url https://download.pytorch.org/whl/cu128

# Apple Silicon (Mac M1/M2/M3):
uv pip install torch==2.8.0 torchaudio==2.8.0

# CPU only (Linux/Windows bez GPU):
uv pip install torch==2.8.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cpu

# 3. Nainstaluj OmniVoice + helpers
uv pip install omnivoice soundfile numpy

Nebo klasicky přes pip v prostředí python -m venv .venv.


Rychlý start

Po instalaci spusť nejjednodušší ukázku — voice design (nepotřebuje žádnou referenční nahrávku):

python examples/01_voice_design.py

Při prvním běhu se stáhnou váhy z Hugging Face (~1–2 GB do ~/.cache/huggingface/). Výstup uvidíš v outputs/01_voice_design.wav.


Příklady

Skript Co předvádí
examples/01_voice_design.py Vygeneruj hlas podle textového popisu (žádné audio nepotřeba)
examples/02_voice_cloning.py Naklonuj hlas z reference/ref.wav
examples/03_auto_voice.py Bez promptu — model si hlas zvolí
examples/04_czech_demo.py Český text ve dvou různých designovaných hlasech
examples/05_non_verbal.py Vložené [laughter] značky uprostřed věty
examples/06_batch.py Více vět v jednom načtení modelu
examples/07_clone_cr_voices.py Hromadné klonování 22 českých hereckých hlasů (fáze 2) — viz Web galerie
examples/08_transcribe_refs.py Fáze 1: přepis referenčních nahrávek Whisperem s language="czech"

Voice cloning — jak na to

  1. Nahraj 3–10 s své řeči, mono, klidné prostředí:
    arecord -f cd -c 1 -r 16000 -d 6 reference/ref.wav
  2. V examples/02_voice_cloning.py uprav REF_TEXT na přesný přepis toho, co jsi řekl/a.
  3. Změň TARGET_TEXT na to, co má model říct tvým hlasem.
  4. Spusť python examples/02_voice_cloning.py.

Délka reference: doporučeno 3–10 s, ale OmniVoice si poradí i s delší nahrávkou — pokud ref_text neuvedeš, model si referenci sám oříznul a přepsal pomocí Whisperu (viz examples/07_clone_cr_voices.py).

Web galerie

V adresáři web/ je hotová HTML stránka, která vedle sebe přehrává originální hlasy 22 českých herců a jejich naklonovanou verzi říkající stejný text. Reference pochází z projektu ceskarepublika.wiki/seznam-hlasu.

# 1. Fáze 1 — přepis referencí Whisperem (Czech). Na RTX 3060 ~30s.
python examples/08_transcribe_refs.py
#    → uloží web/transcripts.json (zkontroluj a podle potřeby ručně oprav)

# 2. Fáze 2 — naklonuj všechny hlasy s pevným ref_text. ~3 min.
python examples/07_clone_cr_voices.py

# 3. Pusť statický server a otevři stránku
python -m http.server -d web 8765
xdg-open http://localhost:8765/

Proč dva kroky: OmniVoice (~4 GB) + Whisper-large-v3-turbo (~1.6 GB) se nevejdou současně do 8 GB VRAM (RTX 3060). Fáze 1 navíc volá Whisper s explicitním language="czech" — bez nápovědy auto-detekce občas halucinuje anglické fonémy a vzniklý nesoulad (audio, ref_text) způsobí zkomolený fragment na začátku klonu.

Stránka je čistý vanilla HTML/CSS/JS (žádný build), data čte z web/voices.json.

Jak vlastně klonování funguje

OmniVoice je jediný ~600M-parametrový model. Nevzniká žádný „malý model" pro každý klonovaný hlas — funguje to jako few-shot u LLM:

  1. Reference se zakóduje na tokeny pomocí audio_tokenizer.encode() (ze 6 s WAV vznikne tenzor (C, T) o velikosti pár KB).
  2. Při generování model dostane [ref_audio_tokens + ref_text + target_text] jako jeden prompt a v jednom forward passu vyrobí audio výstup. Identita hlasu je čistě v těch tokenech, ne ve váhách.
  3. create_voice_clone_prompt() ti to zakódování spočítá jen jednou a vrátí VoiceClonePrompt objekt. Ten pak strkáš do generate() kolikrát chceš pro daný hlas — bez opětovného běhu Whisperu nebo audio tokenizéru. Takhle si můžeš na serveru držet cache hotových prompt-objektů a říkat každý hlas v reálném čase (RTF ~0.025).
# precompute once per voice
prompt = model.create_voice_clone_prompt(
    ref_audio="reference/cr-voices/donutil.wav",
    ref_text="Kefalín musel objektivně přiznat, že to mohlo dopadnout hůř.",
)

# reuse N×
audio1 = model.generate(text="Dobrý den.", voice_clone_prompt=prompt)
audio2 = model.generate(text="Jak se máte?", voice_clone_prompt=prompt)

Atributy pro Voice Design

Do parametru instruct můžeš zkombinovat (oddělené čárkou + mezerou):

  • Pohlaví: male, female
  • Věk: child, teenager, young adult, middle-aged, elderly
  • Výška: very low pitch, low pitch, moderate pitch, high pitch, very high pitch
  • Styl: whisper
  • Anglické akcenty: american accent, australian accent, british accent, canadian accent, chinese accent, indian accent, japanese accent, korean accent, portuguese accent, russian accent
  • Čínské dialekty (s plnou čárkou ): /, 儿童/少年/青年/中年/老年, 极低音调/低音调/中音调/高音调/极高音调, 耳语, 东北话, 四川话, 河南话, 济南话, 甘肃话, 桂林话, 石家庄话, 云南话, 宁夏话, 贵州话, 陕西话, 青岛话

Příklad: "female, young adult, high pitch, british accent"

Příklad (čínsky): "男,青年,中音调,河南话"

Anglické a čínské atributy nelze míchat v jednom instruct — vyber si jednu sadu.


CLI

OmniVoice přibalí i hotové CLI nástroje:

# Webový demo server (Gradio)
omnivoice-demo --ip 0.0.0.0 --port 8001

# Jednorázová syntéza
omnivoice-infer --model k2-fsa/OmniVoice \
    --text "Toto je test." --output out.wav

# Dávkové zpracování ze souboru jsonl
omnivoice-infer-batch --model k2-fsa/OmniVoice \
    --test_list test.jsonl --res_dir results/

Struktura projektu

OmniVoiceExample/
├── README.md
├── pyproject.toml          # uv/pip metadata
├── .gitignore
├── examples/               # 6 hotových demo skriptů
│   ├── 01_voice_design.py
│   ├── 02_voice_cloning.py
│   ├── 03_auto_voice.py
│   ├── 04_czech_demo.py
│   ├── 05_non_verbal.py
│   └── 06_batch.py
├── reference/              # sem dáš ref.wav pro klonování
└── outputs/                # sem se ukládají vygenerované wavy (gitignored)

Odkazy

Licence

Tento ukázkový projekt: Apache-2.0. OmniVoice model: Apache-2.0.

About

Local Python example of k2-fsa/OmniVoice multilingual zero-shot TTS — voice cloning, voice design, Czech demo.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages