Spaces:
Running
Running
import argparse | |
import subprocess | |
import os | |
import sys | |
import random | |
import string | |
import gradio as gr | |
import tempfile | |
import re | |
def filter_text(text): | |
# Expresión regular para permitir solo letras de la A a la Z en mayúsculas y minúsculas, | |
# letras con acentos utilizadas en español México, números, comas, puntos, paréntesis, dos puntos y espacios | |
filtered_text = re.sub(r'[^A-Za-zÁÉÍÓÚÜáéíóúü0-9,.\(\):\s]', '', text) | |
# Eliminar saltos de línea y reemplazar paréntesis por comas | |
filtered_text = filtered_text.replace('\n', ' ') | |
filtered_text = filtered_text.replace('(', ',').replace(')', ',') | |
return filtered_text | |
def convert_text_to_speech(parrafo, model): | |
parrafo_filtrado = filter_text(parrafo) | |
# Determinar el directorio base dependiendo de si se ejecuta desde el código fuente o desde el ejecutable congelado | |
if getattr(sys, 'frozen', False): | |
# La aplicación se está ejecutando desde un ejecutable congelado | |
bundle_dir = getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(sys.argv[0]))) | |
else: | |
# La aplicación se está ejecutando desde el código fuente | |
bundle_dir = os.path.abspath(os.path.dirname(__file__)) | |
# Generar un nombre de archivo aleatorio | |
random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) + '.wav' | |
output_file = os.path.join('.', random_name) | |
# Construir la ruta al archivo piper.exe | |
piper_exe = os.path.join(bundle_dir, 'piper.exe') | |
# Verificar si la ruta es válida | |
if os.path.isfile(piper_exe): | |
# Ejecutar el comando para generar el archivo de audio | |
comando = f'echo {parrafo_filtrado} | "{piper_exe}" -m {model} -f {output_file}' | |
subprocess.run(comando, shell=True) | |
# Devolver la ruta al archivo de audio generado | |
return output_file | |
else: | |
return "El archivo piper.exe no se encontró en el directorio correcto." | |
# Función para cargar y reproducir el archivo de audio en Gradio | |
def play_audio(parrafo, model): | |
output_file = convert_text_to_speech(parrafo, model) | |
with open(output_file, 'rb') as audio_file: | |
audio_content = audio_file.read() | |
return audio_content | |
# Crear la interfaz de Gradio | |
input_text = gr.Textbox(label="Introduce el texto") | |
model_options = [ | |
"es_MX-locutor-voice-11400-epoch-high.onnx", | |
"es_MX-cortanav3-high.onnx" | |
] # Agrega aquí más modelos si es necesario | |
select_model = gr.Dropdown(model_options, label="Selecciona el modelo") | |
gr.Interface(play_audio, inputs=[input_text, select_model], outputs=gr.Audio(), flagging_options=None).launch() | |