|
import gradio as gr |
|
import os |
|
import tempfile |
|
from extra import discusscode,wccode |
|
import requests |
|
from langs import langs |
|
from speakers import match_speakers |
|
from languages import UText |
|
|
|
header_markdown = f""" |
|
<div align="center"> |
|
# {UText("Gradio 版 OpenAI/Edge 文字转语音")} |
|
</div> |
|
""" |
|
|
|
def generate_voice(voice, text): |
|
print(voice,text) |
|
voice = voice.split(' #')[0] |
|
|
|
if not text: |
|
gr.Warning(UText("没有文本")) |
|
return None |
|
if not voice: |
|
gr.Warning(UText("请选择发音人")) |
|
return None |
|
key = os.getenv("KEY") |
|
API = os.getenv("API") |
|
if not API: |
|
API = "http://171.115.221.19:18503/freeTTS" |
|
url = f"{API}/{voice}" |
|
print(url) |
|
|
|
headers = { |
|
'Authorization': f'Bearer {key}' |
|
} |
|
params = {'text': text} |
|
|
|
response = requests.get(url, headers=headers, params=params) |
|
|
|
if response.status_code == 200: |
|
|
|
print(f"{voice}: \n{text} ") |
|
if len(response.content) == 0: |
|
gr.Warning(UText("声音文件为空")) |
|
return None |
|
|
|
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_file: |
|
temp_file.write(response.content) |
|
temp_file_path = temp_file.name |
|
return temp_file_path |
|
else: |
|
|
|
print(f"Error: {response.status_code}") |
|
gr.Warning(f"{response.json()}") |
|
print(response.json()) |
|
gr.Error(UText("遇到未知错误,联系作者处理")) |
|
return None |
|
|
|
def lang_chose_select(lang_chose,sex): |
|
return gr.Dropdown(choices=match_speakers(langs=lang_chose,sex=sex), label=UText('选择发音人'), value='',scale=6) |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown(header_markdown) |
|
text = gr.TextArea(label=UText("文本"), placeholder=UText("在这里输入文本")) |
|
with gr.Row(): |
|
lang_chose = gr.Dropdown(choices=langs, label=UText('选择语言'), value=["Chinese"], multiselect=True,scale=12) |
|
sex = gr.Dropdown(choices=["Male","Female"], label=UText('选择性别'), value=["Male","Female"], multiselect=True,scale=6) |
|
voice = gr.Dropdown(choices=match_speakers(langs=["Chinese"],sex=["Male","Female"]), label=UText('选择发音人'), value='',scale=6) |
|
btn = gr.Button(UText("合成的语音"),scale=4) |
|
|
|
with gr.Row(): |
|
output_audio = gr.Audio(label=UText("合成的语音")) |
|
gr.Markdown(UText("tailer_markdown")) |
|
|
|
lang_chose.select(lang_chose_select,inputs=[lang_chose,sex], outputs=voice) |
|
sex.select(lang_chose_select,inputs=[lang_chose,sex], outputs=voice) |
|
btn.click(fn=generate_voice, inputs=[voice,text], outputs=output_audio, api_name="tts_button", concurrency_limit=None) |
|
|
|
demo.launch() |