CoolFace
Apppublic

lenML/ChatTTS-Forge

sourceHugging Faceagpl-3.0updated 2y agoView on Hugging Face
301likes
speaker_creator.py165 linesDownload Raw Back to speaker
1import tempfile2 3import gradio as gr4import torch5 6from modules.models import load_chat_tts7from modules.speaker import Speaker8from modules.utils.hf import spaces9from modules.utils.rng import np_rng10from modules.utils.SeedContext import SeedContext11from modules.webui import webui_config12from modules.webui.webui_utils import get_speakers, tts_generate13 14names_list = [15    "Alice",16    "Bob",17    "Carol",18    "Carlos",19    "Charlie",20    "Chuck",21    "Chad",22    "Craig",23    "Dan",24    "Dave",25    "David",26    "Erin",27    "Eve",28    "Yves",29    "Faythe",30    "Frank",31    "Grace",32    "Heidi",33    "Ivan",34    "Judy",35    "Mallory",36    "Mallet",37    "Darth",38    "Michael",39    "Mike",40    "Niaj",41    "Olivia",42    "Oscar",43    "Peggy",44    "Pat",45    "Rupert",46    "Sybil",47    "Trent",48    "Ted",49    "Trudy",50    "Victor",51    "Vanna",52    "Walter",53    "Wendy",54]55 56 57@torch.inference_mode()58@spaces.GPU(duration=120)59def create_spk_from_seed(60    seed: int,61    name: str,62    gender: str,63    desc: str,64):65    spk = Speaker.from_seed(seed)66    spk.name = name67    spk.gender = gender68    spk.describe = desc69 70    with tempfile.NamedTemporaryFile(delete=False, suffix=".pt") as tmp_file:71        torch.save(spk, tmp_file)72        tmp_file_path = tmp_file.name73 74    return tmp_file_path75 76 77@torch.inference_mode()78@spaces.GPU(duration=120)79def test_spk_voice(80    seed: int,81    text: str,82    progress=gr.Progress(track_tqdm=True),83):84    spk = Speaker.from_seed(seed)85    return tts_generate(spk=spk, text=text, progress=progress)86 87 88def random_speaker():89    seed = np_rng()90    name = names_list[seed % len(names_list)]91    return seed, name92 93 94def speaker_creator_ui():95    def on_generate(seed, name, gender, desc):96        file_path = create_spk_from_seed(seed, name, gender, desc)97        return file_path98 99    def create_test_voice_card(seed_input):100        with gr.Group():101            gr.Markdown("🎤Test voice")102            with gr.Row():103                test_voice_btn = gr.Button("Test Voice", variant="secondary")104 105                with gr.Column(scale=4):106                    test_text = gr.Textbox(107                        label="Test Text",108                        placeholder="Please input test text",109                        value=webui_config.localization.DEFAULT_SPEAKER_TEST_TEXT,110                    )111                    with gr.Row():112                        current_seed = gr.Label(label="Current Seed", value=-1)113                        with gr.Column(scale=4):114                            output_audio = gr.Audio(label="Output Audio", format="mp3")115 116        test_voice_btn.click(117            fn=test_spk_voice,118            inputs=[seed_input, test_text],119            outputs=[output_audio],120        )121        test_voice_btn.click(122            fn=lambda x: x,123            inputs=[seed_input],124            outputs=[current_seed],125        )126 127    gr.Markdown("SPEAKER_CREATOR_GUIDE")128 129    with gr.Row():130        with gr.Column(scale=2):131            with gr.Group():132                gr.Markdown("ℹ️Speaker info")133                seed_input = gr.Number(label="Seed", value=2)134                name_input = gr.Textbox(135                    label="Name", placeholder="Enter speaker name", value="Bob"136                )137                gender_input = gr.Textbox(138                    label="Gender", placeholder="Enter gender", value="*"139                )140                desc_input = gr.Textbox(141                    label="Description",142                    placeholder="Enter description",143                )144                random_button = gr.Button("Random Speaker")145            with gr.Group():146                gr.Markdown("🔊Generate speaker.pt")147                generate_button = gr.Button("Save .pt file")148                output_file = gr.File(label="Save to File")149        with gr.Column(scale=5):150            create_test_voice_card(seed_input=seed_input)151            create_test_voice_card(seed_input=seed_input)152            create_test_voice_card(seed_input=seed_input)153            create_test_voice_card(seed_input=seed_input)154 155    random_button.click(156        random_speaker,157        outputs=[seed_input, name_input],158    )159 160    generate_button.click(161        fn=on_generate,162        inputs=[seed_input, name_input, gender_input, desc_input],163        outputs=[output_file],164    )165