Spaces:
Running
Running
Upload app.py
Browse files
app.py
CHANGED
@@ -115,26 +115,20 @@ Follow this JSON example structure, MUST be in {language} language:
|
|
115 |
|
116 |
async def tts_generate(input_text, speaker1, speaker2):
|
117 |
voice_names = {
|
118 |
-
"
|
119 |
-
"
|
120 |
-
"
|
121 |
-
"
|
122 |
-
"
|
123 |
-
"
|
124 |
-
"
|
125 |
-
"
|
126 |
-
"
|
127 |
-
"
|
128 |
-
"Yunxia - 中文 (Male)": "zh-CN-YunxiaNeural",
|
129 |
-
"Yunyang - 中文 (Male)": "zh-CN-YunyangNeural",
|
130 |
-
"Xiaobei - 中文 (Female)": "zh-CN-liaoning-XiaobeiNeural",
|
131 |
-
"Xiaoni - 中文 (Female)": "zh-CN-shaanxi-XiaoniNeural",
|
132 |
"Andrew - English (Male)": "en-US-AndrewMultilingualNeural",
|
133 |
"Ava - English (Female)": "en-US-AvaMultilingualNeural",
|
134 |
"Brian - English (Male)": "en-US-BrianMultilingualNeural",
|
135 |
"Emma - English (Female)": "en-US-EmmaMultilingualNeural",
|
136 |
-
"Masaru - Japanese (Male)": "ja-JP-MasaruMultilingualNeural",
|
137 |
-
"Hyunsu - Korean (Male)": "ko-KR-HyunsuMultilingualNeural",
|
138 |
"Florian - German (Male)": "de-DE-FlorianMultilingualNeural",
|
139 |
"Seraphina - German (Female)": "de-DE-SeraphinaMultilingualNeural",
|
140 |
"Remy - French (Male)": "fr-FR-RemyMultilingualNeural",
|
@@ -242,6 +236,16 @@ body {
|
|
242 |
padding: 5px !important;
|
243 |
border-radius: 10px !important;
|
244 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
"""
|
246 |
|
247 |
with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
@@ -260,26 +264,20 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
|
260 |
)
|
261 |
|
262 |
speaker_choices = [
|
263 |
-
"
|
264 |
-
"
|
265 |
-
"
|
266 |
-
"
|
267 |
-
"
|
268 |
-
"
|
269 |
-
"
|
270 |
-
"
|
271 |
-
"
|
272 |
-
"
|
273 |
-
"Yunxia - 中文 (Male)",
|
274 |
-
"Yunyang - 中文 (Male)",
|
275 |
-
"Xiaobei - 中文 (Female)",
|
276 |
-
"Xiaoni - 中文 (Female)",
|
277 |
"Andrew - English (Male)",
|
278 |
"Ava - English (Female)",
|
279 |
"Brian - English (Male)",
|
280 |
"Emma - English (Female)",
|
281 |
-
"Masaru - Japanese (Male)",
|
282 |
-
"Hyunsu - Korean (Male)",
|
283 |
"Florian - German (Male)",
|
284 |
"Seraphina - German (Female)",
|
285 |
"Remy - French (Male)",
|
@@ -288,7 +286,7 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
|
288 |
|
289 |
Speaker_1 = gr.Dropdown(
|
290 |
choices=speaker_choices,
|
291 |
-
value="
|
292 |
label="主持人的語音",
|
293 |
interactive=True,
|
294 |
scale=2,
|
@@ -296,7 +294,7 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
|
296 |
)
|
297 |
Speaker_2 = gr.Dropdown(
|
298 |
choices=speaker_choices,
|
299 |
-
value="
|
300 |
label="來賓的語音",
|
301 |
interactive=True,
|
302 |
scale=2,
|
@@ -305,9 +303,9 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
|
305 |
|
306 |
with gr.Row():
|
307 |
generate_button = gr.Button("生成", scale=2, elem_classes="gen-button")
|
308 |
-
api_key = gr.Textbox(label="API Key", type="password", placeholder="API authentication key for large language models", scale=1)
|
309 |
|
310 |
-
audio_output = gr.Audio(label="Generated Podcast Audio")
|
311 |
podcast_script = gr.Textbox(label="Generated Podcast 劇本")
|
312 |
generate_button.click(fn=process_podcast, inputs=[input_text, Language, Speaker_1, Speaker_2, api_key], outputs=[podcast_script, audio_output])
|
313 |
|
|
|
115 |
|
116 |
async def tts_generate(input_text, speaker1, speaker2):
|
117 |
voice_names = {
|
118 |
+
"家豪 - 臺灣國語 (Male)": "zh-TW-YunJheNeural",
|
119 |
+
"淑芬 - 臺灣國語 (Female)": "zh-TW-HsiaoChenNeural",
|
120 |
+
"子晴 - 臺灣國語 (Female)": "zh-TW-HsiaoYuNeural",
|
121 |
+
"品妍 - 中文 (Female)": "zh-CN-XiaoxiaoNeural",
|
122 |
+
"美玲 - 中文 (Female)": "zh-CN-XiaoyiNeural",
|
123 |
+
"建宏 - 中文 (Male)": "zh-CN-YunjianNeural",
|
124 |
+
"品睿 - 中文 (Male)": "zh-CN-YunxiNeural",
|
125 |
+
"宥廷 - 中文 (Male)": "zh-CN-YunxiaNeural",
|
126 |
+
"志明 - 中文 (Male)": "zh-CN-YunyangNeural",
|
127 |
+
"雨霏 - 中文 (Female)": "zh-CN-liaoning-XiaobeiNeural",
|
|
|
|
|
|
|
|
|
128 |
"Andrew - English (Male)": "en-US-AndrewMultilingualNeural",
|
129 |
"Ava - English (Female)": "en-US-AvaMultilingualNeural",
|
130 |
"Brian - English (Male)": "en-US-BrianMultilingualNeural",
|
131 |
"Emma - English (Female)": "en-US-EmmaMultilingualNeural",
|
|
|
|
|
132 |
"Florian - German (Male)": "de-DE-FlorianMultilingualNeural",
|
133 |
"Seraphina - German (Female)": "de-DE-SeraphinaMultilingualNeural",
|
134 |
"Remy - French (Male)": "fr-FR-RemyMultilingualNeural",
|
|
|
236 |
padding: 5px !important;
|
237 |
border-radius: 10px !important;
|
238 |
}
|
239 |
+
.api-background {
|
240 |
+
background-color: #FFCFB3 !important;
|
241 |
+
padding: 5px !important;
|
242 |
+
border-radius: 10px !important;
|
243 |
+
}
|
244 |
+
.audio-background {
|
245 |
+
background-color: #E78F81 !important;
|
246 |
+
padding: 5px !important;
|
247 |
+
border-radius: 10px !important;
|
248 |
+
}
|
249 |
"""
|
250 |
|
251 |
with gr.Blocks(theme=gr.themes.Monochrome(), css=custom_css) as iface:
|
|
|
264 |
)
|
265 |
|
266 |
speaker_choices = [
|
267 |
+
"家豪 - 臺灣國語 (Male)",
|
268 |
+
"淑芬 - 臺灣國語 (Female)",
|
269 |
+
"子晴 - 臺灣國語 (Female)",
|
270 |
+
"品睿 - 中文 (Male)",
|
271 |
+
"品妍 - 中文 (Female)",
|
272 |
+
"志明 - 中文 (Male)",
|
273 |
+
"美玲 - 中文 (Female)",
|
274 |
+
"建宏 - 中文 (Male)",
|
275 |
+
"宥廷 - 中文 (Male)",
|
276 |
+
"雨霏 - 中文 (Female)",
|
|
|
|
|
|
|
|
|
277 |
"Andrew - English (Male)",
|
278 |
"Ava - English (Female)",
|
279 |
"Brian - English (Male)",
|
280 |
"Emma - English (Female)",
|
|
|
|
|
281 |
"Florian - German (Male)",
|
282 |
"Seraphina - German (Female)",
|
283 |
"Remy - French (Male)",
|
|
|
286 |
|
287 |
Speaker_1 = gr.Dropdown(
|
288 |
choices=speaker_choices,
|
289 |
+
value="家豪 - 臺灣國語 (Male)",
|
290 |
label="主持人的語音",
|
291 |
interactive=True,
|
292 |
scale=2,
|
|
|
294 |
)
|
295 |
Speaker_2 = gr.Dropdown(
|
296 |
choices=speaker_choices,
|
297 |
+
value="品妍 - 中文 (Female)",
|
298 |
label="來賓的語音",
|
299 |
interactive=True,
|
300 |
scale=2,
|
|
|
303 |
|
304 |
with gr.Row():
|
305 |
generate_button = gr.Button("生成", scale=2, elem_classes="gen-button")
|
306 |
+
api_key = gr.Textbox(label="API Key", type="password", placeholder="API authentication key for large language models", scale=1, elem_classes="api-background")
|
307 |
|
308 |
+
audio_output = gr.Audio(label="Generated Podcast Audio", elem_classes="audio-background")
|
309 |
podcast_script = gr.Textbox(label="Generated Podcast 劇本")
|
310 |
generate_button.click(fn=process_podcast, inputs=[input_text, Language, Speaker_1, Speaker_2, api_key], outputs=[podcast_script, audio_output])
|
311 |
|