File size: 2,679 Bytes
ef29570
 
 
 
 
 
 
 
 
 
 
 
 
 
5887527
ef29570
 
5887527
 
 
ef29570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from flask import Flask, render_template, request, jsonify, after_this_request
from io import BytesIO
import base64
import subprocess
import os
import random
import string
import re
import shlex

app = Flask(__name__)

# Define the folder where files are saved
file_folder = '/home/app/'
model_name = os.getenv('MODELNAME')
# Models with specific character replacements
models_replacements = {
    model_name: {
        "model_path": model_name + ".onnx",
        "replacements": [(')', ','), ('\n', ' ')]
    }
}

def filter_text(text):
    # Escapa caracteres especiales
    escaped_text = shlex.quote(text)
    return escaped_text

def convert_text_to_speech(parrafo, model):
    # Limit text to 500 characters
    parrafo = parrafo[:10000]
    
    model_info = models_replacements.get(model)
    if model_info:
        model_path = model_info.get("model_path")
        parrafo_filtrado = filter_text(parrafo)
        random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) + '.wav'
        output_file = os.path.join(file_folder, random_name)
        app.logger.info("Audio file created at: %s", output_file)
        piper_exe = os.path.join(file_folder, 'piper')  # Adjusted the path for piper
        
        if os.path.isfile(piper_exe):
            comando = f'echo {parrafo_filtrado} | "{piper_exe}" -m {model_path} -f {output_file}'
            subprocess.run(comando, shell=True)
            return output_file
        else:
            return "The piper.exe file was not found in the correct directory."
    else:
        return "Model not found."

@app.route('/')
def index():
    model_options = list(models_replacements.keys())
    # Log the contents of the current folder
    app.logger.info("Contents of current folder: %s", os.listdir(file_folder))
    return render_template('index.html', model_options=model_options)

@app.route('/convert', methods=['POST'])
def convert_text():
    text = request.form['text']
    model = request.form['model']
    output_file = convert_text_to_speech(text, model)
    
    @after_this_request
    def remove_file(response):
        try:
            os.remove(output_file)
            app.logger.info("Audio file deleted: %s", output_file)
        except Exception as error:
            app.logger.error("Error deleting file: %s", error)
        return response
    
    with open(output_file, 'rb') as audio_file:
        audio_content = audio_file.read()
        
    audio_base64 = base64.b64encode(audio_content).decode('utf-8')
    
    response = jsonify({'audio_base64': audio_base64})
    
    return response

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=False)