Text-to-Speech
VoxCPM
Laz
Turkish
tts
speech-synthesis
audio
laz
lazca
lazuri
lora
low-resource
endangered-languages
turkey
mozilla-common-voice
Instructions to use Anadilorg/MozilLaz with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- VoxCPM
How to use Anadilorg/MozilLaz with VoxCPM:
import soundfile as sf from voxcpm import VoxCPM model = VoxCPM.from_pretrained("Anadilorg/MozilLaz") wav = model.generate( text="VoxCPM is an innovative end-to-end TTS model from ModelBest, designed to generate highly expressive speech.", prompt_wav_path=None, # optional: path to a prompt speech for voice cloning prompt_text=None, # optional: reference text cfg_value=2.0, # LM guidance on LocDiT, higher for better adherence to the prompt, but maybe worse inference_timesteps=10, # LocDiT inference timesteps, higher for better result, lower for fast speed normalize=True, # enable external TN tool denoise=True, # enable external Denoise tool retry_badcase=True, # enable retrying mode for some bad cases (unstoppable) retry_badcase_max_times=3, # maximum retrying times retry_badcase_ratio_threshold=6.0, # maximum length restriction for bad case detection (simple but effective), it could be adjusted for slow pace speech ) sf.write("output.wav", wav, 16000) print("saved: output.wav") - Notebooks
- Google Colab
- Kaggle
| #!/usr/bin/env python3 | |
| """ | |
| MozilLaz — Gradio Interactive Demo | |
| Bu demo, tarayıcı üzerinden Lazca TTS deneyimi sağlar. | |
| Yüklemek için: pip install gradio | |
| Çalıştırma: | |
| python demo.py | |
| python demo.py --port 7861 | |
| python demo.py --share | |
| Ardından tarayıcınızda http://localhost:7860 adresine gidin. | |
| """ | |
| import argparse | |
| import json | |
| import sys | |
| import warnings | |
| from pathlib import Path | |
| import numpy as np | |
| import soundfile as sf | |
| warnings.filterwarnings("ignore", category=UserWarning) | |
| warnings.filterwarnings("ignore", category=FutureWarning) | |
| try: | |
| import gradio as gr | |
| except ImportError: | |
| print("❌ Gradio yüklenmemiş. Kurmak için: pip install gradio") | |
| print("\nYa da CLI kullanın: python inference.py --text '...'") | |
| sys.exit(1) | |
| # inference.py'deki doğrulanmış yükleyiciyi yeniden kullan | |
| from inference import DEFAULT_BASE_MODEL, load_model, resolve_device | |
| # Lazca örnek cümleler | |
| LAZCA_SAMPLES = [ | |
| "[speaker:spk_tmp_001 language:lzz] Nanışkimi uç den ikayme.", | |
| "[speaker:spk_tmp_001 language:lzz] Dido ini on.", | |
| "[speaker:spk_tmp_001 language:lzz] Ğormotik gamaǩç̌ǩvidan.", | |
| "[speaker:spk_tmp_001 language:lzz] Aya lemşik va duç̌vinasinon.", | |
| "[speaker:spk_tmp_001 language:lzz] Lazuri vao, fendo vao.", | |
| ] | |
| def load_model_once(): | |
| """Modeli hafızada tut (her seferinde tekrar yükleme).""" | |
| if not hasattr(load_model_once, "_model"): | |
| script_dir = Path(__file__).parent | |
| config_path = script_dir / "config.json" | |
| base_model_name = DEFAULT_BASE_MODEL | |
| if config_path.exists(): | |
| with open(config_path, encoding="utf-8") as f: | |
| base_model_name = json.load(f).get("base_model", DEFAULT_BASE_MODEL) | |
| load_model_once._model = load_model( | |
| base_model_name, | |
| lora_config_path=script_dir / "lora_config.json", | |
| lora_weights_path=script_dir / "lora_weights.safetensors", | |
| device=resolve_device("auto"), | |
| ) | |
| return load_model_once._model | |
| def synthesize(text: str, timesteps: int, cfg_value: float): | |
| """Metinden ses üret ve WAV dosya yolu döndür.""" | |
| if not text.strip(): | |
| return None | |
| model = load_model_once() | |
| audio = model.generate( | |
| text=text, | |
| inference_timesteps=int(timesteps), | |
| cfg_value=float(cfg_value), | |
| ) | |
| audio = np.asarray(audio).squeeze() | |
| sample_rate = getattr(getattr(model, "tts_model", None), "sample_rate", 48000) | |
| tmp_path = "/tmp/mozilaz_demo.wav" | |
| sf.write(tmp_path, audio, sample_rate) | |
| return tmp_path | |
| def gradio_interface(port: int = 7860, share: bool = False): | |
| """Gradio UI oluştur.""" | |
| examples = LAZCA_SAMPLES | |
| with gr.Blocks(title="MozilLaz — Lazca TTS", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🎙️ MozilLaz — Lazca Text-to-Speech | |
| **Lazca açık kaynak TTS modeli** (VoxCPM2 + LoRA, ~21.000 eğitim örneği) | |
| > *İpucu:* Aşağıdaki örneklerden birine tıklayın veya kendi Lazca metninizi yazın! | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| text_input = gr.Textbox( | |
| label="Lazca Metin", | |
| placeholder="[speaker:spk_tmp_001 language:lzz] Metin burada...", | |
| value=examples[0] | |
| ) | |
| timesteps_slider = gr.Slider( | |
| minimum=5, maximum=30, value=10, step=1, | |
| label="Inference Adımları (daha yüksek = daha kaliteli ama yavaş)" | |
| ) | |
| cfg_slider = gr.Slider( | |
| minimum=1.0, maximum=4.0, value=2.0, step=0.1, | |
| label="CFG Value (konuşma kalitesi)" | |
| ) | |
| btn = gr.Button("🎙️ Ses Üret", variant="primary") | |
| with gr.Column(): | |
| audio_output = gr.Audio(label="Çıktı Ses", type="filepath") | |
| gr.Examples( | |
| examples=examples, | |
| inputs=text_input, | |
| label="Lazca Örnek Cümleler" | |
| ) | |
| btn.click( | |
| fn=synthesize, | |
| inputs=[text_input, timesteps_slider, cfg_slider], | |
| outputs=audio_output | |
| ) | |
| gr.Markdown(f""" | |
| ### Teknik Detaylar | |
| - **Base Model:** [VoxCPM2 (OpenBMB)](https://huggingface.co/openbmb/VoxCPM2) | |
| - **LoRA Rank:** 32, **Alpha:** 32 | |
| - **Eğitim Verisi:** ~21.000 Mozilla Lazca segment | |
| - **Sample Rate:** 48 kHz | |
| - **Speaker:** spk_tmp_001 | |
| ### Kurulum | |
| ```bash | |
| pip install torch torchaudio soundfile safetensors numpy voxcpm gradio | |
| git clone https://huggingface.co/Anadilorg/MozilLaz | |
| cd MozilLaz | |
| python demo.py | |
| ``` | |
| """) | |
| demo.launch(server_port=port, share=share) | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description="MozilLaz Gradio Demo") | |
| parser.add_argument("--port", type=int, default=7860, help="Port numarası") | |
| parser.add_argument("--share", action="store_true", help="Public share link oluştur") | |
| args = parser.parse_args() | |
| gradio_interface(port=args.port, share=args.share) | |