Spaces:
Running
Running
File size: 2,083 Bytes
bf9c0e9 |
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 |
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()
|