Spaces:
Sleeping
Sleeping
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
import argparse | |
import asyncio | |
from functools import partial | |
import logging | |
from pathlib import Path | |
import platform | |
import re | |
import tempfile | |
from typing import List | |
from project_settings import project_path, log_directory | |
import log | |
log.setup(log_directory=log_directory) | |
import anyio | |
import edge_tts | |
import gradio as gr | |
from toolbox.os.command import Command | |
main_logger = logging.getLogger("main") | |
def get_args(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
"--example_wav_dir", | |
default=(project_path / "data/examples").as_posix(), | |
type=str | |
) | |
args = parser.parse_args() | |
return args | |
async def edge_tts_get_speakers() -> List[str]: | |
edge_tts_speakers_choices = list() | |
voices = await edge_tts.list_voices() | |
for voice in voices: | |
short_name = voice["ShortName"] | |
edge_tts_speakers_choices.append(short_name) | |
return edge_tts_speakers_choices | |
async def edge_tts_text_to_speech(text: str, speaker: str): | |
communicate = edge_tts.Communicate(text, speaker) | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp_file: | |
tmp_path = tmp_file.name | |
await communicate.save(tmp_path) | |
return tmp_path | |
def shell(cmd: str): | |
return Command.popen(cmd) | |
def main(): | |
args = get_args() | |
title = "## 电子书阅读." | |
loop = asyncio.get_event_loop() | |
edge_tts_speakers_choices = loop.run_until_complete(edge_tts_get_speakers()) | |
# blocks | |
with gr.Blocks() as blocks: | |
gr.Markdown(value=title) | |
with gr.Tabs(): | |
with gr.TabItem("Edge TTS"): | |
edge_tts_text = gr.Textbox(value="学而时习之,不亦悦乎。", lines=4, max_lines=50, label="text") | |
edge_tts_speaker = gr.Dropdown(choices=edge_tts_speakers_choices, value=edge_tts_speakers_choices[0], label="speakers") | |
edge_tts_audio = gr.Audio(type="filepath", label="audio") | |
edge_tts_button = gr.Button(value="edge_tts", variant="primary") | |
edge_tts_button.click( | |
edge_tts_text_to_speech, | |
inputs=[ | |
edge_tts_text, | |
edge_tts_speaker, | |
], | |
outputs=[ | |
edge_tts_audio | |
], | |
) | |
with gr.TabItem("shell"): | |
shell_text = gr.Textbox(label="cmd") | |
shell_button = gr.Button("run") | |
shell_output = gr.Textbox(label="output") | |
shell_button.click( | |
shell, | |
inputs=[ | |
shell_text, | |
], | |
outputs=[ | |
shell_output | |
], | |
) | |
launch = partial( | |
blocks.queue().launch, | |
share=False if platform.system() == "Windows" else False, | |
server_name="127.0.0.1" if platform.system() == "Windows" else "0.0.0.0", | |
server_port=7860, | |
) | |
anyio.run( | |
launch, | |
backend="asyncio" | |
) | |
return | |
if __name__ == "__main__": | |
main() | |