File size: 1,880 Bytes
0a88ee7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr

from mini_tts.service import LocalTTSService


service = LocalTTSService()


def run_tts(text: str, voice: str, speed: float, pitch: float):
    return service.synthesize(
        text=text,
        voice=voice,
        speed=speed,
        pitch_shift=pitch,
    )


with gr.Blocks(title="Tiny Code-Only TTS") as demo:
    gr.Markdown(
        """
        # Tiny Code-Only TTS
        A simple text-to-speech engine built from code only.

        - No API key
        - No hosted model
        - No pretrained checkpoint
        - Designed for Hugging Face Spaces
        """
    )

    with gr.Row():
        with gr.Column():
            text = gr.Textbox(
                label="Text",
                value="Hello. This is a simple text to speech demo built only with code.",
                lines=8,
            )
            voice = gr.Dropdown(
                label="Voice",
                choices=["neutral", "bright", "deep"],
                value="neutral",
            )
            speed = gr.Slider(
                label="Speed",
                minimum=0.6,
                maximum=1.6,
                value=1.0,
                step=0.1,
            )
            pitch = gr.Slider(
                label="Pitch shift",
                minimum=-0.3,
                maximum=0.3,
                value=0.0,
                step=0.05,
            )
            speak_button = gr.Button("Generate Speech", variant="primary")

        with gr.Column():
            audio = gr.Audio(label="Audio", type="numpy")
            status = gr.Textbox(label="Status", value=service.describe())
            normalized = gr.Textbox(label="Normalized Text", lines=8)

    speak_button.click(
        fn=run_tts,
        inputs=[text, voice, speed, pitch],
        outputs=[audio, status, normalized],
    )


if __name__ == "__main__":
    demo.launch()