File size: 1,981 Bytes
b74ac65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python

import gradio as gr
import numpy as np
import spaces
from kokoro import KPipeline

pipeline = KPipeline(lang_code="j")

VOICES = [
    "jf_alpha",
    "jf_gongitsune",
    "jf_nezumi",
    "jf_tebukuro",
    "jm_kumo",
]


@spaces.GPU(duration=20)
def run(text: str, voice: str, speed: float) -> tuple[tuple[int, np.ndarray], str]:
    generator = pipeline(
        text,
        voice=voice,
        speed=speed,
        split_pattern=r"\n+",
    )
    _, ps, audio = next(generator)
    return (24000, audio.numpy()), ps


with gr.Blocks(css_paths="style.css") as demo:
    gr.Markdown("# Kokoro (ja)")
    with gr.Row():
        with gr.Column():
            input_text = gr.Textbox(label="Input Text")
            voice = gr.Dropdown(label="Voice", choices=VOICES, value=VOICES[0])
            speed = gr.Slider(label="Speed", minimum=0.5, maximum=2.0, step=0.1, value=1.0)
            run_button = gr.Button()
        with gr.Column():
            output_audio = gr.Audio(label="Output Audio", autoplay=True)
            output_tokens = gr.Textbox(label="Output Tokens")
    gr.Examples(
        examples=[
            "どうもこんにちは。今日はいい天気ですね。",
            "隣の竹垣に竹立てかけたのは隣の竹垣に竹立てかけたかったからと骨粗鬆症の東京特許許可局局長がマサチューセッツ州の美術室で魔術師が呪術師と手術中に供述。",
            "李も桃も桃のうち",
            "隣の客はよく柿食う客だ",
            "裏庭には二羽、庭には二羽、鶏がいる。",
            "貴社の記者が汽車で帰社した。橋の端にある箸。石でできた医師。お食事券にまつわる汚職事件。",
        ],
        inputs=input_text,
    )

    run_button.click(
        fn=run,
        inputs=[input_text, voice, speed],
        outputs=[output_audio, output_tokens],
    )

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