Spaces:
Runtime error
Runtime error
| 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) | |