egtts / app.py
chaore's picture
Upload 5 files
6ad2a4c verified
"""
Hugging Face Spaces应用程序入口文件
"""
import gradio as gr
from api import tts_api
import asyncio
def create_app():
"""创建Gradio应用"""
with gr.Blocks(title="Edge TTS 文本转语音") as app:
gr.Markdown("#🎙 Edge TTS 文本转语音工具")
gr.Markdown("基于Microsoft Edge TTS的高质量文本转语音服务")
with gr.Tab("文本配音"):
with gr.Row():
with gr.Column(scale=2):
text_input = gr.TextArea(
label="📝 输入文本",
placeholder="在此输入您要转换为语音的文本...",
lines=12
)
with gr.Row():
voice_selection = gr.Dropdown(
choices=tts_api.get_available_voices(),
value="zh-CN-XiaoxiaoNeural",
label="🗣️ 选择语音"
)
with gr.Row():
rate_slider = gr.Slider(
minimum=-50, maximum=50, value=0, step=1,
label="⏩ 语速调整 (%)"
)
pitch_slider = gr.Slider(
minimum=-50, maximum=50, value=0, step=1,
label="🎵音调整 (Hz)"
)
generate_btn = gr.Button("🔊 生成语音", variant="primary")
with gr.Column(scale=1):
audio_output = gr.Audio(label="🎧 生成的语音", type="filepath")
status_output = gr.Textbox(label="📊 状态信息", interactive=False)
#绑事件
async def generate_speech(text, voice, rate, pitch):
if not text.strip():
return None, "请输入要转换的文本"
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file:
output_path = temp_file.name
try:
result = await tts_api.text_to_speech(text, voice, rate, pitch, output_path)
if result:
return result, "语音生成成功"
else:
return None, "语音生成失败"
except Exception as e:
return None, f"生成语音时出错: {str(e)}"
generate_btn.click(
fn=lambda text, voice, rate, pitch: asyncio.run(
generate_speech(text, voice, rate, pitch)
),
inputs=[text_input, voice_selection, rate_slider, pitch_slider],
outputs=[audio_output, status_output]
)
return app
if __name__ == "__main__":
import tempfile
app = create_app()
app.launch()