Spaces:
Running
Running
Upload 7 files
Browse files- app.py +352 -142
- get_voices.py +115 -0
- header.py +25 -25
- output/new_audio.mp3 +0 -0
- output/new_audio.wav +0 -0
- requirements.txt +1 -2
- voices.json +1422 -0
app.py
CHANGED
@@ -1,142 +1,352 @@
|
|
1 |
-
import subprocess
|
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 |
-
def remove_silence(input_file, output_file):
|
49 |
-
audio = AudioSegment.from_wav(input_file)
|
50 |
-
|
51 |
-
# Encontra os segmentos de áudio que não são silêncio
|
52 |
-
segments = split_on_silence(audio, min_silence_len=500, silence_thresh=-40)
|
53 |
-
|
54 |
-
# Concatena os segmentos de áudio não silenciosos
|
55 |
-
non_silent_audio = AudioSegment.silent(duration=0)
|
56 |
-
for segment in segments:
|
57 |
-
non_silent_audio += segment
|
58 |
-
|
59 |
-
# Salva o áudio sem as partes de silêncio
|
60 |
-
non_silent_audio.export(output_file, format="wav")
|
61 |
-
|
62 |
-
def controlador_generate_audio(audio_input, voice_model_input, speed_input, checkbox_cortar_silencio):
|
63 |
-
# Gerar áudio
|
64 |
-
audio_file = generate_audio(audio_input, voice_model_input, speed_input)
|
65 |
-
if audio_file:
|
66 |
-
print("Áudio gerado com sucesso:", audio_file)
|
67 |
-
# Verificar se o checkbox de cortar silêncio está marcado
|
68 |
-
if checkbox_cortar_silencio:
|
69 |
-
print("Cortando silêncio...")
|
70 |
-
# Remover silêncio do áudio
|
71 |
-
remove_silence(audio_file, audio_file)
|
72 |
-
print("Silêncio removido com sucesso!")
|
73 |
-
else:
|
74 |
-
print("Erro ao gerar áudio.")
|
75 |
-
return audio_file # Retornar o caminho do arquivo de áudio
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import subprocess
|
2 |
+
import os
|
3 |
+
import json
|
4 |
+
import gradio as gr
|
5 |
+
from pydub import AudioSegment
|
6 |
+
from header import badges, description
|
7 |
+
from pydub.silence import split_on_silence
|
8 |
+
from get_voices import get_voices
|
9 |
+
#from adjust import remove_silence, controlador_generate_audio, generate_audio
|
10 |
+
|
11 |
+
# Load voices from JSON file
|
12 |
+
def load_voices():
|
13 |
+
with open('voices.json', 'r', encoding='utf-8') as f:
|
14 |
+
return json.load(f)
|
15 |
+
|
16 |
+
# Get formatted voice options for specific language
|
17 |
+
def get_voice_options(language, voices_data):
|
18 |
+
if language in voices_data:
|
19 |
+
return [f"{voice['name']} | {voice['gender']}" for voice in voices_data[language]]
|
20 |
+
return []
|
21 |
+
|
22 |
+
# Extract voice name from formatted string
|
23 |
+
def extract_voice_name(formatted_voice):
|
24 |
+
return formatted_voice.split(" | ")[0]
|
25 |
+
|
26 |
+
def update_voice_options(language):
|
27 |
+
voices_data = load_voices()
|
28 |
+
voice_options = get_voice_options(language, voices_data)
|
29 |
+
# Retorna apenas a lista de opções e o primeiro valor
|
30 |
+
if voice_options:
|
31 |
+
return gr.Dropdown(choices=voice_options, value=voice_options[0])
|
32 |
+
return gr.Dropdown(choices=[], value=None)
|
33 |
+
|
34 |
+
def update_voices_and_refresh():
|
35 |
+
# Execute get_voices to update the voices.json file
|
36 |
+
get_voices()
|
37 |
+
# Reload the voices data
|
38 |
+
voices_data = load_voices()
|
39 |
+
available_languages = list(voices_data.keys())
|
40 |
+
# Get initial voices for the first language
|
41 |
+
initial_voices = get_voice_options(available_languages[0], voices_data) if available_languages else []
|
42 |
+
|
43 |
+
return (
|
44 |
+
gr.Dropdown(choices=available_languages, value=available_languages[0] if available_languages else None),
|
45 |
+
gr.Dropdown(choices=initial_voices, value=initial_voices[0] if initial_voices else None)
|
46 |
+
)
|
47 |
+
|
48 |
+
def remove_silence(input_file, output_file):
|
49 |
+
audio = AudioSegment.from_wav(input_file)
|
50 |
+
|
51 |
+
# Encontra os segmentos de áudio que não são silêncio
|
52 |
+
segments = split_on_silence(audio, min_silence_len=500, silence_thresh=-40)
|
53 |
+
|
54 |
+
# Concatena os segmentos de áudio não silenciosos
|
55 |
+
non_silent_audio = AudioSegment.silent(duration=0)
|
56 |
+
for segment in segments:
|
57 |
+
non_silent_audio += segment
|
58 |
+
|
59 |
+
# Salva o áudio sem as partes de silêncio
|
60 |
+
non_silent_audio.export(output_file, format="wav")
|
61 |
+
|
62 |
+
def controlador_generate_audio(audio_input, voice_model_input, speed_input, pitch_input, volume_input, checkbox_cortar_silencio):
|
63 |
+
# Gerar áudio
|
64 |
+
audio_file = generate_audio(audio_input, voice_model_input, speed_input, pitch_input, volume_input)
|
65 |
+
if audio_file:
|
66 |
+
print("Áudio gerado com sucesso:", audio_file)
|
67 |
+
# Verificar se o checkbox de cortar silêncio está marcado
|
68 |
+
if checkbox_cortar_silencio:
|
69 |
+
print("Cortando silêncio...")
|
70 |
+
# Remover silêncio do áudio
|
71 |
+
remove_silence(audio_file, audio_file)
|
72 |
+
print("Silêncio removido com sucesso!")
|
73 |
+
else:
|
74 |
+
print("Erro ao gerar áudio.")
|
75 |
+
return audio_file # Retornar o caminho do arquivo de áudio
|
76 |
+
|
77 |
+
def generate_audio(texto, modelo_de_voz, velocidade, tom, volume):
|
78 |
+
# Extract actual voice name from formatted string if necessary
|
79 |
+
actual_voice = extract_voice_name(modelo_de_voz)
|
80 |
+
|
81 |
+
# Format parameters with proper signs
|
82 |
+
if velocidade >= 0:
|
83 |
+
rate_str = f"+{velocidade}%"
|
84 |
+
else:
|
85 |
+
rate_str = f"{velocidade}%"
|
86 |
+
|
87 |
+
if tom >= 0:
|
88 |
+
pitch_str = f"+{tom}Hz"
|
89 |
+
else:
|
90 |
+
pitch_str = f"{tom}Hz"
|
91 |
+
|
92 |
+
if volume >= 0:
|
93 |
+
volume_str = f"+{volume}%"
|
94 |
+
else:
|
95 |
+
volume_str = f"{volume}%"
|
96 |
+
|
97 |
+
output_dir = "output"
|
98 |
+
os.makedirs(output_dir, exist_ok=True)
|
99 |
+
mp3_output_file = os.path.join(output_dir, "new_audio.mp3")
|
100 |
+
|
101 |
+
cmd = [
|
102 |
+
"edge-tts",
|
103 |
+
"--rate=" + rate_str,
|
104 |
+
"--pitch=" + pitch_str,
|
105 |
+
"--volume=" + volume_str,
|
106 |
+
"-v", actual_voice,
|
107 |
+
"-t", texto,
|
108 |
+
"--write-media", mp3_output_file
|
109 |
+
]
|
110 |
+
|
111 |
+
print("Gerando áudio...")
|
112 |
+
try:
|
113 |
+
subprocess.run(cmd, check=True)
|
114 |
+
except subprocess.CalledProcessError as e:
|
115 |
+
print("Erro ao gerar áudio:", e)
|
116 |
+
return None
|
117 |
+
|
118 |
+
print("Áudio gerado com sucesso!")
|
119 |
+
wav_output_file = os.path.join(output_dir, "new_audio.wav")
|
120 |
+
audio = AudioSegment.from_mp3(mp3_output_file)
|
121 |
+
audio.export(wav_output_file, format="wav")
|
122 |
+
return wav_output_file
|
123 |
+
|
124 |
+
def generate_audio_from_file(file_path, modelo_de_voz, velocidade, tom, volume):
|
125 |
+
# Extrai o nome real da voz formatada, se necessário
|
126 |
+
actual_voice = extract_voice_name(modelo_de_voz)
|
127 |
+
|
128 |
+
# Formatação dos parâmetros com sinais adequados
|
129 |
+
rate_str = f"+{velocidade}%" if velocidade >= 0 else f"{velocidade}%"
|
130 |
+
pitch_str = f"+{tom}Hz" if tom >= 0 else f"{tom}Hz"
|
131 |
+
volume_str = f"+{volume}%" if volume >= 0 else f"{volume}%"
|
132 |
+
|
133 |
+
output_dir = "output"
|
134 |
+
os.makedirs(output_dir, exist_ok=True)
|
135 |
+
mp3_output_file = os.path.join(output_dir, "new_audio.mp3")
|
136 |
+
|
137 |
+
# Usar -f FILE para passar o caminho do arquivo de texto
|
138 |
+
cmd = [
|
139 |
+
"edge-tts",
|
140 |
+
"-f", file_path, # Certificar que o conteúdo do arquivo seja texto puro
|
141 |
+
"--rate=" + rate_str,
|
142 |
+
"--pitch=" + pitch_str,
|
143 |
+
"--volume=" + volume_str,
|
144 |
+
"-v", actual_voice,
|
145 |
+
"--write-media", mp3_output_file
|
146 |
+
]
|
147 |
+
|
148 |
+
print("Gerando áudio do arquivo...")
|
149 |
+
try:
|
150 |
+
subprocess.run(cmd, check=True)
|
151 |
+
except subprocess.CalledProcessError as e:
|
152 |
+
print("Erro ao gerar áudio:", e)
|
153 |
+
return None
|
154 |
+
|
155 |
+
print("Áudio gerado com sucesso!")
|
156 |
+
wav_output_file = os.path.join(output_dir, "new_audio.wav")
|
157 |
+
audio = AudioSegment.from_mp3(mp3_output_file)
|
158 |
+
audio.export(wav_output_file, format="wav")
|
159 |
+
return wav_output_file
|
160 |
+
|
161 |
+
def controlador_generate_audio_from_file(file, voice_model_input, speed_input, pitch_input, volume_input, checkbox_cortar_silencio):
|
162 |
+
if file is None:
|
163 |
+
return None
|
164 |
+
|
165 |
+
# Neste caso, o 'file' já é o caminho do arquivo, então não precisa reescrever
|
166 |
+
temp_file_path = file # Caminho do arquivo que você recebe do Gradio
|
167 |
+
|
168 |
+
# Gerar o áudio
|
169 |
+
audio_file = generate_audio_from_file(temp_file_path, voice_model_input, speed_input, pitch_input, volume_input)
|
170 |
+
|
171 |
+
if audio_file:
|
172 |
+
print("Áudio gerado com sucesso:", audio_file)
|
173 |
+
if checkbox_cortar_silencio:
|
174 |
+
print("Cortando silêncio...")
|
175 |
+
remove_silence(audio_file, audio_file)
|
176 |
+
print("Silêncio removido com sucesso!")
|
177 |
+
else:
|
178 |
+
print("Erro ao gerar áudio.")
|
179 |
+
|
180 |
+
return audio_file
|
181 |
+
|
182 |
+
with gr.Blocks(theme=gr.themes.Default(primary_hue="green", secondary_hue="blue"), title="QuickTTS") as iface:
|
183 |
+
gr.Markdown(badges)
|
184 |
+
gr.Markdown(description)
|
185 |
+
|
186 |
+
voices_data = load_voices()
|
187 |
+
available_languages = list(voices_data.keys())
|
188 |
+
|
189 |
+
with gr.Tabs():
|
190 |
+
with gr.TabItem("Edge-TTS"):
|
191 |
+
gr.Markdown("É ilimitado, podendo até mesmo colocar um livro inteiro, mas claro, tem a questão de tempo, quanto maior o texto, mais demorado é, dublagem por SRT talvez um dia eu bote.")
|
192 |
+
|
193 |
+
# Language selection dropdown
|
194 |
+
language_input = gr.Dropdown(
|
195 |
+
choices=available_languages,
|
196 |
+
label="Idioma",
|
197 |
+
value=available_languages[52] if available_languages else None
|
198 |
+
)
|
199 |
+
|
200 |
+
# Voice model dropdown (will be updated based on language selection)
|
201 |
+
initial_voices = get_voice_options(available_languages[52], voices_data) if available_languages else []
|
202 |
+
voice_model_input = gr.Dropdown(
|
203 |
+
choices=initial_voices,
|
204 |
+
label="Modelo de Voz",
|
205 |
+
value=initial_voices[0] if initial_voices else None
|
206 |
+
)
|
207 |
+
|
208 |
+
# Connect language selection to voice model update
|
209 |
+
language_input.change(
|
210 |
+
fn=update_voice_options,
|
211 |
+
inputs=[language_input],
|
212 |
+
outputs=[voice_model_input]
|
213 |
+
)
|
214 |
+
|
215 |
+
audio_input = gr.Textbox(label="Texto", value='Texto de exemplo!', interactive=True)
|
216 |
+
|
217 |
+
with gr.Row():
|
218 |
+
with gr.Column():
|
219 |
+
speed_input = gr.Slider(
|
220 |
+
minimum=-200,
|
221 |
+
maximum=200,
|
222 |
+
label="Velocidade (%)",
|
223 |
+
value=0,
|
224 |
+
interactive=True
|
225 |
+
)
|
226 |
+
with gr.Column():
|
227 |
+
pitch_input = gr.Slider(
|
228 |
+
minimum=-100,
|
229 |
+
maximum=100,
|
230 |
+
label="Tom (Hz)",
|
231 |
+
value=0,
|
232 |
+
interactive=True
|
233 |
+
)
|
234 |
+
with gr.Column():
|
235 |
+
volume_input = gr.Slider(
|
236 |
+
minimum=-99,
|
237 |
+
maximum=100,
|
238 |
+
label="Volume (%)",
|
239 |
+
value=0,
|
240 |
+
interactive=True
|
241 |
+
)
|
242 |
+
|
243 |
+
checkbox_cortar_silencio = gr.Checkbox(label="Cortar Silencio", interactive=True)
|
244 |
+
audio_output = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
245 |
+
|
246 |
+
edgetts_button = gr.Button(value="Falar")
|
247 |
+
edgetts_button.click(
|
248 |
+
controlador_generate_audio,
|
249 |
+
inputs=[
|
250 |
+
audio_input,
|
251 |
+
voice_model_input,
|
252 |
+
speed_input,
|
253 |
+
pitch_input, # New input
|
254 |
+
volume_input, # New input
|
255 |
+
checkbox_cortar_silencio
|
256 |
+
],
|
257 |
+
outputs=[audio_output]
|
258 |
+
)
|
259 |
+
|
260 |
+
clear_button = gr.ClearButton(audio_input, value='Limpar')
|
261 |
+
|
262 |
+
# Add update voices button at the top
|
263 |
+
update_voices_btn = gr.Button(value="Atualizar Lista de Vozes")
|
264 |
+
# Connect update voices button to refresh function
|
265 |
+
update_voices_btn.click(
|
266 |
+
fn=update_voices_and_refresh,
|
267 |
+
inputs=[],
|
268 |
+
outputs=[language_input, voice_model_input]
|
269 |
+
)
|
270 |
+
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
271 |
+
|
272 |
+
with gr.TabItem("Lote (Arquivo txt)"):
|
273 |
+
gr.Markdown("Carregar texto de um arquivo")
|
274 |
+
# Language and voice selection (same as first tab)
|
275 |
+
language_input_file = gr.Dropdown(
|
276 |
+
choices=available_languages,
|
277 |
+
label="Idioma",
|
278 |
+
value=available_languages[52] if available_languages else None
|
279 |
+
)
|
280 |
+
|
281 |
+
initial_voices = get_voice_options(available_languages[52], voices_data) if available_languages else []
|
282 |
+
voice_model_input_file = gr.Dropdown(
|
283 |
+
choices=initial_voices,
|
284 |
+
label="Modelo de Voz",
|
285 |
+
value=initial_voices[0] if initial_voices else None
|
286 |
+
)
|
287 |
+
|
288 |
+
language_input_file.change(
|
289 |
+
fn=update_voice_options,
|
290 |
+
inputs=[language_input_file],
|
291 |
+
outputs=[voice_model_input_file]
|
292 |
+
)
|
293 |
+
gr.Markdown("O programa vai ler linha por linha e entregar em um único áudio")
|
294 |
+
# File input
|
295 |
+
file_input = gr.File(
|
296 |
+
label="Arquivo de Texto",
|
297 |
+
file_types=[".txt"],
|
298 |
+
type="filepath"
|
299 |
+
)
|
300 |
+
|
301 |
+
with gr.Row():
|
302 |
+
with gr.Column():
|
303 |
+
speed_input_file = gr.Slider(
|
304 |
+
minimum=-200,
|
305 |
+
maximum=200,
|
306 |
+
label="Velocidade (%)",
|
307 |
+
value=0,
|
308 |
+
interactive=True
|
309 |
+
)
|
310 |
+
with gr.Column():
|
311 |
+
pitch_input_file = gr.Slider(
|
312 |
+
minimum=-100,
|
313 |
+
maximum=100,
|
314 |
+
label="Tom (Hz)",
|
315 |
+
value=0,
|
316 |
+
interactive=True
|
317 |
+
)
|
318 |
+
with gr.Column():
|
319 |
+
volume_input_file = gr.Slider(
|
320 |
+
minimum=-99,
|
321 |
+
maximum=100,
|
322 |
+
label="Volume (%)",
|
323 |
+
value=0,
|
324 |
+
interactive=True
|
325 |
+
)
|
326 |
+
|
327 |
+
checkbox_cortar_silencio_file = gr.Checkbox(label="Cortar Silencio", interactive=True)
|
328 |
+
audio_output_file = gr.Audio(label="Resultado", type="filepath", interactive=False)
|
329 |
+
|
330 |
+
edgetts_button_file = gr.Button(value="Falar")
|
331 |
+
edgetts_button_file.click(
|
332 |
+
controlador_generate_audio_from_file,
|
333 |
+
inputs=[
|
334 |
+
file_input,
|
335 |
+
voice_model_input_file,
|
336 |
+
speed_input_file,
|
337 |
+
pitch_input_file,
|
338 |
+
volume_input_file,
|
339 |
+
checkbox_cortar_silencio_file
|
340 |
+
],
|
341 |
+
outputs=[audio_output_file]
|
342 |
+
)
|
343 |
+
|
344 |
+
clear_button_file = gr.ClearButton(file_input, value='Limpar')
|
345 |
+
|
346 |
+
gr.Markdown("Agradecimentos a rany2 pelo Edge-TTS")
|
347 |
+
|
348 |
+
gr.Markdown("""
|
349 |
+
Desenvolvido por Rafael Godoy <br>
|
350 |
+
Apoie o projeto pelo https://nubank.com.br/pagar/1ls6a4/0QpSSbWBSq, qualquer valor é bem vindo.
|
351 |
+
""")
|
352 |
+
iface.launch()
|
get_voices.py
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import subprocess
|
2 |
+
import json
|
3 |
+
import re
|
4 |
+
from collections import defaultdict
|
5 |
+
|
6 |
+
# Dicionário para mapear códigos de idioma para nomes completos
|
7 |
+
language_mapping = {
|
8 |
+
"af": "Afrikaans",
|
9 |
+
"am": "Amharic",
|
10 |
+
"ar": "Arabic",
|
11 |
+
"az": "Azerbaijani",
|
12 |
+
"bg": "Bulgarian",
|
13 |
+
"bn": "Bengali",
|
14 |
+
"bs": "Bosnian",
|
15 |
+
"ca": "Catalan",
|
16 |
+
"cs": "Czech",
|
17 |
+
"cy": "Welsh",
|
18 |
+
"da": "Danish",
|
19 |
+
"de": "Deutsch",
|
20 |
+
"al": "Albanian",
|
21 |
+
"el": "Greek",
|
22 |
+
"in": "Indonesian",
|
23 |
+
"en": "English",
|
24 |
+
"es": "Spanish",
|
25 |
+
"et": "Estonian",
|
26 |
+
"fa": "Persian",
|
27 |
+
"fi": "Finnish",
|
28 |
+
"fil": "Filipino",
|
29 |
+
"fr": "French",
|
30 |
+
"ga": "Irish",
|
31 |
+
"gl": "Galician",
|
32 |
+
"gu": "Gujarati",
|
33 |
+
"he": "Hebrew",
|
34 |
+
"hi": "Hindi",
|
35 |
+
"hr": "Croatian",
|
36 |
+
"hu": "Hungarian",
|
37 |
+
"id": "Indonesian",
|
38 |
+
"is": "Icelandic",
|
39 |
+
"it": "Italian",
|
40 |
+
"ja": "Japanese",
|
41 |
+
"jv": "Javanese",
|
42 |
+
"ka": "Georgian",
|
43 |
+
"kk": "Kazakh",
|
44 |
+
"km": "Khmer",
|
45 |
+
"kn": "Kannada",
|
46 |
+
"ko": "Korean",
|
47 |
+
"lo": "Lao",
|
48 |
+
"lt": "Lithuanian",
|
49 |
+
"lv": "Latvian",
|
50 |
+
"mk": "Macedonian",
|
51 |
+
"ml": "Malayalam",
|
52 |
+
"mn": "Mongolian",
|
53 |
+
"mr": "Marathi",
|
54 |
+
"ms": "Malay",
|
55 |
+
"mt": "Maltese",
|
56 |
+
"my": "Burmese",
|
57 |
+
"nb": "Norwegian Bokmål",
|
58 |
+
"ne": "Nepali",
|
59 |
+
"nl": "Dutch",
|
60 |
+
"pl": "Polish",
|
61 |
+
"ps": "Pashto",
|
62 |
+
"pt": "Portuguese",
|
63 |
+
"ro": "Romanian",
|
64 |
+
"ru": "Russian",
|
65 |
+
"si": "Sinhala",
|
66 |
+
"sk": "Slovak",
|
67 |
+
"sl": "Slovenian",
|
68 |
+
"so": "Somali",
|
69 |
+
"sq": "Albanian",
|
70 |
+
"sr": "Serbian",
|
71 |
+
"su": "Sundanese",
|
72 |
+
"sv": "Swedish",
|
73 |
+
"sw": "Swahili",
|
74 |
+
"ta": "Tamil",
|
75 |
+
"te": "Telugu",
|
76 |
+
"th": "Thai",
|
77 |
+
"tr": "Turkish",
|
78 |
+
"uk": "Ukrainian",
|
79 |
+
"ur": "Urdu",
|
80 |
+
"uz": "Uzbek",
|
81 |
+
"vi": "Vietnamese",
|
82 |
+
"zh": "Chinese",
|
83 |
+
"zu": "Zulu"
|
84 |
+
}
|
85 |
+
|
86 |
+
def get_voices():
|
87 |
+
# Executa o comando edge-tts --list-voices
|
88 |
+
result = subprocess.run(['edge-tts', '--list-voices'], capture_output=True, text=True)
|
89 |
+
|
90 |
+
if result.returncode != 0:
|
91 |
+
print("Erro ao executar o comando edge-tts.")
|
92 |
+
return
|
93 |
+
|
94 |
+
# Processa a saída
|
95 |
+
voices = result.stdout.strip().split("\n\n")
|
96 |
+
voices_data = defaultdict(list)
|
97 |
+
|
98 |
+
for voice in voices:
|
99 |
+
# Usa regex para capturar o nome e o gênero
|
100 |
+
match = re.findall(r'Name:\s*(.*?)\s*Gender:\s*(\w+)', voice)
|
101 |
+
if match:
|
102 |
+
name, gender = match[0]
|
103 |
+
language_code = name.split('-')[0] # Pega o código do idioma
|
104 |
+
language_name = language_mapping.get(language_code, language_code) # Obtém o nome completo do idioma
|
105 |
+
voices_data[language_name].append({
|
106 |
+
'name': name,
|
107 |
+
'gender': gender
|
108 |
+
})
|
109 |
+
|
110 |
+
# Salva em um arquivo JSON
|
111 |
+
with open('voices.json', 'w', encoding='utf-8') as json_file:
|
112 |
+
json.dump(voices_data, json_file, ensure_ascii=False, indent=4)
|
113 |
+
|
114 |
+
if __name__ == "__main__":
|
115 |
+
get_voices()
|
header.py
CHANGED
@@ -1,26 +1,26 @@
|
|
1 |
-
badges = """
|
2 |
-
<div style="display: flex">
|
3 |
-
<span style="margin-right: 5px">
|
4 |
-
|
5 |
-
[ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ](https://github.com/rafaelGodoyEbert)
|
6 |
-
|
7 |
-
</span>
|
8 |
-
<span style="margin-right: 5px">
|
9 |
-
|
10 |
-
[ ![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white) ](https://twitter.com/GodoyEbert)
|
11 |
-
|
12 |
-
</span>
|
13 |
-
<span>
|
14 |
-
|
15 |
-
[ ![](https://dcbadge.vercel.app/api/server/aihubbrasil) ](https://discord.gg/aihubbrasil)
|
16 |
-
|
17 |
-
</span>
|
18 |
-
</div>
|
19 |
-
"""
|
20 |
-
|
21 |
-
description = """
|
22 |
-
#
|
23 |
-
|
24 |
-
Tem em diversos idiomas, só aproveitar<br>
|
25 |
-
Increva-se no canal do <a href='https://www.youtube.com/@aihubbrasil' target='_blank'>Youtube do AI HUB Brasil</a> e no meu pessoal <a href='https://www.youtube.com/@godoyy' target='_blank'>Godoyy</a>
|
26 |
"""
|
|
|
1 |
+
badges = """
|
2 |
+
<div style="display: flex">
|
3 |
+
<span style="margin-right: 5px">
|
4 |
+
|
5 |
+
[ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ](https://github.com/rafaelGodoyEbert)
|
6 |
+
|
7 |
+
</span>
|
8 |
+
<span style="margin-right: 5px">
|
9 |
+
|
10 |
+
[ ![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white) ](https://twitter.com/GodoyEbert)
|
11 |
+
|
12 |
+
</span>
|
13 |
+
<span>
|
14 |
+
|
15 |
+
[ ![](https://dcbadge.vercel.app/api/server/aihubbrasil) ](https://discord.gg/aihubbrasil)
|
16 |
+
|
17 |
+
</span>
|
18 |
+
</div>
|
19 |
+
"""
|
20 |
+
|
21 |
+
description = """
|
22 |
+
# QuickTTS
|
23 |
+
QuickTTS, para todos aqueles que sempre me pediam alguma forma de fazer algum TTS.<br>
|
24 |
+
Tem em diversos idiomas, só aproveitar<br>
|
25 |
+
Increva-se no canal do <a href='https://www.youtube.com/@aihubbrasil' target='_blank'>Youtube do AI HUB Brasil</a> e no meu pessoal <a href='https://www.youtube.com/@godoyy' target='_blank'>Godoyy</a>
|
26 |
"""
|
output/new_audio.mp3
ADDED
Binary file (12.2 kB). View file
|
|
output/new_audio.wav
ADDED
Binary file (98 kB). View file
|
|
requirements.txt
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
edge-tts
|
2 |
-
elevenlabs==0.2.15
|
|
|
1 |
+
edge-tts
|
|
voices.json
ADDED
@@ -0,0 +1,1422 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"Afrikaans": [
|
3 |
+
{
|
4 |
+
"name": "af-ZA-AdriNeural",
|
5 |
+
"gender": "Female"
|
6 |
+
},
|
7 |
+
{
|
8 |
+
"name": "af-ZA-WillemNeural",
|
9 |
+
"gender": "Male"
|
10 |
+
}
|
11 |
+
],
|
12 |
+
"Amharic": [
|
13 |
+
{
|
14 |
+
"name": "am-ET-AmehaNeural",
|
15 |
+
"gender": "Male"
|
16 |
+
},
|
17 |
+
{
|
18 |
+
"name": "am-ET-MekdesNeural",
|
19 |
+
"gender": "Female"
|
20 |
+
}
|
21 |
+
],
|
22 |
+
"Arabic": [
|
23 |
+
{
|
24 |
+
"name": "ar-AE-FatimaNeural",
|
25 |
+
"gender": "Female"
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"name": "ar-AE-HamdanNeural",
|
29 |
+
"gender": "Male"
|
30 |
+
},
|
31 |
+
{
|
32 |
+
"name": "ar-BH-AliNeural",
|
33 |
+
"gender": "Male"
|
34 |
+
},
|
35 |
+
{
|
36 |
+
"name": "ar-BH-LailaNeural",
|
37 |
+
"gender": "Female"
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"name": "ar-DZ-AminaNeural",
|
41 |
+
"gender": "Female"
|
42 |
+
},
|
43 |
+
{
|
44 |
+
"name": "ar-DZ-IsmaelNeural",
|
45 |
+
"gender": "Male"
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"name": "ar-EG-SalmaNeural",
|
49 |
+
"gender": "Female"
|
50 |
+
},
|
51 |
+
{
|
52 |
+
"name": "ar-EG-ShakirNeural",
|
53 |
+
"gender": "Male"
|
54 |
+
},
|
55 |
+
{
|
56 |
+
"name": "ar-IQ-BasselNeural",
|
57 |
+
"gender": "Male"
|
58 |
+
},
|
59 |
+
{
|
60 |
+
"name": "ar-IQ-RanaNeural",
|
61 |
+
"gender": "Female"
|
62 |
+
},
|
63 |
+
{
|
64 |
+
"name": "ar-JO-SanaNeural",
|
65 |
+
"gender": "Female"
|
66 |
+
},
|
67 |
+
{
|
68 |
+
"name": "ar-JO-TaimNeural",
|
69 |
+
"gender": "Male"
|
70 |
+
},
|
71 |
+
{
|
72 |
+
"name": "ar-KW-FahedNeural",
|
73 |
+
"gender": "Male"
|
74 |
+
},
|
75 |
+
{
|
76 |
+
"name": "ar-KW-NouraNeural",
|
77 |
+
"gender": "Female"
|
78 |
+
},
|
79 |
+
{
|
80 |
+
"name": "ar-LB-LaylaNeural",
|
81 |
+
"gender": "Female"
|
82 |
+
},
|
83 |
+
{
|
84 |
+
"name": "ar-LB-RamiNeural",
|
85 |
+
"gender": "Male"
|
86 |
+
},
|
87 |
+
{
|
88 |
+
"name": "ar-LY-ImanNeural",
|
89 |
+
"gender": "Female"
|
90 |
+
},
|
91 |
+
{
|
92 |
+
"name": "ar-LY-OmarNeural",
|
93 |
+
"gender": "Male"
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"name": "ar-MA-JamalNeural",
|
97 |
+
"gender": "Male"
|
98 |
+
},
|
99 |
+
{
|
100 |
+
"name": "ar-MA-MounaNeural",
|
101 |
+
"gender": "Female"
|
102 |
+
},
|
103 |
+
{
|
104 |
+
"name": "ar-OM-AbdullahNeural",
|
105 |
+
"gender": "Male"
|
106 |
+
},
|
107 |
+
{
|
108 |
+
"name": "ar-OM-AyshaNeural",
|
109 |
+
"gender": "Female"
|
110 |
+
},
|
111 |
+
{
|
112 |
+
"name": "ar-QA-AmalNeural",
|
113 |
+
"gender": "Female"
|
114 |
+
},
|
115 |
+
{
|
116 |
+
"name": "ar-QA-MoazNeural",
|
117 |
+
"gender": "Male"
|
118 |
+
},
|
119 |
+
{
|
120 |
+
"name": "ar-SA-HamedNeural",
|
121 |
+
"gender": "Male"
|
122 |
+
},
|
123 |
+
{
|
124 |
+
"name": "ar-SA-ZariyahNeural",
|
125 |
+
"gender": "Female"
|
126 |
+
},
|
127 |
+
{
|
128 |
+
"name": "ar-SY-AmanyNeural",
|
129 |
+
"gender": "Female"
|
130 |
+
},
|
131 |
+
{
|
132 |
+
"name": "ar-SY-LaithNeural",
|
133 |
+
"gender": "Male"
|
134 |
+
},
|
135 |
+
{
|
136 |
+
"name": "ar-TN-HediNeural",
|
137 |
+
"gender": "Male"
|
138 |
+
},
|
139 |
+
{
|
140 |
+
"name": "ar-TN-ReemNeural",
|
141 |
+
"gender": "Female"
|
142 |
+
},
|
143 |
+
{
|
144 |
+
"name": "ar-YE-MaryamNeural",
|
145 |
+
"gender": "Female"
|
146 |
+
},
|
147 |
+
{
|
148 |
+
"name": "ar-YE-SalehNeural",
|
149 |
+
"gender": "Male"
|
150 |
+
}
|
151 |
+
],
|
152 |
+
"Azerbaijani": [
|
153 |
+
{
|
154 |
+
"name": "az-AZ-BabekNeural",
|
155 |
+
"gender": "Male"
|
156 |
+
},
|
157 |
+
{
|
158 |
+
"name": "az-AZ-BanuNeural",
|
159 |
+
"gender": "Female"
|
160 |
+
}
|
161 |
+
],
|
162 |
+
"Bulgarian": [
|
163 |
+
{
|
164 |
+
"name": "bg-BG-BorislavNeural",
|
165 |
+
"gender": "Male"
|
166 |
+
},
|
167 |
+
{
|
168 |
+
"name": "bg-BG-KalinaNeural",
|
169 |
+
"gender": "Female"
|
170 |
+
}
|
171 |
+
],
|
172 |
+
"Bengali": [
|
173 |
+
{
|
174 |
+
"name": "bn-BD-NabanitaNeural",
|
175 |
+
"gender": "Female"
|
176 |
+
},
|
177 |
+
{
|
178 |
+
"name": "bn-BD-PradeepNeural",
|
179 |
+
"gender": "Male"
|
180 |
+
},
|
181 |
+
{
|
182 |
+
"name": "bn-IN-BashkarNeural",
|
183 |
+
"gender": "Male"
|
184 |
+
},
|
185 |
+
{
|
186 |
+
"name": "bn-IN-TanishaaNeural",
|
187 |
+
"gender": "Female"
|
188 |
+
}
|
189 |
+
],
|
190 |
+
"Bosnian": [
|
191 |
+
{
|
192 |
+
"name": "bs-BA-GoranNeural",
|
193 |
+
"gender": "Male"
|
194 |
+
},
|
195 |
+
{
|
196 |
+
"name": "bs-BA-VesnaNeural",
|
197 |
+
"gender": "Female"
|
198 |
+
}
|
199 |
+
],
|
200 |
+
"Catalan": [
|
201 |
+
{
|
202 |
+
"name": "ca-ES-EnricNeural",
|
203 |
+
"gender": "Male"
|
204 |
+
},
|
205 |
+
{
|
206 |
+
"name": "ca-ES-JoanaNeural",
|
207 |
+
"gender": "Female"
|
208 |
+
}
|
209 |
+
],
|
210 |
+
"Czech": [
|
211 |
+
{
|
212 |
+
"name": "cs-CZ-AntoninNeural",
|
213 |
+
"gender": "Male"
|
214 |
+
},
|
215 |
+
{
|
216 |
+
"name": "cs-CZ-VlastaNeural",
|
217 |
+
"gender": "Female"
|
218 |
+
}
|
219 |
+
],
|
220 |
+
"Welsh": [
|
221 |
+
{
|
222 |
+
"name": "cy-GB-AledNeural",
|
223 |
+
"gender": "Male"
|
224 |
+
},
|
225 |
+
{
|
226 |
+
"name": "cy-GB-NiaNeural",
|
227 |
+
"gender": "Female"
|
228 |
+
}
|
229 |
+
],
|
230 |
+
"Danish": [
|
231 |
+
{
|
232 |
+
"name": "da-DK-ChristelNeural",
|
233 |
+
"gender": "Female"
|
234 |
+
},
|
235 |
+
{
|
236 |
+
"name": "da-DK-JeppeNeural",
|
237 |
+
"gender": "Male"
|
238 |
+
}
|
239 |
+
],
|
240 |
+
"Deutsch": [
|
241 |
+
{
|
242 |
+
"name": "de-AT-IngridNeural",
|
243 |
+
"gender": "Female"
|
244 |
+
},
|
245 |
+
{
|
246 |
+
"name": "de-AT-JonasNeural",
|
247 |
+
"gender": "Male"
|
248 |
+
},
|
249 |
+
{
|
250 |
+
"name": "de-CH-JanNeural",
|
251 |
+
"gender": "Male"
|
252 |
+
},
|
253 |
+
{
|
254 |
+
"name": "de-CH-LeniNeural",
|
255 |
+
"gender": "Female"
|
256 |
+
},
|
257 |
+
{
|
258 |
+
"name": "de-DE-AmalaNeural",
|
259 |
+
"gender": "Female"
|
260 |
+
},
|
261 |
+
{
|
262 |
+
"name": "de-DE-ConradNeural",
|
263 |
+
"gender": "Male"
|
264 |
+
},
|
265 |
+
{
|
266 |
+
"name": "de-DE-FlorianMultilingualNeural",
|
267 |
+
"gender": "Male"
|
268 |
+
},
|
269 |
+
{
|
270 |
+
"name": "de-DE-KatjaNeural",
|
271 |
+
"gender": "Female"
|
272 |
+
},
|
273 |
+
{
|
274 |
+
"name": "de-DE-KillianNeural",
|
275 |
+
"gender": "Male"
|
276 |
+
},
|
277 |
+
{
|
278 |
+
"name": "de-DE-SeraphinaMultilingualNeural",
|
279 |
+
"gender": "Female"
|
280 |
+
}
|
281 |
+
],
|
282 |
+
"Greek": [
|
283 |
+
{
|
284 |
+
"name": "el-GR-AthinaNeural",
|
285 |
+
"gender": "Female"
|
286 |
+
},
|
287 |
+
{
|
288 |
+
"name": "el-GR-NestorasNeural",
|
289 |
+
"gender": "Male"
|
290 |
+
}
|
291 |
+
],
|
292 |
+
"English": [
|
293 |
+
{
|
294 |
+
"name": "en-AU-NatashaNeural",
|
295 |
+
"gender": "Female"
|
296 |
+
},
|
297 |
+
{
|
298 |
+
"name": "en-AU-WilliamNeural",
|
299 |
+
"gender": "Male"
|
300 |
+
},
|
301 |
+
{
|
302 |
+
"name": "en-CA-ClaraNeural",
|
303 |
+
"gender": "Female"
|
304 |
+
},
|
305 |
+
{
|
306 |
+
"name": "en-CA-LiamNeural",
|
307 |
+
"gender": "Male"
|
308 |
+
},
|
309 |
+
{
|
310 |
+
"name": "en-GB-LibbyNeural",
|
311 |
+
"gender": "Female"
|
312 |
+
},
|
313 |
+
{
|
314 |
+
"name": "en-GB-MaisieNeural",
|
315 |
+
"gender": "Female"
|
316 |
+
},
|
317 |
+
{
|
318 |
+
"name": "en-GB-RyanNeural",
|
319 |
+
"gender": "Male"
|
320 |
+
},
|
321 |
+
{
|
322 |
+
"name": "en-GB-SoniaNeural",
|
323 |
+
"gender": "Female"
|
324 |
+
},
|
325 |
+
{
|
326 |
+
"name": "en-GB-ThomasNeural",
|
327 |
+
"gender": "Male"
|
328 |
+
},
|
329 |
+
{
|
330 |
+
"name": "en-HK-SamNeural",
|
331 |
+
"gender": "Male"
|
332 |
+
},
|
333 |
+
{
|
334 |
+
"name": "en-HK-YanNeural",
|
335 |
+
"gender": "Female"
|
336 |
+
},
|
337 |
+
{
|
338 |
+
"name": "en-IE-ConnorNeural",
|
339 |
+
"gender": "Male"
|
340 |
+
},
|
341 |
+
{
|
342 |
+
"name": "en-IE-EmilyNeural",
|
343 |
+
"gender": "Female"
|
344 |
+
},
|
345 |
+
{
|
346 |
+
"name": "en-IN-NeerjaExpressiveNeural",
|
347 |
+
"gender": "Female"
|
348 |
+
},
|
349 |
+
{
|
350 |
+
"name": "en-IN-NeerjaNeural",
|
351 |
+
"gender": "Female"
|
352 |
+
},
|
353 |
+
{
|
354 |
+
"name": "en-IN-PrabhatNeural",
|
355 |
+
"gender": "Male"
|
356 |
+
},
|
357 |
+
{
|
358 |
+
"name": "en-KE-AsiliaNeural",
|
359 |
+
"gender": "Female"
|
360 |
+
},
|
361 |
+
{
|
362 |
+
"name": "en-KE-ChilembaNeural",
|
363 |
+
"gender": "Male"
|
364 |
+
},
|
365 |
+
{
|
366 |
+
"name": "en-NG-AbeoNeural",
|
367 |
+
"gender": "Male"
|
368 |
+
},
|
369 |
+
{
|
370 |
+
"name": "en-NG-EzinneNeural",
|
371 |
+
"gender": "Female"
|
372 |
+
},
|
373 |
+
{
|
374 |
+
"name": "en-NZ-MitchellNeural",
|
375 |
+
"gender": "Male"
|
376 |
+
},
|
377 |
+
{
|
378 |
+
"name": "en-NZ-MollyNeural",
|
379 |
+
"gender": "Female"
|
380 |
+
},
|
381 |
+
{
|
382 |
+
"name": "en-PH-JamesNeural",
|
383 |
+
"gender": "Male"
|
384 |
+
},
|
385 |
+
{
|
386 |
+
"name": "en-PH-RosaNeural",
|
387 |
+
"gender": "Female"
|
388 |
+
},
|
389 |
+
{
|
390 |
+
"name": "en-SG-LunaNeural",
|
391 |
+
"gender": "Female"
|
392 |
+
},
|
393 |
+
{
|
394 |
+
"name": "en-SG-WayneNeural",
|
395 |
+
"gender": "Male"
|
396 |
+
},
|
397 |
+
{
|
398 |
+
"name": "en-TZ-ElimuNeural",
|
399 |
+
"gender": "Male"
|
400 |
+
},
|
401 |
+
{
|
402 |
+
"name": "en-TZ-ImaniNeural",
|
403 |
+
"gender": "Female"
|
404 |
+
},
|
405 |
+
{
|
406 |
+
"name": "en-US-AnaNeural",
|
407 |
+
"gender": "Female"
|
408 |
+
},
|
409 |
+
{
|
410 |
+
"name": "en-US-AndrewMultilingualNeural",
|
411 |
+
"gender": "Male"
|
412 |
+
},
|
413 |
+
{
|
414 |
+
"name": "en-US-AndrewNeural",
|
415 |
+
"gender": "Male"
|
416 |
+
},
|
417 |
+
{
|
418 |
+
"name": "en-US-AriaNeural",
|
419 |
+
"gender": "Female"
|
420 |
+
},
|
421 |
+
{
|
422 |
+
"name": "en-US-AvaMultilingualNeural",
|
423 |
+
"gender": "Female"
|
424 |
+
},
|
425 |
+
{
|
426 |
+
"name": "en-US-AvaNeural",
|
427 |
+
"gender": "Female"
|
428 |
+
},
|
429 |
+
{
|
430 |
+
"name": "en-US-BrianMultilingualNeural",
|
431 |
+
"gender": "Male"
|
432 |
+
},
|
433 |
+
{
|
434 |
+
"name": "en-US-BrianNeural",
|
435 |
+
"gender": "Male"
|
436 |
+
},
|
437 |
+
{
|
438 |
+
"name": "en-US-ChristopherNeural",
|
439 |
+
"gender": "Male"
|
440 |
+
},
|
441 |
+
{
|
442 |
+
"name": "en-US-EmmaMultilingualNeural",
|
443 |
+
"gender": "Female"
|
444 |
+
},
|
445 |
+
{
|
446 |
+
"name": "en-US-EmmaNeural",
|
447 |
+
"gender": "Female"
|
448 |
+
},
|
449 |
+
{
|
450 |
+
"name": "en-US-EricNeural",
|
451 |
+
"gender": "Male"
|
452 |
+
},
|
453 |
+
{
|
454 |
+
"name": "en-US-GuyNeural",
|
455 |
+
"gender": "Male"
|
456 |
+
},
|
457 |
+
{
|
458 |
+
"name": "en-US-JennyNeural",
|
459 |
+
"gender": "Female"
|
460 |
+
},
|
461 |
+
{
|
462 |
+
"name": "en-US-MichelleNeural",
|
463 |
+
"gender": "Female"
|
464 |
+
},
|
465 |
+
{
|
466 |
+
"name": "en-US-RogerNeural",
|
467 |
+
"gender": "Male"
|
468 |
+
},
|
469 |
+
{
|
470 |
+
"name": "en-US-SteffanNeural",
|
471 |
+
"gender": "Male"
|
472 |
+
},
|
473 |
+
{
|
474 |
+
"name": "en-ZA-LeahNeural",
|
475 |
+
"gender": "Female"
|
476 |
+
},
|
477 |
+
{
|
478 |
+
"name": "en-ZA-LukeNeural",
|
479 |
+
"gender": "Male"
|
480 |
+
}
|
481 |
+
],
|
482 |
+
"Spanish": [
|
483 |
+
{
|
484 |
+
"name": "es-AR-ElenaNeural",
|
485 |
+
"gender": "Female"
|
486 |
+
},
|
487 |
+
{
|
488 |
+
"name": "es-AR-TomasNeural",
|
489 |
+
"gender": "Male"
|
490 |
+
},
|
491 |
+
{
|
492 |
+
"name": "es-BO-MarceloNeural",
|
493 |
+
"gender": "Male"
|
494 |
+
},
|
495 |
+
{
|
496 |
+
"name": "es-BO-SofiaNeural",
|
497 |
+
"gender": "Female"
|
498 |
+
},
|
499 |
+
{
|
500 |
+
"name": "es-CL-CatalinaNeural",
|
501 |
+
"gender": "Female"
|
502 |
+
},
|
503 |
+
{
|
504 |
+
"name": "es-CL-LorenzoNeural",
|
505 |
+
"gender": "Male"
|
506 |
+
},
|
507 |
+
{
|
508 |
+
"name": "es-CO-GonzaloNeural",
|
509 |
+
"gender": "Male"
|
510 |
+
},
|
511 |
+
{
|
512 |
+
"name": "es-CO-SalomeNeural",
|
513 |
+
"gender": "Female"
|
514 |
+
},
|
515 |
+
{
|
516 |
+
"name": "es-CR-JuanNeural",
|
517 |
+
"gender": "Male"
|
518 |
+
},
|
519 |
+
{
|
520 |
+
"name": "es-CR-MariaNeural",
|
521 |
+
"gender": "Female"
|
522 |
+
},
|
523 |
+
{
|
524 |
+
"name": "es-CU-BelkysNeural",
|
525 |
+
"gender": "Female"
|
526 |
+
},
|
527 |
+
{
|
528 |
+
"name": "es-CU-ManuelNeural",
|
529 |
+
"gender": "Male"
|
530 |
+
},
|
531 |
+
{
|
532 |
+
"name": "es-DO-EmilioNeural",
|
533 |
+
"gender": "Male"
|
534 |
+
},
|
535 |
+
{
|
536 |
+
"name": "es-DO-RamonaNeural",
|
537 |
+
"gender": "Female"
|
538 |
+
},
|
539 |
+
{
|
540 |
+
"name": "es-EC-AndreaNeural",
|
541 |
+
"gender": "Female"
|
542 |
+
},
|
543 |
+
{
|
544 |
+
"name": "es-EC-LuisNeural",
|
545 |
+
"gender": "Male"
|
546 |
+
},
|
547 |
+
{
|
548 |
+
"name": "es-ES-AlvaroNeural",
|
549 |
+
"gender": "Male"
|
550 |
+
},
|
551 |
+
{
|
552 |
+
"name": "es-ES-ElviraNeural",
|
553 |
+
"gender": "Female"
|
554 |
+
},
|
555 |
+
{
|
556 |
+
"name": "es-ES-XimenaNeural",
|
557 |
+
"gender": "Female"
|
558 |
+
},
|
559 |
+
{
|
560 |
+
"name": "es-GQ-JavierNeural",
|
561 |
+
"gender": "Male"
|
562 |
+
},
|
563 |
+
{
|
564 |
+
"name": "es-GQ-TeresaNeural",
|
565 |
+
"gender": "Female"
|
566 |
+
},
|
567 |
+
{
|
568 |
+
"name": "es-GT-AndresNeural",
|
569 |
+
"gender": "Male"
|
570 |
+
},
|
571 |
+
{
|
572 |
+
"name": "es-GT-MartaNeural",
|
573 |
+
"gender": "Female"
|
574 |
+
},
|
575 |
+
{
|
576 |
+
"name": "es-HN-CarlosNeural",
|
577 |
+
"gender": "Male"
|
578 |
+
},
|
579 |
+
{
|
580 |
+
"name": "es-HN-KarlaNeural",
|
581 |
+
"gender": "Female"
|
582 |
+
},
|
583 |
+
{
|
584 |
+
"name": "es-MX-DaliaNeural",
|
585 |
+
"gender": "Female"
|
586 |
+
},
|
587 |
+
{
|
588 |
+
"name": "es-MX-JorgeNeural",
|
589 |
+
"gender": "Male"
|
590 |
+
},
|
591 |
+
{
|
592 |
+
"name": "es-NI-FedericoNeural",
|
593 |
+
"gender": "Male"
|
594 |
+
},
|
595 |
+
{
|
596 |
+
"name": "es-NI-YolandaNeural",
|
597 |
+
"gender": "Female"
|
598 |
+
},
|
599 |
+
{
|
600 |
+
"name": "es-PA-MargaritaNeural",
|
601 |
+
"gender": "Female"
|
602 |
+
},
|
603 |
+
{
|
604 |
+
"name": "es-PA-RobertoNeural",
|
605 |
+
"gender": "Male"
|
606 |
+
},
|
607 |
+
{
|
608 |
+
"name": "es-PE-AlexNeural",
|
609 |
+
"gender": "Male"
|
610 |
+
},
|
611 |
+
{
|
612 |
+
"name": "es-PE-CamilaNeural",
|
613 |
+
"gender": "Female"
|
614 |
+
},
|
615 |
+
{
|
616 |
+
"name": "es-PR-KarinaNeural",
|
617 |
+
"gender": "Female"
|
618 |
+
},
|
619 |
+
{
|
620 |
+
"name": "es-PR-VictorNeural",
|
621 |
+
"gender": "Male"
|
622 |
+
},
|
623 |
+
{
|
624 |
+
"name": "es-PY-MarioNeural",
|
625 |
+
"gender": "Male"
|
626 |
+
},
|
627 |
+
{
|
628 |
+
"name": "es-PY-TaniaNeural",
|
629 |
+
"gender": "Female"
|
630 |
+
},
|
631 |
+
{
|
632 |
+
"name": "es-SV-LorenaNeural",
|
633 |
+
"gender": "Female"
|
634 |
+
},
|
635 |
+
{
|
636 |
+
"name": "es-SV-RodrigoNeural",
|
637 |
+
"gender": "Male"
|
638 |
+
},
|
639 |
+
{
|
640 |
+
"name": "es-US-AlonsoNeural",
|
641 |
+
"gender": "Male"
|
642 |
+
},
|
643 |
+
{
|
644 |
+
"name": "es-US-PalomaNeural",
|
645 |
+
"gender": "Female"
|
646 |
+
},
|
647 |
+
{
|
648 |
+
"name": "es-UY-MateoNeural",
|
649 |
+
"gender": "Male"
|
650 |
+
},
|
651 |
+
{
|
652 |
+
"name": "es-UY-ValentinaNeural",
|
653 |
+
"gender": "Female"
|
654 |
+
},
|
655 |
+
{
|
656 |
+
"name": "es-VE-PaolaNeural",
|
657 |
+
"gender": "Female"
|
658 |
+
},
|
659 |
+
{
|
660 |
+
"name": "es-VE-SebastianNeural",
|
661 |
+
"gender": "Male"
|
662 |
+
}
|
663 |
+
],
|
664 |
+
"Estonian": [
|
665 |
+
{
|
666 |
+
"name": "et-EE-AnuNeural",
|
667 |
+
"gender": "Female"
|
668 |
+
},
|
669 |
+
{
|
670 |
+
"name": "et-EE-KertNeural",
|
671 |
+
"gender": "Male"
|
672 |
+
}
|
673 |
+
],
|
674 |
+
"Persian": [
|
675 |
+
{
|
676 |
+
"name": "fa-IR-DilaraNeural",
|
677 |
+
"gender": "Female"
|
678 |
+
},
|
679 |
+
{
|
680 |
+
"name": "fa-IR-FaridNeural",
|
681 |
+
"gender": "Male"
|
682 |
+
}
|
683 |
+
],
|
684 |
+
"Finnish": [
|
685 |
+
{
|
686 |
+
"name": "fi-FI-HarriNeural",
|
687 |
+
"gender": "Male"
|
688 |
+
},
|
689 |
+
{
|
690 |
+
"name": "fi-FI-NooraNeural",
|
691 |
+
"gender": "Female"
|
692 |
+
}
|
693 |
+
],
|
694 |
+
"Filipino": [
|
695 |
+
{
|
696 |
+
"name": "fil-PH-AngeloNeural",
|
697 |
+
"gender": "Male"
|
698 |
+
},
|
699 |
+
{
|
700 |
+
"name": "fil-PH-BlessicaNeural",
|
701 |
+
"gender": "Female"
|
702 |
+
}
|
703 |
+
],
|
704 |
+
"French": [
|
705 |
+
{
|
706 |
+
"name": "fr-BE-CharlineNeural",
|
707 |
+
"gender": "Female"
|
708 |
+
},
|
709 |
+
{
|
710 |
+
"name": "fr-BE-GerardNeural",
|
711 |
+
"gender": "Male"
|
712 |
+
},
|
713 |
+
{
|
714 |
+
"name": "fr-CA-AntoineNeural",
|
715 |
+
"gender": "Male"
|
716 |
+
},
|
717 |
+
{
|
718 |
+
"name": "fr-CA-JeanNeural",
|
719 |
+
"gender": "Male"
|
720 |
+
},
|
721 |
+
{
|
722 |
+
"name": "fr-CA-SylvieNeural",
|
723 |
+
"gender": "Female"
|
724 |
+
},
|
725 |
+
{
|
726 |
+
"name": "fr-CA-ThierryNeural",
|
727 |
+
"gender": "Male"
|
728 |
+
},
|
729 |
+
{
|
730 |
+
"name": "fr-CH-ArianeNeural",
|
731 |
+
"gender": "Female"
|
732 |
+
},
|
733 |
+
{
|
734 |
+
"name": "fr-CH-FabriceNeural",
|
735 |
+
"gender": "Male"
|
736 |
+
},
|
737 |
+
{
|
738 |
+
"name": "fr-FR-DeniseNeural",
|
739 |
+
"gender": "Female"
|
740 |
+
},
|
741 |
+
{
|
742 |
+
"name": "fr-FR-EloiseNeural",
|
743 |
+
"gender": "Female"
|
744 |
+
},
|
745 |
+
{
|
746 |
+
"name": "fr-FR-HenriNeural",
|
747 |
+
"gender": "Male"
|
748 |
+
},
|
749 |
+
{
|
750 |
+
"name": "fr-FR-RemyMultilingualNeural",
|
751 |
+
"gender": "Male"
|
752 |
+
},
|
753 |
+
{
|
754 |
+
"name": "fr-FR-VivienneMultilingualNeural",
|
755 |
+
"gender": "Female"
|
756 |
+
}
|
757 |
+
],
|
758 |
+
"Irish": [
|
759 |
+
{
|
760 |
+
"name": "ga-IE-ColmNeural",
|
761 |
+
"gender": "Male"
|
762 |
+
},
|
763 |
+
{
|
764 |
+
"name": "ga-IE-OrlaNeural",
|
765 |
+
"gender": "Female"
|
766 |
+
}
|
767 |
+
],
|
768 |
+
"Galician": [
|
769 |
+
{
|
770 |
+
"name": "gl-ES-RoiNeural",
|
771 |
+
"gender": "Male"
|
772 |
+
},
|
773 |
+
{
|
774 |
+
"name": "gl-ES-SabelaNeural",
|
775 |
+
"gender": "Female"
|
776 |
+
}
|
777 |
+
],
|
778 |
+
"Gujarati": [
|
779 |
+
{
|
780 |
+
"name": "gu-IN-DhwaniNeural",
|
781 |
+
"gender": "Female"
|
782 |
+
},
|
783 |
+
{
|
784 |
+
"name": "gu-IN-NiranjanNeural",
|
785 |
+
"gender": "Male"
|
786 |
+
}
|
787 |
+
],
|
788 |
+
"Hebrew": [
|
789 |
+
{
|
790 |
+
"name": "he-IL-AvriNeural",
|
791 |
+
"gender": "Male"
|
792 |
+
},
|
793 |
+
{
|
794 |
+
"name": "he-IL-HilaNeural",
|
795 |
+
"gender": "Female"
|
796 |
+
}
|
797 |
+
],
|
798 |
+
"Hindi": [
|
799 |
+
{
|
800 |
+
"name": "hi-IN-MadhurNeural",
|
801 |
+
"gender": "Male"
|
802 |
+
},
|
803 |
+
{
|
804 |
+
"name": "hi-IN-SwaraNeural",
|
805 |
+
"gender": "Female"
|
806 |
+
}
|
807 |
+
],
|
808 |
+
"Croatian": [
|
809 |
+
{
|
810 |
+
"name": "hr-HR-GabrijelaNeural",
|
811 |
+
"gender": "Female"
|
812 |
+
},
|
813 |
+
{
|
814 |
+
"name": "hr-HR-SreckoNeural",
|
815 |
+
"gender": "Male"
|
816 |
+
}
|
817 |
+
],
|
818 |
+
"Hungarian": [
|
819 |
+
{
|
820 |
+
"name": "hu-HU-NoemiNeural",
|
821 |
+
"gender": "Female"
|
822 |
+
},
|
823 |
+
{
|
824 |
+
"name": "hu-HU-TamasNeural",
|
825 |
+
"gender": "Male"
|
826 |
+
}
|
827 |
+
],
|
828 |
+
"Indonesian": [
|
829 |
+
{
|
830 |
+
"name": "id-ID-ArdiNeural",
|
831 |
+
"gender": "Male"
|
832 |
+
},
|
833 |
+
{
|
834 |
+
"name": "id-ID-GadisNeural",
|
835 |
+
"gender": "Female"
|
836 |
+
}
|
837 |
+
],
|
838 |
+
"Icelandic": [
|
839 |
+
{
|
840 |
+
"name": "is-IS-GudrunNeural",
|
841 |
+
"gender": "Female"
|
842 |
+
},
|
843 |
+
{
|
844 |
+
"name": "is-IS-GunnarNeural",
|
845 |
+
"gender": "Male"
|
846 |
+
}
|
847 |
+
],
|
848 |
+
"Italian": [
|
849 |
+
{
|
850 |
+
"name": "it-IT-DiegoNeural",
|
851 |
+
"gender": "Male"
|
852 |
+
},
|
853 |
+
{
|
854 |
+
"name": "it-IT-ElsaNeural",
|
855 |
+
"gender": "Female"
|
856 |
+
},
|
857 |
+
{
|
858 |
+
"name": "it-IT-GiuseppeNeural",
|
859 |
+
"gender": "Male"
|
860 |
+
},
|
861 |
+
{
|
862 |
+
"name": "it-IT-IsabellaNeural",
|
863 |
+
"gender": "Female"
|
864 |
+
}
|
865 |
+
],
|
866 |
+
"Japanese": [
|
867 |
+
{
|
868 |
+
"name": "ja-JP-KeitaNeural",
|
869 |
+
"gender": "Male"
|
870 |
+
},
|
871 |
+
{
|
872 |
+
"name": "ja-JP-NanamiNeural",
|
873 |
+
"gender": "Female"
|
874 |
+
}
|
875 |
+
],
|
876 |
+
"Javanese": [
|
877 |
+
{
|
878 |
+
"name": "jv-ID-DimasNeural",
|
879 |
+
"gender": "Male"
|
880 |
+
},
|
881 |
+
{
|
882 |
+
"name": "jv-ID-SitiNeural",
|
883 |
+
"gender": "Female"
|
884 |
+
}
|
885 |
+
],
|
886 |
+
"Georgian": [
|
887 |
+
{
|
888 |
+
"name": "ka-GE-EkaNeural",
|
889 |
+
"gender": "Female"
|
890 |
+
},
|
891 |
+
{
|
892 |
+
"name": "ka-GE-GiorgiNeural",
|
893 |
+
"gender": "Male"
|
894 |
+
}
|
895 |
+
],
|
896 |
+
"Kazakh": [
|
897 |
+
{
|
898 |
+
"name": "kk-KZ-AigulNeural",
|
899 |
+
"gender": "Female"
|
900 |
+
},
|
901 |
+
{
|
902 |
+
"name": "kk-KZ-DauletNeural",
|
903 |
+
"gender": "Male"
|
904 |
+
}
|
905 |
+
],
|
906 |
+
"Khmer": [
|
907 |
+
{
|
908 |
+
"name": "km-KH-PisethNeural",
|
909 |
+
"gender": "Male"
|
910 |
+
},
|
911 |
+
{
|
912 |
+
"name": "km-KH-SreymomNeural",
|
913 |
+
"gender": "Female"
|
914 |
+
}
|
915 |
+
],
|
916 |
+
"Kannada": [
|
917 |
+
{
|
918 |
+
"name": "kn-IN-GaganNeural",
|
919 |
+
"gender": "Male"
|
920 |
+
},
|
921 |
+
{
|
922 |
+
"name": "kn-IN-SapnaNeural",
|
923 |
+
"gender": "Female"
|
924 |
+
}
|
925 |
+
],
|
926 |
+
"Korean": [
|
927 |
+
{
|
928 |
+
"name": "ko-KR-HyunsuNeural",
|
929 |
+
"gender": "Male"
|
930 |
+
},
|
931 |
+
{
|
932 |
+
"name": "ko-KR-InJoonNeural",
|
933 |
+
"gender": "Male"
|
934 |
+
},
|
935 |
+
{
|
936 |
+
"name": "ko-KR-SunHiNeural",
|
937 |
+
"gender": "Female"
|
938 |
+
}
|
939 |
+
],
|
940 |
+
"Lao": [
|
941 |
+
{
|
942 |
+
"name": "lo-LA-ChanthavongNeural",
|
943 |
+
"gender": "Male"
|
944 |
+
},
|
945 |
+
{
|
946 |
+
"name": "lo-LA-KeomanyNeural",
|
947 |
+
"gender": "Female"
|
948 |
+
}
|
949 |
+
],
|
950 |
+
"Lithuanian": [
|
951 |
+
{
|
952 |
+
"name": "lt-LT-LeonasNeural",
|
953 |
+
"gender": "Male"
|
954 |
+
},
|
955 |
+
{
|
956 |
+
"name": "lt-LT-OnaNeural",
|
957 |
+
"gender": "Female"
|
958 |
+
}
|
959 |
+
],
|
960 |
+
"Latvian": [
|
961 |
+
{
|
962 |
+
"name": "lv-LV-EveritaNeural",
|
963 |
+
"gender": "Female"
|
964 |
+
},
|
965 |
+
{
|
966 |
+
"name": "lv-LV-NilsNeural",
|
967 |
+
"gender": "Male"
|
968 |
+
}
|
969 |
+
],
|
970 |
+
"Macedonian": [
|
971 |
+
{
|
972 |
+
"name": "mk-MK-AleksandarNeural",
|
973 |
+
"gender": "Male"
|
974 |
+
},
|
975 |
+
{
|
976 |
+
"name": "mk-MK-MarijaNeural",
|
977 |
+
"gender": "Female"
|
978 |
+
}
|
979 |
+
],
|
980 |
+
"Malayalam": [
|
981 |
+
{
|
982 |
+
"name": "ml-IN-MidhunNeural",
|
983 |
+
"gender": "Male"
|
984 |
+
},
|
985 |
+
{
|
986 |
+
"name": "ml-IN-SobhanaNeural",
|
987 |
+
"gender": "Female"
|
988 |
+
}
|
989 |
+
],
|
990 |
+
"Mongolian": [
|
991 |
+
{
|
992 |
+
"name": "mn-MN-BataaNeural",
|
993 |
+
"gender": "Male"
|
994 |
+
},
|
995 |
+
{
|
996 |
+
"name": "mn-MN-YesuiNeural",
|
997 |
+
"gender": "Female"
|
998 |
+
}
|
999 |
+
],
|
1000 |
+
"Marathi": [
|
1001 |
+
{
|
1002 |
+
"name": "mr-IN-AarohiNeural",
|
1003 |
+
"gender": "Female"
|
1004 |
+
},
|
1005 |
+
{
|
1006 |
+
"name": "mr-IN-ManoharNeural",
|
1007 |
+
"gender": "Male"
|
1008 |
+
}
|
1009 |
+
],
|
1010 |
+
"Malay": [
|
1011 |
+
{
|
1012 |
+
"name": "ms-MY-OsmanNeural",
|
1013 |
+
"gender": "Male"
|
1014 |
+
},
|
1015 |
+
{
|
1016 |
+
"name": "ms-MY-YasminNeural",
|
1017 |
+
"gender": "Female"
|
1018 |
+
}
|
1019 |
+
],
|
1020 |
+
"Maltese": [
|
1021 |
+
{
|
1022 |
+
"name": "mt-MT-GraceNeural",
|
1023 |
+
"gender": "Female"
|
1024 |
+
},
|
1025 |
+
{
|
1026 |
+
"name": "mt-MT-JosephNeural",
|
1027 |
+
"gender": "Male"
|
1028 |
+
}
|
1029 |
+
],
|
1030 |
+
"Burmese": [
|
1031 |
+
{
|
1032 |
+
"name": "my-MM-NilarNeural",
|
1033 |
+
"gender": "Female"
|
1034 |
+
},
|
1035 |
+
{
|
1036 |
+
"name": "my-MM-ThihaNeural",
|
1037 |
+
"gender": "Male"
|
1038 |
+
}
|
1039 |
+
],
|
1040 |
+
"Norwegian Bokmål": [
|
1041 |
+
{
|
1042 |
+
"name": "nb-NO-FinnNeural",
|
1043 |
+
"gender": "Male"
|
1044 |
+
},
|
1045 |
+
{
|
1046 |
+
"name": "nb-NO-PernilleNeural",
|
1047 |
+
"gender": "Female"
|
1048 |
+
}
|
1049 |
+
],
|
1050 |
+
"Nepali": [
|
1051 |
+
{
|
1052 |
+
"name": "ne-NP-HemkalaNeural",
|
1053 |
+
"gender": "Female"
|
1054 |
+
},
|
1055 |
+
{
|
1056 |
+
"name": "ne-NP-SagarNeural",
|
1057 |
+
"gender": "Male"
|
1058 |
+
}
|
1059 |
+
],
|
1060 |
+
"Dutch": [
|
1061 |
+
{
|
1062 |
+
"name": "nl-BE-ArnaudNeural",
|
1063 |
+
"gender": "Male"
|
1064 |
+
},
|
1065 |
+
{
|
1066 |
+
"name": "nl-BE-DenaNeural",
|
1067 |
+
"gender": "Female"
|
1068 |
+
},
|
1069 |
+
{
|
1070 |
+
"name": "nl-NL-ColetteNeural",
|
1071 |
+
"gender": "Female"
|
1072 |
+
},
|
1073 |
+
{
|
1074 |
+
"name": "nl-NL-FennaNeural",
|
1075 |
+
"gender": "Female"
|
1076 |
+
},
|
1077 |
+
{
|
1078 |
+
"name": "nl-NL-MaartenNeural",
|
1079 |
+
"gender": "Male"
|
1080 |
+
}
|
1081 |
+
],
|
1082 |
+
"Polish": [
|
1083 |
+
{
|
1084 |
+
"name": "pl-PL-MarekNeural",
|
1085 |
+
"gender": "Male"
|
1086 |
+
},
|
1087 |
+
{
|
1088 |
+
"name": "pl-PL-ZofiaNeural",
|
1089 |
+
"gender": "Female"
|
1090 |
+
}
|
1091 |
+
],
|
1092 |
+
"Pashto": [
|
1093 |
+
{
|
1094 |
+
"name": "ps-AF-GulNawazNeural",
|
1095 |
+
"gender": "Male"
|
1096 |
+
},
|
1097 |
+
{
|
1098 |
+
"name": "ps-AF-LatifaNeural",
|
1099 |
+
"gender": "Female"
|
1100 |
+
}
|
1101 |
+
],
|
1102 |
+
"Portuguese": [
|
1103 |
+
{
|
1104 |
+
"name": "pt-BR-AntonioNeural",
|
1105 |
+
"gender": "Male"
|
1106 |
+
},
|
1107 |
+
{
|
1108 |
+
"name": "pt-BR-FranciscaNeural",
|
1109 |
+
"gender": "Female"
|
1110 |
+
},
|
1111 |
+
{
|
1112 |
+
"name": "pt-BR-ThalitaNeural",
|
1113 |
+
"gender": "Female"
|
1114 |
+
},
|
1115 |
+
{
|
1116 |
+
"name": "pt-PT-DuarteNeural",
|
1117 |
+
"gender": "Male"
|
1118 |
+
},
|
1119 |
+
{
|
1120 |
+
"name": "pt-PT-RaquelNeural",
|
1121 |
+
"gender": "Female"
|
1122 |
+
}
|
1123 |
+
],
|
1124 |
+
"Romanian": [
|
1125 |
+
{
|
1126 |
+
"name": "ro-RO-AlinaNeural",
|
1127 |
+
"gender": "Female"
|
1128 |
+
},
|
1129 |
+
{
|
1130 |
+
"name": "ro-RO-EmilNeural",
|
1131 |
+
"gender": "Male"
|
1132 |
+
}
|
1133 |
+
],
|
1134 |
+
"Russian": [
|
1135 |
+
{
|
1136 |
+
"name": "ru-RU-DmitryNeural",
|
1137 |
+
"gender": "Male"
|
1138 |
+
},
|
1139 |
+
{
|
1140 |
+
"name": "ru-RU-SvetlanaNeural",
|
1141 |
+
"gender": "Female"
|
1142 |
+
}
|
1143 |
+
],
|
1144 |
+
"Sinhala": [
|
1145 |
+
{
|
1146 |
+
"name": "si-LK-SameeraNeural",
|
1147 |
+
"gender": "Male"
|
1148 |
+
},
|
1149 |
+
{
|
1150 |
+
"name": "si-LK-ThiliniNeural",
|
1151 |
+
"gender": "Female"
|
1152 |
+
}
|
1153 |
+
],
|
1154 |
+
"Slovak": [
|
1155 |
+
{
|
1156 |
+
"name": "sk-SK-LukasNeural",
|
1157 |
+
"gender": "Male"
|
1158 |
+
},
|
1159 |
+
{
|
1160 |
+
"name": "sk-SK-ViktoriaNeural",
|
1161 |
+
"gender": "Female"
|
1162 |
+
}
|
1163 |
+
],
|
1164 |
+
"Slovenian": [
|
1165 |
+
{
|
1166 |
+
"name": "sl-SI-PetraNeural",
|
1167 |
+
"gender": "Female"
|
1168 |
+
},
|
1169 |
+
{
|
1170 |
+
"name": "sl-SI-RokNeural",
|
1171 |
+
"gender": "Male"
|
1172 |
+
}
|
1173 |
+
],
|
1174 |
+
"Somali": [
|
1175 |
+
{
|
1176 |
+
"name": "so-SO-MuuseNeural",
|
1177 |
+
"gender": "Male"
|
1178 |
+
},
|
1179 |
+
{
|
1180 |
+
"name": "so-SO-UbaxNeural",
|
1181 |
+
"gender": "Female"
|
1182 |
+
}
|
1183 |
+
],
|
1184 |
+
"Albanian": [
|
1185 |
+
{
|
1186 |
+
"name": "sq-AL-AnilaNeural",
|
1187 |
+
"gender": "Female"
|
1188 |
+
},
|
1189 |
+
{
|
1190 |
+
"name": "sq-AL-IlirNeural",
|
1191 |
+
"gender": "Male"
|
1192 |
+
}
|
1193 |
+
],
|
1194 |
+
"Serbian": [
|
1195 |
+
{
|
1196 |
+
"name": "sr-RS-NicholasNeural",
|
1197 |
+
"gender": "Male"
|
1198 |
+
},
|
1199 |
+
{
|
1200 |
+
"name": "sr-RS-SophieNeural",
|
1201 |
+
"gender": "Female"
|
1202 |
+
}
|
1203 |
+
],
|
1204 |
+
"Sundanese": [
|
1205 |
+
{
|
1206 |
+
"name": "su-ID-JajangNeural",
|
1207 |
+
"gender": "Male"
|
1208 |
+
},
|
1209 |
+
{
|
1210 |
+
"name": "su-ID-TutiNeural",
|
1211 |
+
"gender": "Female"
|
1212 |
+
}
|
1213 |
+
],
|
1214 |
+
"Swedish": [
|
1215 |
+
{
|
1216 |
+
"name": "sv-SE-MattiasNeural",
|
1217 |
+
"gender": "Male"
|
1218 |
+
},
|
1219 |
+
{
|
1220 |
+
"name": "sv-SE-SofieNeural",
|
1221 |
+
"gender": "Female"
|
1222 |
+
}
|
1223 |
+
],
|
1224 |
+
"Swahili": [
|
1225 |
+
{
|
1226 |
+
"name": "sw-KE-RafikiNeural",
|
1227 |
+
"gender": "Male"
|
1228 |
+
},
|
1229 |
+
{
|
1230 |
+
"name": "sw-KE-ZuriNeural",
|
1231 |
+
"gender": "Female"
|
1232 |
+
},
|
1233 |
+
{
|
1234 |
+
"name": "sw-TZ-DaudiNeural",
|
1235 |
+
"gender": "Male"
|
1236 |
+
},
|
1237 |
+
{
|
1238 |
+
"name": "sw-TZ-RehemaNeural",
|
1239 |
+
"gender": "Female"
|
1240 |
+
}
|
1241 |
+
],
|
1242 |
+
"Tamil": [
|
1243 |
+
{
|
1244 |
+
"name": "ta-IN-PallaviNeural",
|
1245 |
+
"gender": "Female"
|
1246 |
+
},
|
1247 |
+
{
|
1248 |
+
"name": "ta-IN-ValluvarNeural",
|
1249 |
+
"gender": "Male"
|
1250 |
+
},
|
1251 |
+
{
|
1252 |
+
"name": "ta-LK-KumarNeural",
|
1253 |
+
"gender": "Male"
|
1254 |
+
},
|
1255 |
+
{
|
1256 |
+
"name": "ta-LK-SaranyaNeural",
|
1257 |
+
"gender": "Female"
|
1258 |
+
},
|
1259 |
+
{
|
1260 |
+
"name": "ta-MY-KaniNeural",
|
1261 |
+
"gender": "Female"
|
1262 |
+
},
|
1263 |
+
{
|
1264 |
+
"name": "ta-MY-SuryaNeural",
|
1265 |
+
"gender": "Male"
|
1266 |
+
},
|
1267 |
+
{
|
1268 |
+
"name": "ta-SG-AnbuNeural",
|
1269 |
+
"gender": "Male"
|
1270 |
+
},
|
1271 |
+
{
|
1272 |
+
"name": "ta-SG-VenbaNeural",
|
1273 |
+
"gender": "Female"
|
1274 |
+
}
|
1275 |
+
],
|
1276 |
+
"Telugu": [
|
1277 |
+
{
|
1278 |
+
"name": "te-IN-MohanNeural",
|
1279 |
+
"gender": "Male"
|
1280 |
+
},
|
1281 |
+
{
|
1282 |
+
"name": "te-IN-ShrutiNeural",
|
1283 |
+
"gender": "Female"
|
1284 |
+
}
|
1285 |
+
],
|
1286 |
+
"Thai": [
|
1287 |
+
{
|
1288 |
+
"name": "th-TH-NiwatNeural",
|
1289 |
+
"gender": "Male"
|
1290 |
+
},
|
1291 |
+
{
|
1292 |
+
"name": "th-TH-PremwadeeNeural",
|
1293 |
+
"gender": "Female"
|
1294 |
+
}
|
1295 |
+
],
|
1296 |
+
"Turkish": [
|
1297 |
+
{
|
1298 |
+
"name": "tr-TR-AhmetNeural",
|
1299 |
+
"gender": "Male"
|
1300 |
+
},
|
1301 |
+
{
|
1302 |
+
"name": "tr-TR-EmelNeural",
|
1303 |
+
"gender": "Female"
|
1304 |
+
}
|
1305 |
+
],
|
1306 |
+
"Ukrainian": [
|
1307 |
+
{
|
1308 |
+
"name": "uk-UA-OstapNeural",
|
1309 |
+
"gender": "Male"
|
1310 |
+
},
|
1311 |
+
{
|
1312 |
+
"name": "uk-UA-PolinaNeural",
|
1313 |
+
"gender": "Female"
|
1314 |
+
}
|
1315 |
+
],
|
1316 |
+
"Urdu": [
|
1317 |
+
{
|
1318 |
+
"name": "ur-IN-GulNeural",
|
1319 |
+
"gender": "Female"
|
1320 |
+
},
|
1321 |
+
{
|
1322 |
+
"name": "ur-IN-SalmanNeural",
|
1323 |
+
"gender": "Male"
|
1324 |
+
},
|
1325 |
+
{
|
1326 |
+
"name": "ur-PK-AsadNeural",
|
1327 |
+
"gender": "Male"
|
1328 |
+
},
|
1329 |
+
{
|
1330 |
+
"name": "ur-PK-UzmaNeural",
|
1331 |
+
"gender": "Female"
|
1332 |
+
}
|
1333 |
+
],
|
1334 |
+
"Uzbek": [
|
1335 |
+
{
|
1336 |
+
"name": "uz-UZ-MadinaNeural",
|
1337 |
+
"gender": "Female"
|
1338 |
+
},
|
1339 |
+
{
|
1340 |
+
"name": "uz-UZ-SardorNeural",
|
1341 |
+
"gender": "Male"
|
1342 |
+
}
|
1343 |
+
],
|
1344 |
+
"Vietnamese": [
|
1345 |
+
{
|
1346 |
+
"name": "vi-VN-HoaiMyNeural",
|
1347 |
+
"gender": "Female"
|
1348 |
+
},
|
1349 |
+
{
|
1350 |
+
"name": "vi-VN-NamMinhNeural",
|
1351 |
+
"gender": "Male"
|
1352 |
+
}
|
1353 |
+
],
|
1354 |
+
"Chinese": [
|
1355 |
+
{
|
1356 |
+
"name": "zh-CN-XiaoxiaoNeural",
|
1357 |
+
"gender": "Female"
|
1358 |
+
},
|
1359 |
+
{
|
1360 |
+
"name": "zh-CN-XiaoyiNeural",
|
1361 |
+
"gender": "Female"
|
1362 |
+
},
|
1363 |
+
{
|
1364 |
+
"name": "zh-CN-YunjianNeural",
|
1365 |
+
"gender": "Male"
|
1366 |
+
},
|
1367 |
+
{
|
1368 |
+
"name": "zh-CN-YunxiNeural",
|
1369 |
+
"gender": "Male"
|
1370 |
+
},
|
1371 |
+
{
|
1372 |
+
"name": "zh-CN-YunxiaNeural",
|
1373 |
+
"gender": "Male"
|
1374 |
+
},
|
1375 |
+
{
|
1376 |
+
"name": "zh-CN-YunyangNeural",
|
1377 |
+
"gender": "Male"
|
1378 |
+
},
|
1379 |
+
{
|
1380 |
+
"name": "zh-CN-liaoning-XiaobeiNeural",
|
1381 |
+
"gender": "Female"
|
1382 |
+
},
|
1383 |
+
{
|
1384 |
+
"name": "zh-CN-shaanxi-XiaoniNeural",
|
1385 |
+
"gender": "Female"
|
1386 |
+
},
|
1387 |
+
{
|
1388 |
+
"name": "zh-HK-HiuGaaiNeural",
|
1389 |
+
"gender": "Female"
|
1390 |
+
},
|
1391 |
+
{
|
1392 |
+
"name": "zh-HK-HiuMaanNeural",
|
1393 |
+
"gender": "Female"
|
1394 |
+
},
|
1395 |
+
{
|
1396 |
+
"name": "zh-HK-WanLungNeural",
|
1397 |
+
"gender": "Male"
|
1398 |
+
},
|
1399 |
+
{
|
1400 |
+
"name": "zh-TW-HsiaoChenNeural",
|
1401 |
+
"gender": "Female"
|
1402 |
+
},
|
1403 |
+
{
|
1404 |
+
"name": "zh-TW-HsiaoYuNeural",
|
1405 |
+
"gender": "Female"
|
1406 |
+
},
|
1407 |
+
{
|
1408 |
+
"name": "zh-TW-YunJheNeural",
|
1409 |
+
"gender": "Male"
|
1410 |
+
}
|
1411 |
+
],
|
1412 |
+
"Zulu": [
|
1413 |
+
{
|
1414 |
+
"name": "zu-ZA-ThandoNeural",
|
1415 |
+
"gender": "Female"
|
1416 |
+
},
|
1417 |
+
{
|
1418 |
+
"name": "zu-ZA-ThembaNeural",
|
1419 |
+
"gender": "Male"
|
1420 |
+
}
|
1421 |
+
]
|
1422 |
+
}
|