Spaces:
markmagic
/
Runtime error

File size: 3,941 Bytes
b5f41ba
23e6529
 
 
 
 
1d91c75
23e6529
 
 
 
 
 
 
 
8d737ed
 
23e6529
 
 
 
 
 
 
2edcb05
23e6529
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53a6b0f
 
e36f05d
 
 
53a6b0f
 
 
e36f05d
 
 
 
53a6b0f
 
e36f05d
 
 
 
53a6b0f
 
23e6529
53a6b0f
e36f05d
23e6529
53a6b0f
 
 
23e6529
53a6b0f
 
 
23e6529
53a6b0f
 
 
23e6529
e36f05d
53a6b0f
 
 
23e6529
f2d53a3
53a6b0f
 
1d91c75
 
23e6529
e36f05d
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import spaces
import os
import random
import argparse

import torch
import gradio as gr
import numpy as np

import ChatTTS

print("loading ChatTTS model...")
chat = ChatTTS.Chat()
chat.load_models()



def generate_seed():
    new_seed = random.randint(1, 100000000)
    return {
        "__type__": "update",
        "value": new_seed
        }

@spaces.GPU
def generate_audio(text, temperature, top_P, top_K, audio_seed_input, text_seed_input, refine_text_flag):

    torch.manual_seed(audio_seed_input)
    rand_spk = torch.randn(768)
    params_infer_code = {
        'spk_emb': rand_spk, 
        'temperature': temperature,
        'top_P': top_P,
        'top_K': top_K,
        }
    params_refine_text = {'prompt': '[oral_2][laugh_0][break_6]'}
    
    torch.manual_seed(text_seed_input)

    if refine_text_flag:
        text = chat.infer(text, 
                          skip_refine_text=False,
                          refine_text_only=True,
                          params_refine_text=params_refine_text,
                          params_infer_code=params_infer_code
                          )
    
    wav = chat.infer(text, 
                     skip_refine_text=True, 
                     params_refine_text=params_refine_text, 
                     params_infer_code=params_infer_code
                     )
    
    audio_data = np.array(wav[0]).flatten()
    sample_rate = 24000
    text_data = text[0] if isinstance(text, list) else text

    return [(sample_rate, audio_data), text_data]


with gr.Blocks() as demo:

    gr.Markdown("# ChatTTS Free")

    default_text = "ChatTTS is a text-to-speech model designed specifically for dialogue scenario such as Large Language Model assistant. It supports both English and Chinese languages.  ๅฎƒๆ”ฏๆŒ่‹ฑๆ–‡ๅ’Œไธญๆ–‡ไธค็ง่ฏญ่จ€๏ผŒ็”Ÿๆˆ็š„่ฏญ้Ÿณๆ•ˆๆžœ่‡ช็„ถใ€้žๅธธ้€ผ็œŸใ€้žๅธธ็‰›ใ€‚"        
    text_input = gr.Textbox(label="Input Text", lines=4, placeholder="Please Input Text...", value=default_text)

    with gr.Row():
        refine_text_checkbox = gr.Checkbox(label="Refine text", value=True, visible=False)
        temperature_slider = gr.Slider(minimum=0.00001, maximum=1.0, step=0.00001, value=0.3, label="Audio temperature", visible=False)
        top_p_slider = gr.Slider(minimum=0.1, maximum=0.9, step=0.05, value=0.7, label="top_P", visible=False)
        top_k_slider = gr.Slider(minimum=1, maximum=20, step=1, value=20, label="top_K", visible=False)

    with gr.Row():
        audio_seed_input = gr.Number(value=42, label="Audio Seed", visible=False)
        generate_audio_seed = gr.Button("\U0001F3B2", visible=False)
        text_seed_input = gr.Number(value=42, label="Text Seed", visible=False)
        generate_text_seed = gr.Button("\U0001F3B2", visible=False)

    generate_button = gr.Button("Generate")
        
    text_output = gr.Textbox(label="Output Text", interactive=False)
    audio_output = gr.Audio(label="Output Audio",autoplay=True)

    generate_audio_seed.click(generate_seed, 
                              inputs=[], 
                              outputs=audio_seed_input)
        
    generate_text_seed.click(generate_seed, 
                             inputs=[], 
                             outputs=text_seed_input)
        
    generate_button.click(generate_audio, 
                          inputs=[text_input, temperature_slider, top_p_slider, top_k_slider, audio_seed_input, text_seed_input, refine_text_checkbox], 
                          outputs=[audio_output, text_output])

parser = argparse.ArgumentParser(description='ChatTTS Online')
parser.add_argument('--server_name', type=str, default='0.0.0.0', help='Server name')
parser.add_argument('--server_port', type=int, default=8080, help='Server port')
args = parser.parse_args()

    # demo.launch(server_name=args.server_name, server_port=args.server_port, inbrowser=True)




if __name__ == '__main__':
    demo.launch(share=True, show_api=False)