Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -6,27 +6,28 @@ from tqdm import tqdm
|
|
6 |
from datetime import datetime
|
7 |
from pydub import AudioSegment
|
8 |
|
9 |
-
|
10 |
-
def convert_audio(input_files, output_format, session_id):
|
11 |
output_files = []
|
|
|
|
|
12 |
for input_file in tqdm(input_files, desc="Converting files"):
|
13 |
-
# Load the audio file
|
14 |
audio = AudioSegment.from_file(input_file)
|
15 |
-
|
16 |
-
# Create the output filename
|
17 |
base_name = os.path.splitext(os.path.basename(input_file))[0]
|
18 |
output_filename = f"{base_name}.{output_format}"
|
19 |
output_path = os.path.join(session_id, output_filename)
|
20 |
-
|
21 |
-
# Ensure the output directory exists
|
22 |
os.makedirs(session_id, exist_ok=True)
|
23 |
-
|
24 |
-
# Export the audio file to the desired format
|
25 |
audio.export(output_path, format=output_format)
|
26 |
output_files.append(output_path)
|
27 |
|
28 |
-
|
|
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
def create_zip(output_files, session_id):
|
32 |
zip_filename = f"{session_id}.zip"
|
@@ -35,34 +36,33 @@ def create_zip(output_files, session_id):
|
|
35 |
zipf.write(file, os.path.basename(file))
|
36 |
return zip_filename
|
37 |
|
38 |
-
|
39 |
-
def process_files(files, output_format, progress=gr.Progress(track_tqdm=True)):
|
40 |
-
# Generate a unique session ID using timestamp and UUID
|
41 |
session_id = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_" + str(uuid.uuid4())[:8]
|
42 |
print(f"\nStarting conversion process for session: {session_id}")
|
43 |
print(f"Total files to convert: {len(files)} to {output_format}")
|
44 |
-
output_files = convert_audio(files, output_format, session_id)
|
45 |
zip_filename = create_zip(output_files, session_id)
|
46 |
print(f"Processing completed!")
|
47 |
return zip_filename
|
48 |
|
49 |
-
|
50 |
-
# List of supported audio formats
|
51 |
audio_formats = [
|
52 |
"wav", "flac", "mp3", "ogg", "aac", "m4a", "aiff", "wma", "opus", "ac3",
|
53 |
"amr", "dts", "mka", "au", "ra", "voc", "iff", "sd2", "wv", "caf",
|
54 |
"mpc", "tta", "spx", "gsm"
|
55 |
]
|
56 |
|
57 |
-
|
58 |
with gr.Blocks() as demo:
|
59 |
gr.Markdown("## Audio File Converter")
|
60 |
with gr.Row():
|
61 |
file_input = gr.Files(file_types=["audio"], height=160)
|
62 |
-
|
|
|
|
|
|
|
|
|
63 |
submit_button = gr.Button("Convert")
|
64 |
output_file = gr.File(label="Download Converted File")
|
65 |
-
submit_button.click(process_files, inputs=[file_input, format_choice], outputs=output_file)
|
66 |
|
67 |
if __name__ == "__main__":
|
68 |
demo.launch()
|
|
|
6 |
from datetime import datetime
|
7 |
from pydub import AudioSegment
|
8 |
|
9 |
+
def convert_audio(input_files, output_format, session_id, merge_files, gap_duration):
|
|
|
10 |
output_files = []
|
11 |
+
merged_audio = AudioSegment.silent(duration=0)
|
12 |
+
|
13 |
for input_file in tqdm(input_files, desc="Converting files"):
|
|
|
14 |
audio = AudioSegment.from_file(input_file)
|
|
|
|
|
15 |
base_name = os.path.splitext(os.path.basename(input_file))[0]
|
16 |
output_filename = f"{base_name}.{output_format}"
|
17 |
output_path = os.path.join(session_id, output_filename)
|
|
|
|
|
18 |
os.makedirs(session_id, exist_ok=True)
|
|
|
|
|
19 |
audio.export(output_path, format=output_format)
|
20 |
output_files.append(output_path)
|
21 |
|
22 |
+
if merge_files:
|
23 |
+
merged_audio += audio + AudioSegment.silent(duration=gap_duration)
|
24 |
|
25 |
+
if merge_files:
|
26 |
+
merged_output_path = os.path.join(session_id, f"merged_output.{output_format}")
|
27 |
+
merged_audio.export(merged_output_path, format=output_format)
|
28 |
+
output_files.append(merged_output_path)
|
29 |
+
|
30 |
+
return output_files
|
31 |
|
32 |
def create_zip(output_files, session_id):
|
33 |
zip_filename = f"{session_id}.zip"
|
|
|
36 |
zipf.write(file, os.path.basename(file))
|
37 |
return zip_filename
|
38 |
|
39 |
+
def process_files(files, output_format, merge_files, gap_duration, progress=gr.Progress(track_tqdm=True)):
|
|
|
|
|
40 |
session_id = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_" + str(uuid.uuid4())[:8]
|
41 |
print(f"\nStarting conversion process for session: {session_id}")
|
42 |
print(f"Total files to convert: {len(files)} to {output_format}")
|
43 |
+
output_files = convert_audio(files, output_format, session_id, merge_files, gap_duration)
|
44 |
zip_filename = create_zip(output_files, session_id)
|
45 |
print(f"Processing completed!")
|
46 |
return zip_filename
|
47 |
|
|
|
|
|
48 |
audio_formats = [
|
49 |
"wav", "flac", "mp3", "ogg", "aac", "m4a", "aiff", "wma", "opus", "ac3",
|
50 |
"amr", "dts", "mka", "au", "ra", "voc", "iff", "sd2", "wv", "caf",
|
51 |
"mpc", "tta", "spx", "gsm"
|
52 |
]
|
53 |
|
|
|
54 |
with gr.Blocks() as demo:
|
55 |
gr.Markdown("## Audio File Converter")
|
56 |
with gr.Row():
|
57 |
file_input = gr.Files(file_types=["audio"], height=160)
|
58 |
+
with gr.Column():
|
59 |
+
format_choice = gr.Dropdown(choices=audio_formats, label="Output Format", value="mp3")
|
60 |
+
with gr.Row():
|
61 |
+
merge_files_checkbox = gr.Checkbox(label="Merge all files into one")
|
62 |
+
gap_slider = gr.Slider(minimum=0, maximum=5000, step=100, value=500, label="Gap between files (ms)")
|
63 |
submit_button = gr.Button("Convert")
|
64 |
output_file = gr.File(label="Download Converted File")
|
65 |
+
submit_button.click(process_files, inputs=[file_input, format_choice, merge_files_checkbox, gap_slider], outputs=output_file)
|
66 |
|
67 |
if __name__ == "__main__":
|
68 |
demo.launch()
|