Spaces:
Running
Running
import os | |
import uuid | |
import zipfile | |
import gradio as gr | |
from datetime import datetime | |
from pydub import AudioSegment | |
def convert_audio(input_files, output_format, session_id): | |
output_files = [] | |
for input_file in input_files: | |
# Load the audio file | |
audio = AudioSegment.from_file(input_file) | |
# Create the output filename | |
base_name = os.path.splitext(os.path.basename(input_file))[0] | |
output_filename = f"{base_name}.{output_format}" | |
output_path = os.path.join(session_id, output_filename) | |
# Ensure the output directory exists | |
os.makedirs(session_id, exist_ok=True) | |
# Export the audio file to the desired format | |
audio.export(output_path, format=output_format) | |
output_files.append(output_path) | |
return output_files | |
def create_zip(output_files, session_id): | |
zip_filename = f"{session_id}.zip" | |
with zipfile.ZipFile(zip_filename, 'w') as zipf: | |
for file in output_files: | |
zipf.write(file, os.path.basename(file)) | |
return zip_filename | |
def process_files(files, output_format): | |
# Generate a unique session ID using timestamp and UUID | |
session_id = datetime.now().strftime("%Y%m%d_%H%M%S") + "_" + str(uuid.uuid4())[:8] | |
output_files = convert_audio(files, output_format, session_id) | |
zip_filename = create_zip(output_files, session_id) | |
return zip_filename | |
# List of supported audio formats | |
audio_formats = [ | |
"wav", "flac", "mp3", "ogg", "aac", "m4a", "aiff", "wma", "opus", "ac3", | |
"amr", "dts", "mka", "au", "ra", "voc", "iff", "sd2", "wv", "caf", | |
"mpc", "tta", "spx", "gsm" | |
] | |
with gr.Blocks() as demo: | |
gr.Markdown("## Audio File Converter") | |
with gr.Row(): | |
file_input = gr.Files(file_types=["audio"], height=160) | |
format_choice = gr.Dropdown(choices=audio_formats, label="Output Format", value="mp3") | |
submit_button = gr.Button("Convert") | |
output_file = gr.File(label="Download Converted File") | |
submit_button.click(process_files, inputs=[file_input, format_choice], outputs=output_file) | |
if __name__ == "__main__": | |
demo.launch() | |