File size: 3,132 Bytes
d886d57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import numpy as np
import soundfile as sf

import sys
import os
import random
import datetime

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../ChatTTS')))

import ChatTTS
chat = ChatTTS.Chat()

# load models from local path or snapshot

required_files = [
    'models/asset/Decoder.pt',
    'models/asset/DVAE.pt',
    'models/asset/GPT.pt',
    'models/asset/spk_stat.pt',
    'models/asset/tokenizer.pt',
    'models/asset/Vocos.pt',
    'models/config/decoder.yaml',
    'models/config/dvae.yaml',
    'models/config/gpt.yaml',
    'models/config/path.yaml',
    'models/config/vocos.yaml'
]

# 检查所有文件是否存在
all_files_exist = all(os.path.exists(file_path) for file_path in required_files)

if all_files_exist:
    print('Load models from local path.')
    chat.load_models(source='local', local_path='models')
else:
    print('Load models from snapshot.')
    chat.load_models()

def text_to_speech(text):

    wavs = chat.infer([text], use_decoder=True)
    audio_data = np.array(wavs[0])
    if audio_data.ndim == 1:
        audio_data = np.expand_dims(audio_data, axis=0)
    if not os.path.exists('outputs'):
        os.makedirs('outputs')
    output_file = f'outputs/{datetime.datetime.now().strftime("%Y%m%d%H%M%S")} - {random.randint(1000, 9999)}.wav'
    sf.write(output_file, audio_data.T, 24000)
    return output_file

# examples
examples = [
    ["你先去做,哪怕做成屎一样,在慢慢改[laugh],不要整天犹犹豫豫[uv_break],一个粗糙的开始,就是最好的开始,什么也别管,先去做,然后你就会发现,用不了多久,你几十万就没了[laugh]"],
    ["生活就像一盒巧克力,你永远不知道你会得到什么。"],
    ["每一天都是新的开始,每一个梦想都值得被追寻。"]
]

# create a block
block = gr.Blocks(css="footer.svelte-mpyp5e {display: none !important;}", title='文本转语音').queue()

with block:
    with gr.Row():
        gr.Markdown("## ChatTTS-WebUI")
    
    with gr.Row():
        gr.Markdown(
            """
            ### 说明
            - 输入一段文本,点击“生成”按钮。
            - 程序会生成对应的语音文件并显示在右侧。
            - 你可以下载生成的音频文件。
            - 也可以选择一些示例文本进行测试。
            """
        )
    
    
    with gr.Row():
        with gr.Column():
            input_text = gr.Textbox(label='输入文本', lines=2, placeholder='请输入文本...')
            example = gr.Examples(
                label="示例文本",
                inputs=input_text,
                examples=examples,
                examples_per_page=3,
            )
        
        with gr.Column():
            output_audio = gr.Audio(label='生成的音频', type='filepath', show_download_button=True)
        
    with gr.Column():
        run_button = gr.Button(value="生成")
    
    

    run_button.click(fn=text_to_speech, inputs=input_text, outputs=output_audio)

# launch
block.launch(server_name='127.0.0.1', server_port=9527, share=True)