from flask import Flask, request, send_file import os import requests import subprocess app = Flask(__name__) @app.route('/', methods=['GET']) def hello(): return "Hello! This is an api server, and it is running successfully. For usage, please contact the person who hosted this api server." @app.route('/api/audio_separation', methods=['GET']) def audio_separation(): # 获取MP3文件的直链地址 mp3_url = request.args.get('url') if not mp3_url: return "Error: URL parameter is required", 400 # 下载MP3文件到本地 response = requests.get(mp3_url) mp3_filename = mp3_url.split('/')[-1] # 使用下载的文件名 with open(mp3_filename, 'wb') as f: f.write(response.content) # 执行音频分离操作 subprocess.run(['python', 'separate.py', mp3_filename, '-m', './models/MDX_Net_Models/UVR-MDX-NET-Inst_HQ_3.onnx']) # 生成分离后的文件名 vocals_filename = f"{os.path.splitext(mp3_filename)[0]}_vocals.wav" no_vocals_filename = f"{os.path.splitext(mp3_filename)[0]}_no_vocals.wav" # 提供文件的永久直链 vocals_url = f"/download/{os.path.basename(vocals_filename)}" no_vocals_url = f"/download/{os.path.basename(no_vocals_filename)}" # 返回结果 result = { "vocals_url": vocals_url, "no_vocals_url": no_vocals_url } return result @app.route('/download/', methods=['GET']) def download(filename): return send_file("./separated/" + filename, as_attachment=True) if __name__ == '__main__': app.run(debug=False)