HirCoir's picture
Update app.py
7b55a9b verified
raw
history blame
2.65 kB
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()