Xinonria commited on
Commit
66cfc4d
·
1 Parent(s): 935432b

降级gradio-i18n

Browse files
Files changed (2) hide show
  1. app.py +123 -122
  2. requirements.txt +1 -1
app.py CHANGED
@@ -6,6 +6,7 @@ import logging
6
  import gradio as gr
7
  import pandas as pd
8
  from pypinyin import lazy_pinyin
 
9
 
10
  from api import generate_api
11
 
@@ -249,139 +250,139 @@ def on_select(evt: gr.SelectData, characters, selected_characters, all_character
249
  return selected["名称"], gr.Dropdown(choices=emotions, value=default_emotion), character_dict, selected_characters
250
 
251
  with gr.Blocks(title="Rubii TTS", theme=gr.themes.Soft()) as demo:
252
- lang = gr.Radio(choices=[("中文", "zh"), ("English", "en"), ("日本語", "ja"), ("한국인", "ko")], label=("Language"), value="zh", scale=1)
253
  all_characters_state = gr.State(load_characters_csv("zh"))
254
 
255
- # with Translate(trans_file, lang, placeholder_langs=["en", "zh", "ja", "ko"]):
256
- gr.Markdown(
257
- value=("""## 🎉 欢迎使用Rubii语音合成系统 🎉
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
 
259
- #### [🗣️ 不想只是听到角色的声音,还想与他们进行互动交流吗?快点击我来体验与这些角色的生动对话吧!(中国大陆暂不可用) 🌟](https://rubii.ai)
260
-
261
- 📝 使用说明:
262
- 1. 选择角色类别 🎭
263
- 2. 从图库中选择一个或多个角色(最多5个) 👥。当选择多个角色时,系统会自动进行声线融合(以第一个角色为主音色,其他角色为辅助音色),您可以尝试不同的组合来获得独特的声音效果。
264
- 3. 选择角色的情绪 😊😢😠
265
- 4. 输入要合成的文本 ✍️
266
- 5. 点击"合成语音"按钮 🔊
267
- """
268
- ))
269
- with gr.Group():
270
- initial_characters = get_characters(kind="原神", lang="zh", all_characters=all_characters_state.value)
271
- characters = gr.State(initial_characters)
272
- selected_characters = gr.State([])
273
- current_character = gr.State(None)
274
-
275
- with gr.Blocks():
276
- with gr.Row():
277
- # kind = gr.Dropdown(choices=["原神", "崩坏星穹铁道","鸣潮","明日方舟","其他"], value="原神", label="请选择角色类别")
278
- choices = ["原神", "崩坏星穹铁道", "鸣潮"]
279
- kind = gr.Dropdown(choices=[((name), name) for name in choices], value="原神", label=("选择角色类别"))
280
- query = gr.Textbox(label=("搜索角色"), value="", lines=1, max_lines=1, interactive=True)
281
  with gr.Blocks():
282
- gallery = gr.Gallery(
283
- value=[[char['头像'], char['名称']] for char in characters.value],
284
- show_label=False,
285
- elem_id="character_gallery",
286
- columns=[11],
287
- object_fit="contain",
288
- height="auto",
289
- interactive=False,
290
- allow_preview=False,
291
- selected_index=None
292
- )
293
- with gr.Row():
294
- character_name = gr.Textbox(label=("当前选择的角色"), interactive=False, max_lines=1)
295
- info_type = gr.Dropdown(choices=[], label=("选择情绪"))
296
- with gr.Row():
297
- add_voice_button = gr.Button(("添加新的声音"), variant="primary")
298
-
299
- selected_chars_container = gr.Column(elem_id="selected_chars_container", visible=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
 
301
- with selected_chars_container:
302
- gr.Markdown(("### 已选择的角色"))
303
- selected_chars_rows = []
304
- for i in range(5): # 假设最多选择5个角色
305
- with gr.Row() as row:
306
- name = gr.Textbox(label=("名称"), interactive=False, max_lines=1)
307
- emotion = gr.Textbox(label=("情绪"), interactive=False, max_lines=1)
308
- delete_btn = gr.Button(("删除"), scale=0)
309
- selected_chars_rows.append((name, emotion, delete_btn, row))
310
-
311
-
312
- # -------------- 绑定事件 --------------
313
-
314
- lang.change(
315
- fn=update_all_characters,
316
- inputs=[lang, all_characters_state],
317
- outputs=[all_characters_state, characters, gallery]
318
- )
319
-
320
- add_voice_button.click(
321
- fn=add_new_voice,
322
- inputs=[current_character, selected_characters, kind, lang, all_characters_state],
323
- outputs=[current_character, character_name, info_type, selected_characters,
324
- characters, gallery, selected_chars_container, all_characters_state]
325
- ).then(
326
- fn=update_selected_chars_display,
327
- inputs=[selected_characters],
328
- outputs=[item for row in selected_chars_rows for item in row]
329
- )
330
-
331
-
332
- gallery.select(
333
- fn=on_select,
334
- inputs=[characters, selected_characters, all_characters_state],
335
- outputs=[character_name, info_type, current_character, selected_characters]
336
- )
337
-
338
- info_type.change(
339
- fn=update_character_info,
340
- inputs=[character_name, info_type, current_character, all_characters_state],
341
- outputs=[current_character, all_characters_state]
342
- )
343
-
344
- for i, (_, _, delete_btn, _) in enumerate(selected_chars_rows):
345
- delete_btn.click(
346
- fn=remove_character,
347
- inputs=[gr.Number(value=i, visible=False), selected_characters],
348
- outputs=[selected_characters, selected_chars_container]
349
  ).then(
350
  fn=update_selected_chars_display,
351
  inputs=[selected_characters],
352
  outputs=[item for row in selected_chars_rows for item in row]
353
  )
354
-
355
- kind.change(
356
- fn=update_gallery,
357
- inputs=[kind, query, all_characters_state],
358
- outputs=[characters, gallery, all_characters_state]
359
- )
360
-
361
- query.change(
362
- fn=update_gallery,
363
- inputs=[kind, query, all_characters_state],
364
- outputs=[characters, gallery, all_characters_state]
365
- )
366
-
367
- with gr.Row():
368
- with gr.Column():
369
- text = gr.Textbox(label=("需要合成的文本"), value="", lines=10, max_lines=10)
370
- inference_button = gr.Button(("🎉 合成语音 🎉"), variant="primary", size='lg')
371
- with gr.Column():
372
- output = gr.Audio(label=("输出的语音"), interactive=False, type="numpy")
373
- cost_time = gr.Textbox(label=("合成时间"), interactive=False, show_label=False, max_lines=1)
374
- try:
375
- inference_button.click(
376
- fn=generate,
377
- inputs=[current_character, selected_characters, text, lang],
378
- outputs=[output, cost_time],
 
 
 
 
 
 
 
 
 
 
379
  )
380
- except gr.Error as e:
381
- gr.Error(e)
382
- except Exception as e:
383
- pass
384
- gr.Markdown((terms))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
 
386
  if __name__ == '__main__':
387
  demo.queue(default_concurrency_limit=8).launch(
 
6
  import gradio as gr
7
  import pandas as pd
8
  from pypinyin import lazy_pinyin
9
+ from gradio_i18n import Translate, gettext
10
 
11
  from api import generate_api
12
 
 
250
  return selected["名称"], gr.Dropdown(choices=emotions, value=default_emotion), character_dict, selected_characters
251
 
252
  with gr.Blocks(title="Rubii TTS", theme=gr.themes.Soft()) as demo:
253
+ lang = gr.Radio(choices=[("中文", "zh"), ("English", "en"), ("日本語", "ja"), ("한국인", "ko")], label=gettext("Language"), value="zh", scale=1)
254
  all_characters_state = gr.State(load_characters_csv("zh"))
255
 
256
+ with Translate(trans_file, lang, placeholder_langs=["en", "zh", "ja", "ko"]):
257
+ gr.Markdown(
258
+ value=gettext("""## 🎉 欢迎使用Rubii语音合成系统 🎉
259
+
260
+ #### [🗣️ 不想只是听到角色的声音,还想与他们进行互动交流吗?快点击我来体验与这些角色的生动对话吧!(中国大陆暂不可用) 🌟](https://rubii.ai)
261
+
262
+ 📝 使用说明:
263
+ 1. 选择角色类别 🎭
264
+ 2. 从图库中选择一个或多个角色(最多5个) 👥。当选择多个角色时,系统会自动进行声线融合(以第一个角色为主音色,其他角色为辅助音色),您可以尝试不同的组合来获得独特的声音效果。
265
+ 3. 选择角色的情绪 😊😢😠
266
+ 4. 输入要合成的文本 ✍️
267
+ 5. 点击"合成语音"按钮 🔊
268
+ """
269
+ ))
270
+ with gr.Group():
271
+ initial_characters = get_characters(kind="原神", lang="zh", all_characters=all_characters_state.value)
272
+ characters = gr.State(initial_characters)
273
+ selected_characters = gr.State([])
274
+ current_character = gr.State(None)
275
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  with gr.Blocks():
277
+ with gr.Row():
278
+ # kind = gr.Dropdown(choices=["原神", "崩坏星穹铁道","鸣潮","明日方舟","其他"], value="原神", label="请选择角色类别")
279
+ choices = ["原神", "崩坏星穹铁道", "鸣潮"]
280
+ kind = gr.Dropdown(choices=[((name), name) for name in choices], value="原神", label=gettext("选择角色类别"))
281
+ query = gr.Textbox(label=gettext("搜索角色"), value="", lines=1, max_lines=1, interactive=True)
282
+ with gr.Blocks():
283
+ gallery = gr.Gallery(
284
+ value=[[char['头像'], char['名称']] for char in characters.value],
285
+ show_label=False,
286
+ elem_id="character_gallery",
287
+ columns=[11],
288
+ object_fit="contain",
289
+ height="auto",
290
+ interactive=False,
291
+ allow_preview=False,
292
+ selected_index=None
293
+ )
294
+ with gr.Row():
295
+ character_name = gr.Textbox(label=gettext("当前选择的角色"), interactive=False, max_lines=1)
296
+ info_type = gr.Dropdown(choices=[], label=gettext("选择情绪"))
297
+ with gr.Row():
298
+ add_voice_button = gr.Button(gettext("添加新的声音"), variant="primary")
299
+
300
+ selected_chars_container = gr.Column(elem_id="selected_chars_container", visible=False)
301
+
302
+ with selected_chars_container:
303
+ gr.Markdown(gettext("### 已选择的角色"))
304
+ selected_chars_rows = []
305
+ for i in range(5): # 假设最多选择5个角色
306
+ with gr.Row() as row:
307
+ name = gr.Textbox(label=gettext("名称"), interactive=False, max_lines=1)
308
+ emotion = gr.Textbox(label=gettext("情绪"), interactive=False, max_lines=1)
309
+ delete_btn = gr.Button(gettext("删除"), scale=0)
310
+ selected_chars_rows.append((name, emotion, delete_btn, row))
311
+
312
+
313
+ # -------------- 绑定事件 --------------
314
 
315
+ lang.change(
316
+ fn=update_all_characters,
317
+ inputs=[lang, all_characters_state],
318
+ outputs=[all_characters_state, characters, gallery]
319
+ )
320
+
321
+ add_voice_button.click(
322
+ fn=add_new_voice,
323
+ inputs=[current_character, selected_characters, kind, lang, all_characters_state],
324
+ outputs=[current_character, character_name, info_type, selected_characters,
325
+ characters, gallery, selected_chars_container, all_characters_state]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  ).then(
327
  fn=update_selected_chars_display,
328
  inputs=[selected_characters],
329
  outputs=[item for row in selected_chars_rows for item in row]
330
  )
331
+
332
+
333
+ gallery.select(
334
+ fn=on_select,
335
+ inputs=[characters, selected_characters, all_characters_state],
336
+ outputs=[character_name, info_type, current_character, selected_characters]
337
+ )
338
+
339
+ info_type.change(
340
+ fn=update_character_info,
341
+ inputs=[character_name, info_type, current_character, all_characters_state],
342
+ outputs=[current_character, all_characters_state]
343
+ )
344
+
345
+ for i, (_, _, delete_btn, _) in enumerate(selected_chars_rows):
346
+ delete_btn.click(
347
+ fn=remove_character,
348
+ inputs=[gr.Number(value=i, visible=False), selected_characters],
349
+ outputs=[selected_characters, selected_chars_container]
350
+ ).then(
351
+ fn=update_selected_chars_display,
352
+ inputs=[selected_characters],
353
+ outputs=[item for row in selected_chars_rows for item in row]
354
+ )
355
+
356
+ kind.change(
357
+ fn=update_gallery,
358
+ inputs=[kind, query, all_characters_state],
359
+ outputs=[characters, gallery, all_characters_state]
360
+ )
361
+
362
+ query.change(
363
+ fn=update_gallery,
364
+ inputs=[kind, query, all_characters_state],
365
+ outputs=[characters, gallery, all_characters_state]
366
  )
367
+
368
+ with gr.Row():
369
+ with gr.Column():
370
+ text = gr.Textbox(label=gettext("需要合成的文本"), value="", lines=10, max_lines=10)
371
+ inference_button = gr.Button(gettext("🎉 合成语音 🎉"), variant="primary", size='lg')
372
+ with gr.Column():
373
+ output = gr.Audio(label=gettext("输出的语音"), interactive=False, type="numpy")
374
+ cost_time = gr.Textbox(label=gettext("合成时间"), interactive=False, show_label=False, max_lines=1)
375
+ try:
376
+ inference_button.click(
377
+ fn=generate,
378
+ inputs=[current_character, selected_characters, text, lang],
379
+ outputs=[output, cost_time],
380
+ )
381
+ except gr.Error as e:
382
+ gr.Error(e)
383
+ except Exception as e:
384
+ pass
385
+ gr.Markdown(gettext(terms))
386
 
387
  if __name__ == '__main__':
388
  demo.queue(default_concurrency_limit=8).launch(
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
  gradio
2
  aiohttp
3
  pypinyin
4
- gradio-i18n
 
1
  gradio
2
  aiohttp
3
  pypinyin
4
+ gradio-i18n==0.0.10