File size: 2,323 Bytes
51e2649
631c13e
 
0dd2770
 
 
 
 
 
631c13e
 
811ad8f
 
 
0dd2770
631c13e
0dd2770
 
 
 
6daaf10
0dd2770
811ad8f
 
 
 
631c13e
5e3bfe7
51e2649
 
5e3bfe7
 
811ad8f
5e3bfe7
631c13e
 
811ad8f
631c13e
0fc3b2e
 
631c13e
 
 
 
 
 
 
 
51e2649
 
 
 
811ad8f
51e2649
811ad8f
51e2649
 
30bf56e
 
631c13e
 
51e2649
 
 
 
 
631c13e
77a39e7
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
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

app = Flask(__name__)

# Define the folder where files are saved
file_folder = '/app/'

def filter_text(text):
    filtered_text = re.sub(r'[^\w\s,.\(\):\u00C0-\u00FF]', '', text)
    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)
    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')
    
    if os.path.isfile(piper_exe):
        comando = f'echo {parrafo_filtrado} | "{piper_exe}" -m {model} -f {output_file}'
        subprocess.run(comando, shell=True)
        return output_file
    else:
        return "The piper.exe file was not found in the correct directory."

@app.route('/')
def index():
    model_folder = os.path.join(file_folder)
    model_options = [file for file in os.listdir(model_folder) if file.endswith('.onnx')]
    # 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)