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()