Ryanus commited on
Commit
c06d1f2
·
verified ·
1 Parent(s): bb1a814

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -26
app.py CHANGED
@@ -105,7 +105,7 @@ os.makedirs(SAVE_DIR, exist_ok=True)
105
  # --- 結束自動儲存設定 ---
106
 
107
 
108
- def generate_speech(text, language, uploaded_speaker_audio_path): # 參數名稱更清晰
109
  """
110
  根據輸入文字、語言和語音參考檔案生成語音。
111
  如果用戶上傳了檔案,則使用上傳的檔案;否則使用預設的 speaker.wav。
@@ -165,31 +165,62 @@ def generate_speech(text, language, uploaded_speaker_audio_path): # 參數名稱
165
  os.remove(output_file) # 清理臨時檔案
166
  return None, f"生成語音失敗: {e}"
167
 
168
- # Gradio 介面配置
169
- iface = gr.Interface(
170
- fn=generate_speech,
171
- inputs=[
172
- gr.Textbox(lines=5, label="輸入文字", placeholder="請在這裡輸入你想要轉換成語音的文字..."),
173
- gr.Dropdown(choices=SUPPORTED_LANGUAGES, label="選擇語言", value="en"),
174
- # 重新加入 Audio 輸入組件,用於上傳語音參考檔案
175
- gr.Audio(
176
- type="filepath", # 接收檔案路徑
177
- label="上傳語音參考檔案 (WAV) (可選)",
178
- sources=["microphone", "upload"], # 允許從麥克風錄音或上傳檔案
179
- # 移除 waveform_options 和 info 參數以避免 Gradio 版本兼容性問題
180
- # waveform_options=gr.Audio.WaveformOptions(...)
181
- # info="請上傳一個清晰的語音檔案 (建議 3-10 秒,WAV 格式) 來克隆語音",
182
- ),
183
- ],
184
- outputs=[
185
- gr.Audio(label="生成的語音", type="filepath"),
186
- gr.Textbox(label="狀態")
187
- ],
188
- title="Coqui TTS XTTS-v2 語音生成 (CPU - 語音克隆 & 預設語音 & 自動儲存)",
189
- description="在 Hugging Face Space 上使用 Coqui TTS XTTS-v2 模型將文字轉換為音。此演示使用 CPU 運行,請注意 XTTS-v2 在 CPU 上運行會非常慢。您可以上傳自己的語音,或使用預設語音。生成的語音將自動儲存到 Space 專案中。",
190
- flagging_mode="never",
191
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
 
193
  # 啟動 Gradio 應用
194
  if __name__ == "__main__":
195
- iface.launch()
 
105
  # --- 結束自動儲存設定 ---
106
 
107
 
108
+ def generate_speech(text, language, uploaded_speaker_audio_path):
109
  """
110
  根據輸入文字、語言和語音參考檔案生成語音。
111
  如果用戶上傳了檔案,則使用上傳的檔案;否則使用預設的 speaker.wav。
 
165
  os.remove(output_file) # 清理臨時檔案
166
  return None, f"生成語音失敗: {e}"
167
 
168
+ # --- 新增:查看已儲存語音的功能 ---
169
+ def list_saved_audio_files():
170
+ """掃描儲存資料夾,返回所有 .wav 檔案的完整路徑列表。"""
171
+ audio_files = []
172
+ if os.path.exists(SAVE_DIR) and os.path.isdir(SAVE_DIR):
173
+ for filename in os.listdir(SAVE_DIR):
174
+ if filename.lower().endswith(".wav"):
175
+ audio_files.append(os.path.join(SAVE_DIR, filename))
176
+ audio_files.sort(key=os.path.getmtime, reverse=True) # 按修改時間倒序排列,最新檔案在前
177
+ return audio_files
178
+ # --- 結束新增 ---
179
+
180
+ # Gradio 介面配置 (使用 gr.Blocks 實現多 Tab 介面)
181
+ with gr.Blocks(title="Coqui TTS XTTS-v2 語音生成") as demo:
182
+ gr.Markdown("# Coqui TTS XTTS-v2 語音生成 (CPU)")
183
+ gr.Markdown("此演示使用 CPU 運行,請注意 XTTS-v2 在 CPU 上運行會非常慢。您可以上傳自己的語音,或使用預設語音。生成的語音將自動儲存到 Space 專案中。")
184
+
185
+ with gr.Tab("語音生成"):
186
+ with gr.Row():
187
+ with gr.Column():
188
+ text_input = gr.Textbox(lines=5, label="輸入文字", placeholder="請在這裡輸入你想要轉換成語音的文字...")
189
+ language_dropdown = gr.Dropdown(choices=SUPPORTED_LANGUAGES, label="選擇", value="en")
190
+ speaker_audio_upload = gr.Audio(
191
+ type="filepath",
192
+ label="上傳語音參考檔案 (WAV) (可選)",
193
+ sources=["microphone", "upload"],
194
+ # 移除 waveform_options 和 info 參數以避免 Gradio 版本兼容性問題
195
+ )
196
+ generate_button = gr.Button("生成語音")
197
+ with gr.Column():
198
+ output_audio = gr.Audio(label="生成的語音", type="filepath")
199
+ status_textbox = gr.Textbox(label="狀態")
200
+
201
+ # 將生成按鈕與 generate_speech 函數綁定
202
+ generate_button.click(
203
+ fn=generate_speech,
204
+ inputs=[text_input, language_dropdown, speaker_audio_upload],
205
+ outputs=[output_audio, status_textbox]
206
+ )
207
+
208
+ with gr.Tab("查看已儲存語音"):
209
+ gr.Markdown("### 已儲存的語音檔案")
210
+ gr.Markdown("請注意:每次生成語音並儲存後,Hugging Face Space 會自動重啟,因此您可能需要點擊刷新按鈕來查看最新檔案。")
211
+
212
+ saved_files_output = gr.File(
213
+ label="已儲存的語音檔案",
214
+ file_count="multiple", # 允許顯示多個檔案
215
+ interactive=False # 不允許用戶上傳,只用於顯示和下載
216
+ )
217
+ refresh_button = gr.Button("刷新檔案列表")
218
+
219
+ # 應用程式載入時,自動載入檔案列表
220
+ demo.load(list_saved_audio_files, outputs=[saved_files_output])
221
+ # 點擊刷新按鈕時,重新載入檔案列表
222
+ refresh_button.click(list_saved_audio_files, outputs=[saved_files_output])
223
 
224
  # 啟動 Gradio 應用
225
  if __name__ == "__main__":
226
+ demo.launch()