Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
from modules.speaker import Speaker | |
from modules.utils.hf import spaces | |
from modules.webui import webui_config | |
from modules.webui.webui_utils import tts_generate | |
import tempfile | |
def test_spk_voice(spk_file, text: str): | |
if spk_file == "" or spk_file is None: | |
return None | |
spk = Speaker.from_file(spk_file) | |
return tts_generate( | |
spk=spk, | |
text=text, | |
) | |
def speaker_editor_ui(): | |
def on_generate(spk_file, name, gender, desc): | |
spk: Speaker = Speaker.from_file(spk_file) | |
spk.name = name | |
spk.gender = gender | |
spk.desc = desc | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".pt") as tmp_file: | |
torch.save(spk, tmp_file) | |
tmp_file_path = tmp_file.name | |
return tmp_file_path | |
def create_test_voice_card(spk_file): | |
with gr.Group(): | |
gr.Markdown("🎤Test voice") | |
with gr.Row(): | |
test_voice_btn = gr.Button( | |
"Test Voice", variant="secondary", interactive=False | |
) | |
with gr.Column(scale=4): | |
test_text = gr.Textbox( | |
label="Test Text", | |
placeholder="Please input test text", | |
value=webui_config.localization.DEFAULT_SPEAKER_TEST_TEXT, | |
) | |
with gr.Row(): | |
with gr.Column(scale=4): | |
output_audio = gr.Audio(label="Output Audio", format="mp3") | |
test_voice_btn.click( | |
fn=test_spk_voice, | |
inputs=[spk_file, test_text], | |
outputs=[output_audio], | |
) | |
return test_voice_btn | |
has_file = gr.State(False) | |
# TODO 也许需要写个说明? | |
# gr.Markdown("SPEAKER_CREATOR_GUIDE") | |
with gr.Row(): | |
with gr.Column(scale=2): | |
with gr.Group(): | |
gr.Markdown("💼Speaker file") | |
spk_file = gr.File(label="*.pt file", file_types=[".pt"]) | |
with gr.Group(): | |
gr.Markdown("ℹ️Speaker info") | |
name_input = gr.Textbox( | |
label="Name", | |
placeholder="Enter speaker name", | |
value="*", | |
interactive=False, | |
) | |
gender_input = gr.Textbox( | |
label="Gender", | |
placeholder="Enter gender", | |
value="*", | |
interactive=False, | |
) | |
desc_input = gr.Textbox( | |
label="Description", | |
placeholder="Enter description", | |
value="*", | |
interactive=False, | |
) | |
with gr.Group(): | |
gr.Markdown("🔊Generate speaker.pt") | |
generate_button = gr.Button("Save .pt file", interactive=False) | |
output_file = gr.File(label="Save to File") | |
with gr.Column(scale=5): | |
btn1 = create_test_voice_card(spk_file=spk_file) | |
btn2 = create_test_voice_card(spk_file=spk_file) | |
btn3 = create_test_voice_card(spk_file=spk_file) | |
btn4 = create_test_voice_card(spk_file=spk_file) | |
generate_button.click( | |
fn=on_generate, | |
inputs=[spk_file, name_input, gender_input, desc_input], | |
outputs=[output_file], | |
) | |
def spk_file_change(spk_file): | |
empty = spk_file is None or spk_file == "" | |
if empty: | |
return [ | |
gr.Textbox(value="*", interactive=False), | |
gr.Textbox(value="*", interactive=False), | |
gr.Textbox(value="*", interactive=False), | |
gr.Button(interactive=False), | |
gr.Button(interactive=False), | |
gr.Button(interactive=False), | |
gr.Button(interactive=False), | |
gr.Button(interactive=False), | |
] | |
spk: Speaker = Speaker.from_file(spk_file) | |
return [ | |
gr.Textbox(value=spk.name, interactive=True), | |
gr.Textbox(value=spk.gender, interactive=True), | |
gr.Textbox(value=spk.describe, interactive=True), | |
gr.Button(interactive=True), | |
gr.Button(interactive=True), | |
gr.Button(interactive=True), | |
gr.Button(interactive=True), | |
gr.Button(interactive=True), | |
] | |
spk_file.change( | |
fn=spk_file_change, | |
inputs=[spk_file], | |
outputs=[ | |
name_input, | |
gender_input, | |
desc_input, | |
generate_button, | |
btn1, | |
btn2, | |
btn3, | |
btn4, | |
], | |
) | |