DeepLearning101 commited on
Commit
868cbf8
·
verified ·
1 Parent(s): 8467c17

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -14
app.py CHANGED
@@ -79,37 +79,53 @@ def convert_to_wav(input_path):
79
  raise gr.Error("❌ 音訊格式轉換失敗")
80
 
81
  def separate_audio(input_audio):
82
- """主處理函式"""
83
  process_id = datetime.now().strftime("%Y%m%d%H%M%S%f")
84
  temp_wav = None
85
 
86
  try:
87
- # 使用固定臨時目錄而非隨機生成
88
- tmp_dir = "/tmp/gradio_outputs"
89
- os.makedirs(tmp_dir, exist_ok=True)
90
 
91
- # 建立唯一辨識子目錄
92
- process_id = datetime.now().strftime("%Y%m%d%H%M%S%f")
93
- output_dir = os.path.join(tmp_dir, process_id)
94
- os.makedirs(output_dir)
 
 
 
 
95
 
96
- # 輸出路徑改為固定結構
 
 
97
  outfilename = os.path.join(output_dir, "output.wav")
98
 
99
- # 執行分離
 
100
  sep_files = dpt_sep_process(temp_wav, model=model, outfilename=outfilename)
101
 
102
- # 確保輸出檔案存在
103
  for f in sep_files:
104
  if not os.path.exists(f):
105
  raise gr.Error(f"❌ 缺失輸出檔案: {f}")
 
106
 
 
107
  return sep_files
108
 
 
 
 
 
 
 
109
  except Exception as e:
110
- # 清理失敗時保留臨時資料夾以利除錯
111
- logger.error(f"⚠️ 處理失敗: {str(e)}")
112
- raise gr.Error("❌ 處理失敗,請檢查日誌") from e
 
 
 
 
113
 
114
  # 🎯 description 內容(轉為 HTML)
115
  description_html = """
 
79
  raise gr.Error("❌ 音訊格式轉換失敗")
80
 
81
  def separate_audio(input_audio):
 
82
  process_id = datetime.now().strftime("%Y%m%d%H%M%S%f")
83
  temp_wav = None
84
 
85
  try:
86
+ logger.info(f"[{process_id}] 🚀 收到新請求: {input_audio}")
 
 
87
 
88
+ # 1️⃣ 檢查檔案大小
89
+ if os.path.getsize(input_audio) > 50 * 1024 * 1024:
90
+ raise gr.Error("❌ 檔案超過 50MB 限制")
91
+
92
+ # 2️⃣ 轉換為標準格式
93
+ logger.info(f"[{process_id}] 🔁 轉換標準音檔...")
94
+ temp_wav = convert_to_wav(input_audio)
95
+ validate_audio(temp_wav)
96
 
97
+ # 3️⃣ 建立固定輸出目錄
98
+ output_dir = os.path.join("/tmp/gradio_outputs", process_id)
99
+ os.makedirs(output_dir)
100
  outfilename = os.path.join(output_dir, "output.wav")
101
 
102
+ # 4️⃣ 執行語音分離
103
+ logger.info(f"[{process_id}] 🧠 開始分離...")
104
  sep_files = dpt_sep_process(temp_wav, model=model, outfilename=outfilename)
105
 
106
+ # 5️⃣ 驗證輸出
107
  for f in sep_files:
108
  if not os.path.exists(f):
109
  raise gr.Error(f"❌ 缺失輸出檔案: {f}")
110
+ validate_audio(f)
111
 
112
+ logger.info(f"[{process_id}] ✅ 處理完成")
113
  return sep_files
114
 
115
+ except RuntimeError as e:
116
+ if "CUDA out of memory" in str(e):
117
+ logger.error(f"[{process_id}] 💥 GPU 記憶體不足")
118
+ raise gr.Error("⚠️ 請縮短音檔長度") from e
119
+ else:
120
+ raise
121
  except Exception as e:
122
+ logger.error(f"[{process_id}] ❌ 處理失敗: {str(e)}\n{traceback.format_exc()}")
123
+ raise gr.Error(f"⚠️ 處理失敗: {str(e)}") from e
124
+ finally:
125
+ # 清理臨時檔案
126
+ if temp_wav and os.path.exists(temp_wav):
127
+ os.unlink(temp_wav)
128
+ logger.info(f"[{process_id}] 🧹 臨時檔案已清理")
129
 
130
  # 🎯 description 內容(轉為 HTML)
131
  description_html = """