HirCoir commited on
Commit
5e3bfe7
1 Parent(s): 09d0fa0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -28
app.py CHANGED
@@ -1,13 +1,12 @@
1
- from flask import Flask, request, send_file
2
  import subprocess
3
  import os
 
4
  import random
5
  import string
 
6
  import tempfile
7
  import re
8
- import base64
9
-
10
- app = Flask(__name__)
11
 
12
  def filter_text(text):
13
  # Expresión regular para permitir solo letras de la A a la Z en mayúsculas y minúsculas,
@@ -21,38 +20,47 @@ def filter_text(text):
21
  def convert_text_to_speech(parrafo, model):
22
  parrafo_filtrado = filter_text(parrafo)
23
 
 
 
 
 
 
 
 
 
24
  # Generar un nombre de archivo aleatorio
25
  random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) + '.wav'
26
  output_file = os.path.join('.', random_name)
27
 
28
- # Construir la ruta al archivo piper
29
- piper_exe = 'piper' # Cambia 'piper' por el nombre del ejecutable en Linux
30
 
31
- # Ejecutar el comando para generar el archivo de audio
32
- comando = f'echo "{parrafo_filtrado}" | {piper_exe} -m {model} -f {output_file}' # Cambia el comando según la sintaxis de la herramienta en Linux
33
- subprocess.run(comando, shell=True, executable='/bin/bash')
 
 
34
 
35
- # Leer el contenido del archivo generado
 
 
 
 
 
 
 
36
  with open(output_file, 'rb') as audio_file:
37
  audio_content = audio_file.read()
38
-
39
- # Eliminar el archivo generado
40
- os.remove(output_file)
41
-
42
  return audio_content
43
 
44
- @app.route('/text_to_audio', methods=['POST'])
45
- def text_to_audio():
46
- data = request.get_json()
47
- parrafo = data['parrafo']
48
- model = data['model']
49
-
50
- audio_content = convert_text_to_speech(parrafo, model)
51
-
52
- # Convertir el audio a base64
53
- audio_base64 = base64.b64encode(audio_content).decode('utf-8')
54
-
55
- return {'audio_base64': audio_base64}
56
 
57
- if __name__ == '__main__':
58
- app.run(debug=True)
 
1
+ import argparse
2
  import subprocess
3
  import os
4
+ import sys
5
  import random
6
  import string
7
+ import gradio as gr
8
  import tempfile
9
  import re
 
 
 
10
 
11
  def filter_text(text):
12
  # Expresión regular para permitir solo letras de la A a la Z en mayúsculas y minúsculas,
 
20
  def convert_text_to_speech(parrafo, model):
21
  parrafo_filtrado = filter_text(parrafo)
22
 
23
+ # Determinar el directorio base dependiendo de si se ejecuta desde el código fuente o desde el ejecutable congelado
24
+ if getattr(sys, 'frozen', False):
25
+ # La aplicación se está ejecutando desde un ejecutable congelado
26
+ bundle_dir = getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(sys.argv[0])))
27
+ else:
28
+ # La aplicación se está ejecutando desde el código fuente
29
+ bundle_dir = os.path.abspath(os.path.dirname(__file__))
30
+
31
  # Generar un nombre de archivo aleatorio
32
  random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) + '.wav'
33
  output_file = os.path.join('.', random_name)
34
 
35
+ # Construir la ruta al archivo piper.exe
36
+ piper_exe = os.path.join(bundle_dir, 'piper.exe')
37
 
38
+ # Verificar si la ruta es válida
39
+ if os.path.isfile(piper_exe):
40
+ # Ejecutar el comando para generar el archivo de audio
41
+ comando = f'echo {parrafo_filtrado} | "{piper_exe}" -m {model} -f {output_file}'
42
+ subprocess.run(comando, shell=True)
43
 
44
+ # Devolver la ruta al archivo de audio generado
45
+ return output_file
46
+ else:
47
+ return "El archivo piper.exe no se encontró en el directorio correcto."
48
+
49
+ # Función para cargar y reproducir el archivo de audio en Gradio
50
+ def play_audio(parrafo, model):
51
+ output_file = convert_text_to_speech(parrafo, model)
52
  with open(output_file, 'rb') as audio_file:
53
  audio_content = audio_file.read()
 
 
 
 
54
  return audio_content
55
 
56
+ # Crear la interfaz de Gradio
57
+ input_text = gr.Textbox(label="Introduce el texto")
58
+ model_options = [
59
+ "es_MX-locutor-voice-11400-epoch-high.onnx",
60
+ "otro_modelo.onnx",
61
+ "es_MX-cortanav3-high.onnx",
62
+ "es_MX-gafe-12232-epoch-high.onnx"
63
+ ] # Agrega aquí más modelos si es necesario
64
+ select_model = gr.Dropdown(model_options, label="Selecciona el modelo")
 
 
 
65
 
66
+ gr.Interface(play_audio, inputs=[input_text, select_model], outputs=gr.Audio(), flagging_options=None).launch()