ford442 commited on
Commit
f80309c
·
verified ·
1 Parent(s): f6deefe

Update demos/musicgen_app.py

Browse files
Files changed (1) hide show
  1. demos/musicgen_app.py +44 -13
demos/musicgen_app.py CHANGED
@@ -7,7 +7,7 @@ import subprocess as sp
7
  import sys
8
  import time
9
  import typing as tp
10
- from tempfile import NamedTemporaryFile
11
 
12
  from einops import rearrange
13
  import torch
@@ -18,11 +18,11 @@ from audiocraft.data.audio import audio_write
18
  from audiocraft.models.encodec import InterleaveStereoCompressionModel
19
  from audiocraft.models import MusicGen, MultiBandDiffusion
20
  import multiprocessing as mp
 
21
 
22
  # --- Utility Functions and Classes ---
23
- import warnings # <--- Import the warnings module!
24
 
25
- class FileCleaner: # Unchanged
26
  def __init__(self, file_lifetime: float = 3600):
27
  self.file_lifetime = file_lifetime
28
  self.files = []
@@ -42,15 +42,38 @@ class FileCleaner: # Unchanged
42
  break
43
  file_cleaner = FileCleaner()
44
 
45
- def make_waveform(*args, **kwargs): # Unchanged
46
- be = time.time()
47
- with warnings.catch_warnings():
48
- warnings.simplefilter('ignore')
49
- out = gr.make_waveform(*args, **kwargs)
50
- print("Make a video took", time.time() - be)
51
- return out
52
 
53
- # --- Worker Process --- (Modified for conditional use)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  def model_worker(model_name: str, task_queue: mp.Queue, result_queue: mp.Queue):
56
  """
@@ -257,8 +280,12 @@ def predict_full(model, model_path, use_mbd, text, melody, duration, topk, topp,
257
  loudness_headroom_db=16, loudness_compressor=True, add_suffix=False
258
  )
259
  wav_paths.append(file.name)
260
- video_paths.append(make_waveform(file.name)) # Make and clean up video
 
 
261
  file_cleaner.add(file.name)
 
 
262
 
263
  # Save MBD output if used
264
  if diffusion_wav is not None:
@@ -268,8 +295,12 @@ def predict_full(model, model_path, use_mbd, text, melody, duration, topk, topp,
268
  loudness_headroom_db=16, loudness_compressor=True, add_suffix=False
269
  )
270
  wav_paths.append(file.name)
271
- video_paths.append(make_waveform(file.name)) # Make and clean up video
 
 
272
  file_cleaner.add(file.name)
 
 
273
  # Shutdown predictor to prevent hanging processes!
274
 
275
  if not predictor.is_daemon: # Important!
 
7
  import sys
8
  import time
9
  import typing as tp
10
+ from tempfile import NamedTemporaryFile, gettempdir
11
 
12
  from einops import rearrange
13
  import torch
 
18
  from audiocraft.models.encodec import InterleaveStereoCompressionModel
19
  from audiocraft.models import MusicGen, MultiBandDiffusion
20
  import multiprocessing as mp
21
+ import warnings
22
 
23
  # --- Utility Functions and Classes ---
 
24
 
25
+ class FileCleaner:
26
  def __init__(self, file_lifetime: float = 3600):
27
  self.file_lifetime = file_lifetime
28
  self.files = []
 
42
  break
43
  file_cleaner = FileCleaner()
44
 
 
 
 
 
 
 
 
45
 
46
+ def convert_wav_to_mp4(wav_path, output_path=None):
47
+ """Converts a WAV file to a waveform MP4 video using ffmpeg."""
48
+ if output_path is None:
49
+ # Create output path in the same directory as the input
50
+ output_path = Path(wav_path).with_suffix(".mp4")
51
+ try:
52
+ command = [
53
+ "ffmpeg",
54
+ "-y", # Overwrite output file if it exists
55
+ "-i", str(wav_path),
56
+ "-filter_complex",
57
+ "[0:a]showwaves=s=1280x202:mode=line,format=yuv420p[v]", # Waveform filter
58
+ "-map", "[v]",
59
+ "-map", "0:a",
60
+ "-c:v", "libx264", # Video codec
61
+ "-c:a", "aac", # Audio codec
62
+ "-preset", "fast", # Important, don't do veryslow.
63
+ str(output_path),
64
+ ]
65
+
66
+ process = sp.run(command, capture_output=True, text=True, check=True)
67
+ return str(output_path)
68
+
69
+ except sp.CalledProcessError as e:
70
+ print(f"Error in ffmpeg conversion: {e}")
71
+ print(f"ffmpeg stdout: {e.stdout}")
72
+ print(f"ffmpeg stderr: {e.stderr}")
73
+ raise # Re-raise the exception to be caught by Gradio
74
+
75
+
76
+ # --- Worker Process ---
77
 
78
  def model_worker(model_name: str, task_queue: mp.Queue, result_queue: mp.Queue):
79
  """
 
280
  loudness_headroom_db=16, loudness_compressor=True, add_suffix=False
281
  )
282
  wav_paths.append(file.name)
283
+ # Make and clean up video:
284
+ video_path = convert_wav_to_mp4(file.name)
285
+ video_paths.append(video_path)
286
  file_cleaner.add(file.name)
287
+ file_cleaner.add(video_path)
288
+
289
 
290
  # Save MBD output if used
291
  if diffusion_wav is not None:
 
295
  loudness_headroom_db=16, loudness_compressor=True, add_suffix=False
296
  )
297
  wav_paths.append(file.name)
298
+ # Make and clean up video:
299
+ video_path = convert_wav_to_mp4(file.name)
300
+ video_paths.append(video_path)
301
  file_cleaner.add(file.name)
302
+ file_cleaner.add(video_path)
303
+
304
  # Shutdown predictor to prevent hanging processes!
305
 
306
  if not predictor.is_daemon: # Important!