|
import os |
|
import gradio as gr |
|
from scipy.io.wavfile import write |
|
import tempfile |
|
import shutil |
|
|
|
def inference(audio_file): |
|
"""处理上传的音频文件并分离人声和伴奏""" |
|
|
|
os.makedirs("out", exist_ok=True) |
|
|
|
|
|
output_dir = "out" |
|
os.system(f"python -m demucs.separate -n htdemucs --two-stems=vocals '{audio_file}' -o {output_dir}") |
|
|
|
|
|
base_name = os.path.basename(audio_file) |
|
name_without_ext = os.path.splitext(base_name)[0] |
|
|
|
vocals_path = os.path.join(output_dir, "htdemucs", name_without_ext, "vocals.wav") |
|
no_vocals_path = os.path.join(output_dir, "htdemucs", name_without_ext, "no_vocals.wav") |
|
|
|
return vocals_path, no_vocals_path |
|
|
|
|
|
title = "Suno 音乐分离工具" |
|
description = """ |
|
### 使用说明 |
|
1. 上传音频文件(支持mp3、wav等格式) |
|
2. 点击"Submit"按钮 |
|
3. 等待处理完成后下载分离后的人声和伴奏 |
|
|
|
### 技术说明 |
|
- 本工具使用使用独家AI模型进行音频分离 |
|
- 分离质量取决于原始音频的质量和特性 |
|
""" |
|
|
|
|
|
demo = gr.Interface( |
|
fn=inference, |
|
inputs=gr.Audio(type="filepath", label="上传音频文件"), |
|
outputs=[ |
|
gr.Audio(type="filepath", label="人声"), |
|
gr.Audio(type="filepath", label="伴奏") |
|
], |
|
title=title, |
|
description=description, |
|
theme="huggingface", |
|
examples=[["test.mp3"]] |
|
) |
|
|
|
if __name__ == "__main__": |
|
|
|
demo.launch(share=True, server_name="0.0.0.0") |