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 = sorted(['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: | |
| # Pastikan ffmpeg sudah terinstal | |
| ffmpeg.probe(audio_file) # Cek keberadaan ffmpeg dan file yang valid | |
| # 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 ffmpeg.Error as e: | |
| # Tangkap kesalahan ffmpeg dan tampilkan pesan error lebih rinci | |
| st.write(f"FFMPEG Error: {e.stderr.decode()}") | |
| except Exception as e: | |
| # Tangkap kesalahan lain dan tampilkan pesan error lebih rinci | |
| st.write(f"Error: {e}") | |
| return null | |
| # Antarmuka Gradio dengan tema kustom untuk menyembunyikan footer | |
| interface = gr.Interface( | |
| fn=convert_audio, | |
| inputs=[ | |
| gr.File(label="Upload Audio File", type="filepath", file_types=[f'.{format}' for format in audio_formats]) | |
| 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() | |