Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -13,10 +13,6 @@ from TTS.tts.models.xtts import Xtts
|
|
13 |
from TTS.utils.generic_utils import get_user_data_dir
|
14 |
from huggingface_hub import hf_hub_download
|
15 |
|
16 |
-
HF_TOKEN = os.environ.get("HF_TOKEN")
|
17 |
-
if not HF_TOKEN:
|
18 |
-
raise ValueError("No se ha proporcionado el token de Hugging Face. Por favor, configura la variable de entorno HF_TOKEN.")
|
19 |
-
|
20 |
# Configuración inicial
|
21 |
os.environ["COQUI_TOS_AGREED"] = "1"
|
22 |
|
@@ -85,6 +81,7 @@ def predict(prompt, language, reference_audio):
|
|
85 |
|
86 |
output_path = "pedro_labattaglia_TTS.wav"
|
87 |
# Guardar el audio directamente desde el output del modelo
|
|
|
88 |
wavfile.write(output_path, config.audio["output_sample_rate"], out["wav"])
|
89 |
|
90 |
audio_length = len(out["wav"]) / config.audio["output_sample_rate"] # duración del audio en segundos
|
@@ -99,21 +96,79 @@ def predict(prompt, language, reference_audio):
|
|
99 |
print(f"Error detallado: {str(e)}")
|
100 |
return None, f"Error: {str(e)}"
|
101 |
|
102 |
-
#
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
|
|
116 |
)
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
if __name__ == "__main__":
|
119 |
-
|
|
|
13 |
from TTS.utils.generic_utils import get_user_data_dir
|
14 |
from huggingface_hub import hf_hub_download
|
15 |
|
|
|
|
|
|
|
|
|
16 |
# Configuración inicial
|
17 |
os.environ["COQUI_TOS_AGREED"] = "1"
|
18 |
|
|
|
81 |
|
82 |
output_path = "pedro_labattaglia_TTS.wav"
|
83 |
# Guardar el audio directamente desde el output del modelo
|
84 |
+
import scipy.io.wavfile as wavfile
|
85 |
wavfile.write(output_path, config.audio["output_sample_rate"], out["wav"])
|
86 |
|
87 |
audio_length = len(out["wav"]) / config.audio["output_sample_rate"] # duración del audio en segundos
|
|
|
96 |
print(f"Error detallado: {str(e)}")
|
97 |
return None, f"Error: {str(e)}"
|
98 |
|
99 |
+
# Configuración de la interfaz de Gradio
|
100 |
+
supported_languages = ["es", "en"]
|
101 |
+
reference_audios = [
|
102 |
+
"serio.wav",
|
103 |
+
"neutral.wav",
|
104 |
+
"alegre.wav",
|
105 |
+
"neutral_ingles.wav"
|
106 |
+
]
|
107 |
+
|
108 |
+
theme = gr.themes.Soft(
|
109 |
+
primary_hue="blue",
|
110 |
+
secondary_hue="gray",
|
111 |
+
).set(
|
112 |
+
body_background_fill='*neutral_100',
|
113 |
+
body_background_fill_dark='*neutral_900',
|
114 |
)
|
115 |
|
116 |
+
description = """
|
117 |
+
# Sintetizador de voz de Pedro Labattaglia 🎙️
|
118 |
+
|
119 |
+
Sintetizador de voz con la voz del locutor argentino Pedro Labattaglia.
|
120 |
+
|
121 |
+
## Cómo usarlo:
|
122 |
+
- Elija el idioma (Español o Inglés)
|
123 |
+
- Elija un audio de referencia de la lista
|
124 |
+
- Escriba el texto que desea sintetizar
|
125 |
+
- Presione generar voz
|
126 |
+
"""
|
127 |
+
|
128 |
+
# Interfaz de Gradio
|
129 |
+
with gr.Blocks(theme=theme) as demo:
|
130 |
+
gr.Markdown(description)
|
131 |
+
|
132 |
+
# Fila para centrar la imagen
|
133 |
+
with gr.Row():
|
134 |
+
with gr.Column(equal_height=True): # Esto centra la imagen en la fila
|
135 |
+
gr.Image(
|
136 |
+
"https://www.labattaglia.com.ar/images/about_me_pic2.jpg",
|
137 |
+
label="",
|
138 |
+
show_label=False,
|
139 |
+
container=False, # Esto permite que la imagen se ajuste al contenedor
|
140 |
+
elem_id="image-container" # Asigna un ID CSS para agregar estilos personalizados
|
141 |
+
)
|
142 |
+
|
143 |
+
# Fila para seleccionar idioma, referencia y generar voz
|
144 |
+
with gr.Row():
|
145 |
+
with gr.Column(scale=2):
|
146 |
+
language_selector = gr.Dropdown(label="Idioma", choices=supported_languages)
|
147 |
+
reference_audio = gr.Dropdown(label="Audio de referencia", choices=reference_audios)
|
148 |
+
input_text = gr.Textbox(label="Texto a sintetizar", placeholder="Escribe aquí el texto que quieres convertir a voz...")
|
149 |
+
generate_button = gr.Button("Generar voz", variant="primary")
|
150 |
+
|
151 |
+
with gr.Column(scale=1):
|
152 |
+
generated_audio = gr.Audio(label="Audio generado", interactive=False)
|
153 |
+
metrics_output = gr.Textbox(label="Métricas", value="Tiempo de generación: -- segundos\nFactor de tiempo real: --")
|
154 |
+
|
155 |
+
# Configuración del botón para generar voz
|
156 |
+
generate_button.click(
|
157 |
+
predict,
|
158 |
+
inputs=[input_text, language_selector, reference_audio],
|
159 |
+
outputs=[generated_audio, metrics_output]
|
160 |
+
)
|
161 |
+
|
162 |
+
# Estilos CSS personalizados
|
163 |
+
demo.css = """
|
164 |
+
#image-container img {
|
165 |
+
display: block;
|
166 |
+
margin-left: auto;
|
167 |
+
margin-right: auto;
|
168 |
+
max-width: 256px; /* Ancho máximo de 256px */
|
169 |
+
height: auto; /* Mantener la relación de aspecto */
|
170 |
+
}
|
171 |
+
"""
|
172 |
+
|
173 |
if __name__ == "__main__":
|
174 |
+
demo.launch(share=True)
|