Spaces:
Running
Running
import os | |
import random | |
import re | |
import string | |
import subprocess | |
import base64 | |
from flask import Flask, render_template, request, jsonify, after_this_request | |
app = Flask(__name__) | |
# Define the folder where files are saved | |
file_folder = '/home/app/' | |
def filter_text(text): | |
# Filtra caracteres no deseados y limita la longitud del texto | |
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[:500] | |
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') # Adjusted the path for piper | |
if os.path.isfile(piper_exe): | |
comando = f'echo "{parrafo_filtrado}" | "{piper_exe}" -m {model} -f {output_file}' | |
try: | |
subprocess.run(comando, shell=True, check=True) | |
return output_file | |
except subprocess.CalledProcessError as e: | |
app.logger.error("Error executing command: %s", e) | |
return None | |
else: | |
return "The piper.exe file was not found in the correct directory." | |
def index(): | |
model_folder = file_folder # Adjusted the model folder to 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) | |
def convert_text(): | |
text = request.form.get('text') | |
model = request.form.get('model') | |
if not text or not model: | |
return jsonify({'error': 'Invalid request'}), 400 | |
output_file = convert_text_to_speech(text, model) | |
if output_file: | |
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 | |
else: | |
return jsonify({'error': 'Conversion failed'}), 500 | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860, debug=False) | |