playback / app.py
cngsm's picture
Create app.py
7ac0b0b verified
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/<path:filename>')
def download_file(filename):
return send_from_directory(app.config['OUTPUT_FOLDER'], filename, as_attachment=True)
if __name__ == '__main__':
app.run(debug=True)