Politrees commited on
Commit
9d2ec4b
·
verified ·
1 Parent(s): 9b50ad7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -19
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
- return output_files
 
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
- format_choice = gr.Dropdown(choices=audio_formats, label="Output Format", value="mp3")
 
 
 
 
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()