from flask import Flask, render_template, request, send_from_directory from spleeter.separator import Separator import os from werkzeug.utils import secure_filename app = Flask(__name__) UPLOAD_FOLDER = 'uploads' OUTPUT_FOLDER = 'output' # Usar uma pasta de saída separada é uma boa prática app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['OUTPUT_FOLDER'] = OUTPUT_FOLDER # Garante que as pastas existam os.makedirs(UPLOAD_FOLDER, exist_ok=True) os.makedirs(OUTPUT_FOLDER, exist_ok=True) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': if 'audiofile' not in request.files: return render_template('index.html', error='Nenhum arquivo enviado.') file = request.files['audiofile'] if file.filename == '': return render_template('index.html', error='Nenhum arquivo selecionado.') if file: filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) # Define o diretório de saída para os stems output_path = os.path.join(app.config['OUTPUT_FOLDER'], os.path.splitext(filename)[0]) separator = Separator('spleeter:2stems') separator.separate_to_file(filepath, app.config['OUTPUT_FOLDER']) # Nome da pasta de saída para os links output_foldername = os.path.splitext(filename)[0] return render_template('index.html', vocals_path=f'{output_foldername}/vocals.wav', accompaniment_path=f'{output_foldername}/accompaniment.wav') return render_template('index.html') @app.route('/download/') def download_file(filename): return send_from_directory(app.config['OUTPUT_FOLDER'], filename, as_attachment=True) if __name__ == '__main__': app.run(debug=True)