File size: 2,015 Bytes
09d0fa0
0dd2770
 
 
 
 
 
09d0fa0
 
 
0dd2770
 
6daaf10
 
0dd2770
6daaf10
0dd2770
 
 
 
6daaf10
0dd2770
 
6daaf10
0dd2770
 
 
edd9b02
09d0fa0
 
 
 
 
 
 
0dd2770
 
09d0fa0
 
 
 
0dd2770
 
09d0fa0
 
 
 
 
 
 
 
 
 
 
 
0dd2770
09d0fa0
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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)