import gradio as gr import torch from DPTNet_eval.DPTNet_quant_sep import load_dpt_model, dpt_sep_process import os import soundfile as sf import numpy as np import librosa import warnings # 加載模型 model = load_dpt_model() def separate_audio(input_wav): """ Gradio Audio(filepath) → 處理 → 回傳兩個分離後的音檔路徑 """ file_extension = os.path.splitext(input_wav)[1].lower() # 如果是 MP3 或其他格式,先轉成 WAV if file_extension != ".wav": data, sr = sf.read(input_wav) # 轉單聲道 if len(data.shape) > 1: data = data.mean(axis=1) # 重採樣到 16kHz if sr != 16000: data = librosa.resample(data, orig_sr=sr, target_sr=16000) # 存成 WAV sf.write("input.wav", data, 16000) wav_path = "input.wav" else: wav_path = input_wav # 分離語音 outfilename = "output.wav" dpt_sep_process(wav_path, model=model, outfilename=outfilename) return ( outfilename.replace('.wav', '_sep1.wav'), outfilename.replace('.wav', '_sep2.wav') ) # 🎯 你提供的 description 內容(已轉為 HTML) description_html = """
上傳一段混音音檔,自動分離出兩個人的聲音