Chatterbox-TTS / app.py
le quy don
Update app.py
b49bf2b verified
Raw
History Blame Contribute Delete
2.54 kB
import os
import time
import torch
import gradio as gr
from pathlib import Path
import torchaudio
from chatterbox.tts import ChatterboxTTS
# Initialize output directory
OUTPUT_DIR = Path("outputs")
OUTPUT_DIR.mkdir(exist_ok=True)
# Load model
model = ChatterboxTTS.from_pretrained(device="cpu")
def tts_and_save(text, ref_wav, exaggeration, temperature, seed, cfg_weight, progress=gr.Progress()):
progress(0, desc="Starting...")
if seed != 0:
torch.manual_seed(int(seed))
progress(0.2, desc="Processing text...")
time.sleep(0.5) # Simulate processing
progress(0.5, desc="Generating audio...")
wav = model.generate(
text,
audio_prompt_path=ref_wav,
exaggeration=exaggeration,
temperature=temperature,
cfg_weight=cfg_weight,
)
progress(0.8, desc="Saving file...")
timestamp = time.strftime("%Y%m%d_%H%M%S")
filename = OUTPUT_DIR / f"tts_{timestamp}.wav"
torchaudio.save(str(filename), wav.cpu(), model.sr)
progress(1.0, desc="Completed!")
return (model.sr, wav.squeeze(0).numpy()), str(filename)
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
text = gr.Textbox(
label="Input Text",
lines=10,
max_lines=100,
placeholder="Enter your text here (no character limit)..."
)
ref_wav = gr.Audio(label="Reference Audio (optional)", sources=["upload", "microphone"], type="filepath")
with gr.Row():
exaggeration = gr.Slider(0.25, 2, value=0.5, step=0.05, label="Exaggeration")
cfg_weight = gr.Slider(0.2, 1, value=0.5, step=0.05, label="CFG/Pace")
with gr.Row():
temperature = gr.Slider(0.05, 5, value=0.8, step=0.05, label="Temperature")
seed = gr.Number(value=0, label="Random Seed (0=random)", precision=0)
btn = gr.Button("Generate and Auto-Save", variant="primary")
with gr.Column():
output_audio = gr.Audio(label="Audio Preview")
saved_path = gr.Textbox(label="Saved Path", interactive=False)
progress_bar = gr.Textbox(label="Progress", visible=False) # Hidden as we're using gr.Progress()
btn.click(
tts_and_save,
inputs=[text, ref_wav, exaggeration, temperature, seed, cfg_weight],
outputs=[output_audio, saved_path]
)
if __name__ == "__main__":
demo.launch()