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 = """

中文語者分離(分割)

上傳一段混音音檔,自動分離出兩個人的聲音

TonTon Huang Ph.D. | 手把手帶你一起踩AI坑 | GitHub | Deep Learning 101

### 🔍 使用方式: - 上傳一段包含兩人對話的混音音檔(支援 `.mp3`, `.wav`) - 點擊「Separate」按鈕 - 分離出兩個說話人的音軌
### 📘 相關技術文章:

📢 *本模型基於 PyTorch + Hugging Face Hub 私有模型部署* """ if __name__ == "__main__": interface = gr.Interface( fn=separate_audio, inputs=gr.Audio(type="filepath", label="請上傳混音音檔 (.mp3/.wav)"), outputs=[ gr.Audio(label="語音 1"), gr.Audio(label="語音 2") ], title="🎙️ 語音分離 Demo - Deep Learning 101", description=description_html, allow_flagging="never" ) interface.launch(debug=True)