Spaces:
Sleeping
Sleeping
| import os | |
| from typing import List, Optional | |
| import gradio as gr | |
| from huggingface_hub import HfApi, hf_hub_download, hf_hub_url | |
| DATASET_REPO = os.getenv("DATASET_REPO", "trung06042002/TTS") | |
| REPO_TYPE = "dataset" | |
| api = HfApi() | |
| def list_audio_files() -> List[str]: | |
| files = api.list_repo_files(repo_id=DATASET_REPO, repo_type=REPO_TYPE) | |
| audio_ext = (".mp3", ".wav", ".m4a", ".flac", ".ogg") | |
| audios = [f for f in files if f.lower().endswith(audio_ext)] | |
| audios.sort(reverse=True) | |
| return audios | |
| def make_download_link(path_in_repo: str) -> str: | |
| url = hf_hub_url(repo_id=DATASET_REPO, repo_type=REPO_TYPE, filename=path_in_repo) | |
| return f"✅ **Download:** {url}?download=1" | |
| def load_audio(path_in_repo: str): | |
| if not path_in_repo: | |
| return None, "Chọn một file audio." | |
| local_path = hf_hub_download( | |
| repo_id=DATASET_REPO, | |
| repo_type=REPO_TYPE, | |
| filename=path_in_repo, | |
| ) | |
| return local_path, make_download_link(path_in_repo) | |
| def on_refresh(): | |
| files = list_audio_files() | |
| return gr.Dropdown(choices=files, value=(files[0] if files else None)) | |
| def on_load(request: gr.Request): | |
| files = list_audio_files() | |
| qp = request.query_params if request else {} | |
| wanted: Optional[str] = qp.get("file") | |
| if wanted and wanted in files: | |
| audio_path, md = load_audio(wanted) | |
| return gr.Dropdown(choices=files, value=wanted), audio_path, md | |
| # default: file mới nhất | |
| if files: | |
| audio_path, md = load_audio(files[0]) | |
| return gr.Dropdown(choices=files, value=files[0]), audio_path, md | |
| return gr.Dropdown(choices=[], value=None), None, "Chưa có file audio trong dataset." | |
| with gr.Blocks(title="TTS Player") as demo: | |
| gr.Markdown(f"# 🎧 TTS Player\nDataset: `{DATASET_REPO}`") | |
| with gr.Row(): | |
| dd = gr.Dropdown(label="Audio files", choices=[], value=None, interactive=True) | |
| btn = gr.Button("🔄 Refresh") | |
| audio = gr.Audio(label="Player", type="filepath") | |
| download_md = gr.Markdown() | |
| btn.click(on_refresh, inputs=None, outputs=dd) | |
| dd.change(load_audio, inputs=dd, outputs=[audio, download_md]) | |
| demo.load(on_load, inputs=None, outputs=[dd, audio, download_md]) | |
| demo.launch() | |