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=["audio/*"]), # Menggunakan "audio/*" untuk memvalidasi file audio 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()