File size: 2,840 Bytes
704d09b |
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 |
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:
# Success
print(f"{voice}: \n{text} ")
if len(response.content) == 0:
gr.Warning(UText("声音文件为空"))
return None
# Save the received content as an MP3 file
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:
# Error handling
print(f"Error: {response.status_code}")
gr.Warning(f"{response.json()}")
print(response.json()) # You can also check the error details
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() |