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

Create upload reference

Browse files
Files changed (1) hide show
  1. upload reference +87 -0
upload reference ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import datetime
3
+ import shutil
4
+ import gradio as gr
5
+ import tempfile # 假設這是用於處理臨時檔案的庫
6
+
7
+ # --- 自動儲存設定 ---
8
+ # 儲存上傳的參考語音檔案的資料夾
9
+ SAVE_UPLOADED_REFERENCES_DIR = "uploaded_references"
10
+
11
+ # 確保儲存資料夾存在
12
+ os.makedirs(SAVE_UPLOADED_REFERENCES_DIR, exist_ok=True)
13
+ # --- 結束自動儲存設定 ---
14
+
15
+ # --- generate_speech 函數中的相關部分 ---
16
+ # 假設這是 generate_speech 函數的定義
17
+ # def generate_speech(text, language, uploaded_speaker_audio_path):
18
+ # # ... 其他邏輯 ...
19
+
20
+ # --- 決定使用哪個語音參考檔案 ---
21
+ speaker_wav_to_use = uploaded_speaker_audio_path
22
+
23
+ # 如果用戶上傳了參考語音,則儲存它
24
+ if uploaded_speaker_audio_path:
25
+ try:
26
+ timestamp_ref = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
27
+ # 獲取原始檔案的副檔名,例如 .wav
28
+ original_ext = os.path.splitext(uploaded_speaker_audio_path)[1]
29
+ # 構建儲存檔案的名稱,包含時間戳和原始副檔名
30
+ saved_ref_file_name = f"{timestamp_ref}_uploaded_ref{original_ext}"
31
+ # 構建儲存檔案的完整路徑
32
+ saved_ref_file_path = os.path.join(SAVE_UPLOADED_REFERENCES_DIR, saved_ref_file_name)
33
+ # 將上傳的臨時檔案複製到指定的儲存目錄
34
+ shutil.copy(uploaded_speaker_audio_path, saved_ref_file_path)
35
+ print(f"上傳的參考語音已儲存到:{saved_ref_file_path}")
36
+ except Exception as e:
37
+ print(f"儲存上傳的參考語音時發生錯誤: {e}")
38
+ # 即使儲存參考語音失敗,也繼續生成語音
39
+
40
+ print(f"使用上傳的語音參考檔案: {speaker_wav_to_use}")
41
+ else: # 如果用戶沒有上傳檔案,則使用預設檔案
42
+ # ... 處理預設檔案的邏輯 ...
43
+ pass # 這裡省略了預設檔案的處理,因為重點是上傳參考語音的儲存
44
+ # --- 結束決定 ---
45
+
46
+ # ... 後續的語音生成和生成的語音儲存邏輯 ...
47
+
48
+ # --- 結束 generate_speech 函數中的相關部分 ---
49
+
50
+
51
+ # --- 用於查看已上傳參考語音的函數 ---
52
+ def list_uploaded_reference_files():
53
+ """掃描上傳參考語音資料夾,返回所有 .wav 檔案的完整路徑列表。"""
54
+ ref_files = []
55
+ if os.path.exists(SAVE_UPLOADED_REFERENCES_DIR) and os.path.isdir(SAVE_UPLOADED_REFERENCES_DIR):
56
+ for filename in os.listdir(SAVE_UPLOADED_REFERENCES_DIR):
57
+ if filename.lower().endswith(".wav"):
58
+ # 返回完整路徑,以便 Gradio 可以正確顯示和提供下載
59
+ ref_files.append(os.path.join(SAVE_UPLOADED_REFERENCES_DIR, filename))
60
+ # 按修改時間倒序排列,最新檔案在前
61
+ ref_files.sort(key=os.path.getmtime, reverse=True)
62
+ return ref_files
63
+ # --- 結束查看已上傳參考語音的函數 ---
64
+
65
+
66
+ # --- Gradio 介面中的相關部分 ---
67
+ # 假設這是 gr.Blocks(title="...") as demo: 內部
68
+ # with gr.Blocks(title="Coqui TTS XTTS-v2 語音生成") as demo:
69
+ # # ... 其他 Tab ...
70
+
71
+ with gr.Tab("查看已上傳參考語音"):
72
+ gr.Markdown("### 已儲存的上傳參考語音檔案")
73
+ gr.Markdown("這些是您上傳的語音參考檔案。")
74
+
75
+ saved_uploaded_ref_files_output = gr.File(
76
+ label="上傳的參考語音檔案",
77
+ file_count="multiple", # 允許顯示多個檔案
78
+ interactive=False # 不允許用戶上傳,只用於顯示和下載
79
+ )
80
+ refresh_uploaded_ref_button = gr.Button("刷新參考語音列表")
81
+
82
+ # 應用程式載入時,自動載入檔案列表
83
+ # demo.load(list_uploaded_reference_files, outputs=[saved_uploaded_ref_files_output])
84
+ # 點擊刷新按鈕時,重新載入檔案列表
85
+ refresh_uploaded_ref_button.click(list_uploaded_reference_files, outputs=[saved_uploaded_ref_files_output])
86
+
87
+ # --- 結束 Gradio 介面中的相關部分 ---