OmniVoice — Azerbaijani
Azerbaijani text-to-speech model fine-tuned from k2-fsa/OmniVoice (Qwen3-0.6B backbone + Higgs Audio V2 codec, 24 kHz output). Supports zero-shot voice cloning from a short reference clip as well as generation without any reference audio.
Installation
pip install omnivoice soundfile
Usage
Load the model
import soundfile as sf
import torch
from omnivoice import OmniVoice
device = "cuda:0" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device != "cpu" else torch.float32
model = OmniVoice.from_pretrained(
"LocalDoc/omnivoice-azerbaijani",
device_map=device,
dtype=dtype,
)
Runs on GPU (fp16) or CPU (fp32); CPU inference works but is noticeably slower.
1. With a reference voice (voice cloning)
Provide a clean 5–15 s reference recording and its exact transcript. The model reproduces the speaker's timbre and speaking style.
audio = model.generate(
text="Salam, sizə necə kömək edə bilərəm?",
ref_audio="ref.wav",
ref_text="Referans səsin dəqiq mətni.",
language="az",
num_step=32,
)
sf.write("cloned.wav", audio[0], 24000)
If you synthesize many sentences with the same voice, build the prompt once and reuse it:
prompt = model.create_voice_clone_prompt(
ref_audio="ref.wav",
ref_text="Referans səsin dəqiq mətni.",
)
sentences = [
"Sifarişiniz qəbul olundu.",
"Kartınız sabah hazır olacaq.",
]
audios = model.generate(
text=sentences,
voice_clone_prompt=prompt,
language="az",
num_step=32,
)
for i, a in enumerate(audios):
sf.write(f"cloned_{i}.wav", a, 24000)
2. Without a reference voice
Auto voice — pass only the text; the model picks a voice itself:
audio = model.generate(
text="Bu gün hava günəşli olacaq.",
language="az",
num_step=32,
)
sf.write("auto.wav", audio[0], 24000)
Voice design — describe the desired voice with instruct (comma-separated attributes such as
male / female, young adult / middle-aged / elderly, low pitch / high pitch, whisper):
audio = model.generate(
text="Bu gün hava günəşli olacaq.",
instruct="female, young adult, moderate pitch",
language="az",
num_step=32,
)
sf.write("designed.wav", audio[0], 24000)
Voice design comes from the base OmniVoice model; for a stable, consistent voice across many utterances, voice cloning from a reference is recommended.
Tips
- Write numbers, dates and abbreviations as words: the model expects normalized text (e.g. iyirmi beÅŸ instead of 25).
num_steptrades speed for quality (32 is a good default; 16 is faster).- Use
speed=(e.g.0.9,1.1) orduration=(seconds) to control pacing.
Limitations
- Numbers, dates and abbreviations must be written out as words.
- Voice cloning quality depends on the reference: use clean 5–15 s audio with an exact transcript.
- Without a reference, the voice may vary from call to call.
License
The base OmniVoice weights are released under CC BY-NC 4.0, so this fine-tune is non-commercial.
- Downloads last month
- 14