Spaces:
Running
Running
from flask import Flask, request, send_file | |
import subprocess | |
import os | |
import random | |
import string | |
import tempfile | |
import re | |
import base64 | |
app = Flask(__name__) | |
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) | |
# 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 | |
piper_exe = 'piper' # Cambia 'piper' por el nombre del ejecutable en Linux | |
# Ejecutar el comando para generar el archivo de audio | |
comando = f'echo "{parrafo_filtrado}" | {piper_exe} -m {model} -f {output_file}' # Cambia el comando según la sintaxis de la herramienta en Linux | |
subprocess.run(comando, shell=True, executable='/bin/bash') | |
# Leer el contenido del archivo generado | |
with open(output_file, 'rb') as audio_file: | |
audio_content = audio_file.read() | |
# Eliminar el archivo generado | |
os.remove(output_file) | |
return audio_content | |
def text_to_audio(): | |
data = request.get_json() | |
parrafo = data['parrafo'] | |
model = data['model'] | |
audio_content = convert_text_to_speech(parrafo, model) | |
# Convertir el audio a base64 | |
audio_base64 = base64.b64encode(audio_content).decode('utf-8') | |
return {'audio_base64': audio_base64} | |
if __name__ == '__main__': | |
app.run(debug=True) | |