|
import gradio as gr |
|
from pathlib import Path |
|
import os |
|
|
|
directory = "./audios" |
|
|
|
|
|
def scan_audio_folder(): |
|
"""Scan directory for audio files and return list of paths.""" |
|
supported_formats = ['.mp3', '.wav', '.m4a'] |
|
audio_files = [] |
|
|
|
try: |
|
for root, _, files in os.walk(directory): |
|
for file in files: |
|
if os.path.splitext(file)[1].lower() in supported_formats: |
|
audio_files.append(os.path.join(root, file)) |
|
return sorted(audio_files) |
|
except Exception as e: |
|
print(f"Error scanning directory: {str(e)}") |
|
return [] |
|
|
|
def update_audio_list(folder_path): |
|
"""Update audio dropdown based on selected folder.""" |
|
audio_files = scan_audio_folder(folder_path) |
|
return gr.Dropdown.update(choices=[Path(f).name for f in audio_files]) |
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
|
folder_input = gr.Textbox(label="Audio Folder Path") |
|
|
|
|
|
audio_dropdown = gr.Dropdown(label="Select Audio File") |
|
|
|
|
|
audio_player = gr.Audio(label="Audio Player") |
|
|
|
|
|
folder_input.change( |
|
fn=update_audio_list, |
|
inputs=[folder_input], |
|
outputs=[audio_dropdown] |
|
) |
|
|
|
audio_dropdown.change( |
|
fn=lambda x, f: os.path.join(f, x), |
|
inputs=[audio_dropdown, folder_input], |
|
outputs=[audio_player] |
|
) |
|
|
|
|
|
demo.append(gr.Column([ |
|
folder_input, |
|
audio_dropdown, |
|
audio_player |
|
])) |
|
|
|
if __name__ == "__main__": |
|
demo.launch(debug=True) |