tee342 commited on
Commit
45077a2
·
verified ·
1 Parent(s): 55a311a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -4
app.py CHANGED
@@ -9,7 +9,9 @@ import subprocess
9
  import torch
10
  from demucs import pretrained
11
  from demucs.apply import apply_model
12
- from demucs.audio import load_audio, save_audio
 
 
13
 
14
  # Helper functions
15
  def audiosegment_to_array(audio):
@@ -72,14 +74,42 @@ def apply_treble_boost(audio, gain=10):
72
  # Vocal Isolation using Demucs
73
  def apply_vocal_isolation(audio_path):
74
  model = pretrained.get_model(name='htdemucs')
75
- wav = load_audio(audio_path)
76
  ref = wav.mean(0)
77
  wav -= ref[:, None]
78
  sources = apply_model(model, wav[None])[0]
79
  wav += ref[:, None]
80
- vocal_track = sources[3] # index 3 = vocals
 
 
 
81
  out_path = os.path.join(tempfile.gettempdir(), "vocals.wav")
82
- save_audio(vocal_track, out_path, samplerate=model.samplerate)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  return out_path
84
 
85
  # Apply selected effects in order
 
9
  import torch
10
  from demucs import pretrained
11
  from demucs.apply import apply_model
12
+ import torchaudio
13
+ import torch
14
+ from pathlib import Path
15
 
16
  # Helper functions
17
  def audiosegment_to_array(audio):
 
74
  # Vocal Isolation using Demucs
75
  def apply_vocal_isolation(audio_path):
76
  model = pretrained.get_model(name='htdemucs')
77
+ wav = load_track_local(audio_path, model.samplerate, channels=2) # stereo
78
  ref = wav.mean(0)
79
  wav -= ref[:, None]
80
  sources = apply_model(model, wav[None])[0]
81
  wav += ref[:, None]
82
+
83
+ # Get vocals (index 3)
84
+ vocal_track = sources[3].cpu()
85
+
86
  out_path = os.path.join(tempfile.gettempdir(), "vocals.wav")
87
+ save_track(out_path, vocal_track, model.samplerate)
88
+ return out_path
89
+
90
+
91
+ # Local copy of helper functions from demucs
92
+ def load_track(track, sample_rate, mono=True):
93
+ wav, sr = torchaudio.load(str(track))
94
+ if sr != sample_rate:
95
+ wav = torchaudio.functional.resample(wav, sr, sample_rate)
96
+ if mono and wav.shape[0] == 2:
97
+ wav = wav.mean(0)
98
+ return wav
99
+
100
+
101
+ def load_track_local(path, sample_rate, channels=2):
102
+ sig, rate = torchaudio.load(path)
103
+ if rate != sample_rate:
104
+ sig = torchaudio.functional.resample(sig, rate, sample_rate)
105
+ if channels == 1:
106
+ sig = sig.mean(0)
107
+ return sig
108
+
109
+
110
+ def save_track(path, wav, sample_rate):
111
+ path = Path(path)
112
+ torchaudio.save(str(path), wav, sample_rate)
113
  return out_path
114
 
115
  # Apply selected effects in order