Adityadn's picture
Update app.py
d2011d1 verified
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 convert_audio(audio_file, target_format):
try:
# Pastikan ffmpeg sudah terinstal
ffmpeg.probe(audio_file) # Menggunakan 'audio_file' yang berisi path file
# Membuat direktori sementara untuk file yang diunggah
temp_dir = tempfile.mkdtemp()
# Sanitasi nama file dan simpan audio yang diunggah ke direktori sementara
file_name = os.path.basename(audio_file)
audio_path = os.path.join(temp_dir, file_name) # Menyimpan sebagai mp3 secara default
base_name = os.path.splitext(file_name)[0]
# Menyimpan file audio yang diunggah ke direktori sementara
with open(audio_path, "wb") as f:
with open(audio_file, 'rb') as input_file:
f.write(input_file.read()) # Menyimpan file audio yang diunggah
# Tentukan output file berdasarkan format target
output_file = f"flowly_ai_audio_converter_{base_name}.{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
return f"FFMPEG Error: {e.stderr.decode()}"
except Exception as e:
# Tangkap kesalahan lain dan tampilkan pesan error lebih rinci
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="filepath", file_types=[f'.{format.lower()}' 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 audio and choose a target format.",
css="footer {visibility: hidden}"
)
# Jalankan aplikasi
if __name__ == "__main__":
interface.launch()