Staticaliza commited on
Commit
24cdd02
·
verified ·
1 Parent(s): 1f5efa0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -29
app.py CHANGED
@@ -1,12 +1,20 @@
 
 
1
  import spaces
 
2
  from kokoro import KModel, KPipeline
3
- import gradio as gr
4
 
5
- CHAR_LIMIT = 5000
 
 
 
 
6
 
7
- PIPELINES = {lang: KPipeline(lang_code=lang, model=False) for lang in "ab"}
8
- PIPELINES["a"].g2p.lexicon.golds["kokoro"] = "kˈOkəɹO"
9
- PIPELINES["b"].g2p.lexicon.golds["kokoro"] = "kˈQkəɹQ"
 
 
10
 
11
  CHOICES = {
12
  "🇺🇸 🚺 Heart ❤️": "af_heart",
@@ -39,45 +47,55 @@ CHOICES = {
39
  "🇬🇧 🚹 Daniel": "bm_daniel",
40
  }
41
 
 
 
 
 
42
  for v in CHOICES.values():
43
  PIPELINES[v[0]].load_voice(v)
44
 
45
  MODEL = KModel().eval()
46
 
47
- def generate_first(text, voice="af_heart", speed=1):
48
- text = text.strip()[:CHAR_LIMIT]
 
 
 
 
 
 
 
 
 
49
  pipeline = PIPELINES[voice[0]]
50
  pack = pipeline.load_voice(voice)
 
51
  for _, ps, _ in pipeline(text, voice, speed):
52
  ref_s = pack[len(ps) - 1]
53
  audio = MODEL(ps, ref_s, speed)
54
  return (24000, audio.numpy())
55
- return None
56
 
57
- def predict(text, voice="af_heart", speed=1):
58
- return generate_first(text, voice, speed)
59
-
60
- def generate_all(text, voice="af_heart", speed=1):
61
- text = text.strip()[:CHAR_LIMIT]
62
- pipeline = PIPELINES[voice[0]]
63
- pack = pipeline.load_voice(voice)
64
- for _, ps, _ in pipeline(text, voice, speed):
65
- ref_s = pack[len(ps) - 1]
66
- audio = MODEL(ps, ref_s, speed)
67
- yield 24000, audio.numpy()
68
 
69
  @spaces.GPU()
70
  def gpu():
71
  return
72
 
73
- with gr.Blocks() as app:
74
- with gr.Row():
75
- text_input = gr.Textbox(label="input text")
76
- voice_input = gr.Dropdown(list(CHOICES.items()), value="af_heart", label="voice")
77
- speed_input = gr.Slider(minimum=0.5, maximum=2, value=1, step=0.1, label="speed")
78
- out_audio = gr.Audio(label="output audio", interactive=False, autoplay=True)
79
- gen_btn = gr.Button("generate")
80
- gen_btn.click(fn=generate_first, inputs=[text_input, voice_input, speed_input], outputs=out_audio)
 
 
 
 
 
 
 
81
 
82
- if __name__ == "__main__":
83
- app.launch()
 
1
+ # Imports
2
+ import gradio as gr
3
  import spaces
4
+
5
  from kokoro import KModel, KPipeline
 
6
 
7
+ # Pre-Initialize
8
+ DEVICE = "auto"
9
+ if DEVICE == "auto":
10
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
11
+ print(f"[SYSTEM] | Using {DEVICE} type compute device.")
12
 
13
+ # Variables
14
+ CHAR_LIMIT = 2000
15
+
16
+ DEFAULT_INPUT = ""
17
+ DEFAULT_VOICE = "af_heart"
18
 
19
  CHOICES = {
20
  "🇺🇸 🚺 Heart ❤️": "af_heart",
 
47
  "🇬🇧 🚹 Daniel": "bm_daniel",
48
  }
49
 
50
+ PIPELINES = {lang: KPipeline(lang_code=lang, model=False) for lang in "ab"}
51
+ PIPELINES["a"].g2p.lexicon.golds["kokoro"] = "kˈOkəɹO"
52
+ PIPELINES["b"].g2p.lexicon.golds["kokoro"] = "kˈQkəɹQ"
53
+
54
  for v in CHOICES.values():
55
  PIPELINES[v[0]].load_voice(v)
56
 
57
  MODEL = KModel().eval()
58
 
59
+ css = '''
60
+ .gradio-container{max-width: 560px !important}
61
+ h1{text-align:center}
62
+ footer {
63
+ visibility: hidden
64
+ }
65
+ '''
66
+
67
+ # Functions
68
+ def generate(text=DEFAULT_INPUT, voice=DEFAULT_VOICE, speed=1):
69
+ text = text.strip()[:CHAR_LIMIT] + "."
70
  pipeline = PIPELINES[voice[0]]
71
  pack = pipeline.load_voice(voice)
72
+
73
  for _, ps, _ in pipeline(text, voice, speed):
74
  ref_s = pack[len(ps) - 1]
75
  audio = MODEL(ps, ref_s, speed)
76
  return (24000, audio.numpy())
 
77
 
78
+ def cloud():
79
+ print("[CLOUD] | Space maintained.")
 
 
 
 
 
 
 
 
 
80
 
81
  @spaces.GPU()
82
  def gpu():
83
  return
84
 
85
+ # Initialize
86
+ with gr.Blocks(css=css) as main:
87
+ with gr.Column():
88
+ input = gr.Textbox(lines=1, value=DEFAULT_INPUT, label="Input")
89
+ voice_input = gr.Dropdown(list(CHOICES.items()), value=DEFAULT_VOICE, label="Voice")
90
+ speed_input = gr.Slider(minimum=0.5, maximum=2, value=1, step=0.1, label="Speed")
91
+
92
+ submit = gr.Button("▶")
93
+ maintain = gr.Button("☁️")
94
+
95
+ with gr.Column():
96
+ output = gr.Audio(label="Output")
97
+
98
+ submit.click(fn=generate, inputs=[input, voice_input, speed_input], outputs=output)
99
+ maintain.click(cloud, inputs=[], outputs=[], queue=False)
100
 
101
+ main.launch(show_api=True)