Spaces:
Running
Running
File size: 2,407 Bytes
3e89400 8f82d17 3e89400 8f82d17 3e89400 8f82d17 3e89400 8f82d17 3e89400 7c82cab b8972a5 7c82cab 3e89400 b8972a5 3e89400 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import os
import uuid
import zipfile
import gradio as gr
from tqdm import tqdm
from datetime import datetime
from pydub import AudioSegment
def convert_audio(input_files, output_format, session_id):
output_files = []
for input_file in tqdm(input_files, desc="Converting 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 tqdm(output_files, desc="Creating ZIP"):
zipf.write(file, os.path.basename(file))
return zip_filename
def process_files(files, output_format, progress=gr.Progress(track_tqdm=True)):
# Generate a unique session ID using timestamp and UUID
session_id = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_" + str(uuid.uuid4())[:8]
print(f"\nStarting conversion process for session: {session_id}")
print(f"Total files to convert: {len(files)}")
output_files = convert_audio(files, output_format, session_id)
zip_filename = create_zip(output_files, session_id)
print(f"Processing completed!")
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()
|