rainnee/ChatTTS
0
1import spaces2import os3import random4import argparse5 6import torch7import gradio as gr8import numpy as np9 10import ChatTTS11 12print("loading ChatTTS model...")13chat = ChatTTS.Chat()14chat.load_models()15 16 17 18def generate_seed():19 new_seed = random.randint(1, 100000000)20 return {21 "__type__": "update",22 "value": new_seed23 }24 25@spaces.GPU26def generate_audio(text, temperature, top_P, top_K, audio_seed_input, text_seed_input, refine_text_flag):27 28 torch.manual_seed(audio_seed_input)29 rand_spk = torch.randn(768)30 params_infer_code = {31 'spk_emb': rand_spk, 32 'temperature': temperature,33 'top_P': top_P,34 'top_K': top_K,35 }36 params_refine_text = {'prompt': '[oral_2][laugh_0][break_6]'}37 38 torch.manual_seed(text_seed_input)39 40 if refine_text_flag:41 text = chat.infer(text, 42 skip_refine_text=False,43 refine_text_only=True,44 params_refine_text=params_refine_text,45 params_infer_code=params_infer_code46 )47 48 wav = chat.infer(text, 49 skip_refine_text=True, 50 params_refine_text=params_refine_text, 51 params_infer_code=params_infer_code52 )53 54 audio_data = np.array(wav[0]).flatten()55 sample_rate = 2400056 text_data = text[0] if isinstance(text, list) else text57 58 return [(sample_rate, audio_data), text_data]59 60 61with gr.Blocks() as demo:62 gr.Markdown("# Deployed by [ChatTTS.com](https://chattts.com)")63 64 default_text = "四川美食确实以辣闻名,但也有不辣的选择。比如甜水面、赖汤圆、蛋烘糕、叶儿粑等,这些小吃口味温和,甜而不腻,也很受欢迎。" 65 text_input = gr.Textbox(label="Input Text", lines=4, placeholder="Please Input Text...", value=default_text)66 67 with gr.Row():68 refine_text_checkbox = gr.Checkbox(label="Refine text", value=True)69 temperature_slider = gr.Slider(minimum=0.00001, maximum=1.0, step=0.00001, value=0.3, label="Audio temperature")70 top_p_slider = gr.Slider(minimum=0.1, maximum=0.9, step=0.05, value=0.7, label="top_P")71 top_k_slider = gr.Slider(minimum=1, maximum=20, step=1, value=20, label="top_K")72 73 with gr.Row():74 audio_seed_input = gr.Number(value=42, label="Audio Seed")75 generate_audio_seed = gr.Button("\U0001F3B2")76 text_seed_input = gr.Number(value=42, label="Text Seed")77 generate_text_seed = gr.Button("\U0001F3B2")78 79 generate_button = gr.Button("Generate")80 81 text_output = gr.Textbox(label="Output Text", interactive=False)82 audio_output = gr.Audio(label="Output Audio")83 84 generate_audio_seed.click(generate_seed, 85 inputs=[], 86 outputs=audio_seed_input)87 88 generate_text_seed.click(generate_seed, 89 inputs=[], 90 outputs=text_seed_input)91 92 generate_button.click(generate_audio, 93 inputs=[text_input, temperature_slider, top_p_slider, top_k_slider, audio_seed_input, text_seed_input, refine_text_checkbox], 94 outputs=[audio_output, text_output])95 96parser = argparse.ArgumentParser(description='ChatTTS demo Launch')97parser.add_argument('--server_name', type=str, default='0.0.0.0', help='Server name')98parser.add_argument('--server_port', type=int, default=8080, help='Server port')99args = parser.parse_args()100 101 # demo.launch(server_name=args.server_name, server_port=args.server_port, inbrowser=True)102 103 104 105 106if __name__ == '__main__':107 demo.launch()