CoquiTTS / upload reference
Ryanus's picture
Create upload reference
774228a verified
import os
import datetime
import shutil
import gradio as gr
import tempfile # 假設這是用於處理臨時檔案的庫
# --- 自動儲存設定 ---
# 儲存上傳的參考語音檔案的資料夾
SAVE_UPLOADED_REFERENCES_DIR = "uploaded_references"
# 確保儲存資料夾存在
os.makedirs(SAVE_UPLOADED_REFERENCES_DIR, exist_ok=True)
# --- 結束自動儲存設定 ---
# --- generate_speech 函數中的相關部分 ---
# 假設這是 generate_speech 函數的定義
# def generate_speech(text, language, uploaded_speaker_audio_path):
# # ... 其他邏輯 ...
# --- 決定使用哪個語音參考檔案 ---
speaker_wav_to_use = uploaded_speaker_audio_path
# 如果用戶上傳了參考語音,則儲存它
if uploaded_speaker_audio_path:
try:
timestamp_ref = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
# 獲取原始檔案的副檔名,例如 .wav
original_ext = os.path.splitext(uploaded_speaker_audio_path)[1]
# 構建儲存檔案的名稱,包含時間戳和原始副檔名
saved_ref_file_name = f"{timestamp_ref}_uploaded_ref{original_ext}"
# 構建儲存檔案的完整路徑
saved_ref_file_path = os.path.join(SAVE_UPLOADED_REFERENCES_DIR, saved_ref_file_name)
# 將上傳的臨時檔案複製到指定的儲存目錄
shutil.copy(uploaded_speaker_audio_path, saved_ref_file_path)
print(f"上傳的參考語音已儲存到:{saved_ref_file_path}")
except Exception as e:
print(f"儲存上傳的參考語音時發生錯誤: {e}")
# 即使儲存參考語音失敗,也繼續生成語音
print(f"使用上傳的語音參考檔案: {speaker_wav_to_use}")
else: # 如果用戶沒有上傳檔案,則使用預設檔案
# ... 處理預設檔案的邏輯 ...
pass # 這裡省略了預設檔案的處理,因為重點是上傳參考語音的儲存
# --- 結束決定 ---
# ... 後續的語音生成和生成的語音儲存邏輯 ...
# --- 結束 generate_speech 函數中的相關部分 ---
# --- 用於查看已上傳參考語音的函數 ---
def list_uploaded_reference_files():
"""掃描上傳參考語音資料夾,返回所有 .wav 檔案的完整路徑列表。"""
ref_files = []
if os.path.exists(SAVE_UPLOADED_REFERENCES_DIR) and os.path.isdir(SAVE_UPLOADED_REFERENCES_DIR):
for filename in os.listdir(SAVE_UPLOADED_REFERENCES_DIR):
if filename.lower().endswith(".wav"):
# 返回完整路徑,以便 Gradio 可以正確顯示和提供下載
ref_files.append(os.path.join(SAVE_UPLOADED_REFERENCES_DIR, filename))
# 按修改時間倒序排列,最新檔案在前
ref_files.sort(key=os.path.getmtime, reverse=True)
return ref_files
# --- 結束查看已上傳參考語音的函數 ---
# --- Gradio 介面中的相關部分 ---
# 假設這是 gr.Blocks(title="...") as demo: 內部
# with gr.Blocks(title="Coqui TTS XTTS-v2 語音生成") as demo:
# # ... 其他 Tab ...
with gr.Tab("查看已上傳參考語音"):
gr.Markdown("### 已儲存的上傳參考語音檔案")
gr.Markdown("這些是您上傳的語音參考檔案。")
saved_uploaded_ref_files_output = gr.File(
label="上傳的參考語音檔案",
file_count="multiple", # 允許顯示多個檔案
interactive=False # 不允許用戶上傳,只用於顯示和下載
)
refresh_uploaded_ref_button = gr.Button("刷新參考語音列表")
# 應用程式載入時,自動載入檔案列表
# demo.load(list_uploaded_reference_files, outputs=[saved_uploaded_ref_files_output])
# 點擊刷新按鈕時,重新載入檔案列表
refresh_uploaded_ref_button.click(list_uploaded_reference_files, outputs=[saved_uploaded_ref_files_output])
# --- 結束 Gradio 介面中的相關部分 ---