| import os |
|
|
| |
| os.environ["TORCHDYNAMO_DISABLE"] = "1" |
|
|
| import asyncio |
| import warnings |
|
|
| warnings.filterwarnings("ignore") |
|
|
| import gradio as gr |
| import numpy as np |
| import spaces |
| import torch |
| from voxcpm import VoxCPM |
|
|
| model = None |
|
|
|
|
| def get_model(): |
| global model |
| if model is None: |
| print("Loading VoxCPM2 Model...") |
| model = VoxCPM.from_pretrained("openbmb/VoxCPM2") |
| return model |
|
|
|
|
| @spaces.GPU |
| def generate_speech(target_text, reference_audio): |
| cpm_model = get_model() |
|
|
| |
| if reference_audio: |
| wav = cpm_model.generate( |
| text=target_text, |
| prompt_wav_path=reference_audio, |
| prompt_text=target_text, |
| cfg_value=2.0, |
| inference_timesteps=10, |
| ) |
| else: |
| wav = cpm_model.generate( |
| text=target_text, cfg_value=2.0, inference_timesteps=10 |
| ) |
|
|
| |
| if wav is None: |
| raise ValueError("Audio generation failed and returned None.") |
|
|
| |
| sample_rate = getattr(cpm_model.tts_model, "sample_rate", 24000) |
|
|
| if torch.is_tensor(wav): |
| wav = wav.cpu().numpy() |
|
|
| wav = np.squeeze(wav) |
|
|
| return (sample_rate, wav) |
|
|
|
|
| |
| demo = gr.Interface( |
| fn=generate_speech, |
| inputs=[ |
| gr.Textbox( |
| label="Target Text (မြန်မာစာ)", |
| value="မင်္ဂလာပါ၊ ဒီမှာမြန်မာလို စာသားရိုက်ထည်ပြီး အသံထုတ်နိုင်ပါတယ်။", |
| lines=3, |
| ), |
| gr.Audio( |
| label="Reference Audio (မြန်မာလို ပြောထားသည့် အသံဖိုင် ၃-၅ စက္ကန့်)", |
| type="filepath", |
| sources=["upload", "microphone"], |
| ), |
| ], |
| outputs=gr.Audio(label="Generated Audio"), |
| title="VoxCPM2 myanmar voice", |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |
|
|