|
|
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) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"): |
|
|
|
|
|
ref_files.append(os.path.join(SAVE_UPLOADED_REFERENCES_DIR, filename)) |
|
|
|
|
|
ref_files.sort(key=os.path.getmtime, reverse=True) |
|
|
return ref_files |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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("刷新參考語音列表") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
refresh_uploaded_ref_button.click(list_uploaded_reference_files, outputs=[saved_uploaded_ref_files_output]) |
|
|
|
|
|
|
|
|
|