Spaces:
Running
Running
import gradio as gr | |
import ffmpeg | |
import os | |
import tempfile | |
import re | |
gr.themes.Soft() | |
# Daftar format audio yang didukung | |
audio_formats = [ | |
'mp3', 'wav', 'aac', 'flac', 'ogg', 'm4a', 'alac', 'wma', 'aiff', 'opus', | |
'ape', 'caf', 'pcm', 'dts', 'tta', 'amr', 'mid', 'spx', 'wv', 'ra', 'tak' | |
] | |
def sanitize_filename(filename): | |
"""Sanitasi nama file dengan mengganti karakter khusus dan spasi.""" | |
filename = re.sub(r'[^a-zA-Z0-9_.-]', '_', filename) # Ganti karakter yang tidak valid dengan '_' | |
return filename | |
def convert_audio(audio_file, target_format): | |
try: | |
# Membuat direktori sementara untuk file yang diunggah | |
temp_dir = tempfile.mkdtemp() | |
# Sanitasi nama file dan simpan audio yang diunggah ke direktori sementara | |
base_name = os.path.splitext(os.path.basename(audio_file.name))[0] | |
sanitized_base_name = sanitize_filename(base_name) | |
audio_path = os.path.join(temp_dir, f"{sanitized_base_name}.mp3") # Menyimpan sebagai mp3 secara default | |
with open(audio_path, "wb") as f: | |
f.write(audio_file.read()) # Menyimpan file audio yang diunggah | |
output_file = f"{sanitized_base_name}_converted.{target_format.lower()}" | |
ffmpeg.input(audio_path).output(output_file).run() # Mengonversi audio ke format yang diinginkan | |
return output_file | |
except Exception as e: | |
return f"Error: {e}" | |
# Antarmuka Gradio dengan tema kustom untuk menyembunyikan footer | |
interface = gr.Interface( | |
fn=convert_audio, | |
inputs=[ | |
gr.File(label="Upload Audio File", type="file", file_types=['.mp3', '.wav', '.aac', '.flac', '.ogg', '.m4a', '.alac', '.wma', '.aiff', '.opus']), | |
gr.Dropdown(label="Select Target Format", choices=audio_formats) | |
], | |
outputs=gr.File(label="Converted Audio File"), | |
title="Audio Format Converter", | |
description="Upload an audio file and select a target format for conversion. Supports multiple formats.", | |
css="footer {visibility: hidden}" | |
) | |
# Jalankan aplikasi | |
if __name__ == "__main__": | |
interface.launch() | |