HirCoir's picture
Update app.py
09d0fa0 verified
raw
history blame
2.02 kB
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)