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 @app.route('/text_to_audio', methods=['POST']) 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)