Spaces:
Running on Zero
Running on Zero
File size: 1,497 Bytes
522e55f 6a31123 522e55f c22119e 633046d 522e55f 633046d 6814531 522e55f 6814531 522e55f c22119e 633046d 6a31123 6814531 633046d c22119e 633046d 6a31123 633046d c22119e 6814531 c22119e 633046d c22119e 6a31123 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import io
import os
import soundfile as sf
import gradio as gr
import spaces
from huggingface_hub import hf_hub_download
from f5_tts.api import F5TTS
REF_AUDIO_PATH = "PraieiroVox.wav"
f5tts_instance = None
def get_model():
global f5tts_instance
if f5tts_instance is None:
print("Carregando modelo F5-TTS pt-br na GPU...")
ckpt = hf_hub_download("firstpixel/F5-TTS-pt-br", "pt-br/model_last.safetensors")
f5tts_instance = F5TTS(model="F5TTS_Base", ckpt_file=ckpt, device="cuda")
return f5tts_instance
@spaces.GPU(duration=60)
def clone_voice(text: str):
if not text or not text.strip():
return None
model = get_model()
wav, sr, _ = model.infer(
ref_file=REF_AUDIO_PATH,
ref_text="",
gen_text=text.strip(),
remove_silence=True,
)
return sr, wav
with gr.Blocks(title="Praieiro Vox · Clonagem de Voz") as demo:
gr.Markdown("# 🌊 Praieiro Vox · Voz Oficial do Praieiro Bot")
gr.Markdown("Motor de clonagem F5-TTS (pt-BR) rodando na GPU do Praieiro.")
text_input = gr.Textbox(
label="Texto a ser falado",
value="Fala meu brother! Seu pedido na praia já tá sendo preparado e chega voando!",
lines=3,
)
btn = gr.Button("🎤 Gerar Fala com a Voz Clonada", variant="primary")
audio_output = gr.Audio(label="Áudio Gerado", type="numpy")
btn.click(fn=clone_voice, inputs=[text_input], outputs=[audio_output], api_name="clone_voice")
demo.launch()
|