Politrees commited on
Commit
d664460
1 Parent(s): 1eade7f

Update src/audio_effects.py

Browse files
Files changed (1) hide show
  1. src/audio_effects.py +16 -6
src/audio_effects.py CHANGED
@@ -28,6 +28,14 @@ def combine_audio(vocal_path, instrumental_path, output_path, vocal_gain, instru
28
  combined = vocal.overlay(instrumental)
29
  combined.export(output_path, format=output_format)
30
 
 
 
 
 
 
 
 
 
31
  def add_audio_effects(vocal_audio_path, instrumental_audio_path, reverb_rm_size, reverb_wet, reverb_dry, reverb_damping, reverb_width,
32
  low_shelf_gain, high_shelf_gain, compressor_ratio, compressor_threshold, noise_gate_threshold, noise_gate_ratio,
33
  noise_gate_attack, noise_gate_release, chorus_rate_hz, chorus_depth, chorus_centre_delay_ms, chorus_feedback,
@@ -36,6 +44,10 @@ def add_audio_effects(vocal_audio_path, instrumental_audio_path, reverb_rm_size,
36
  if not vocal_audio_path or not instrumental_audio_path:
37
  raise ValueError("Оба пути к аудиофайлам должны быть заполнены.")
38
 
 
 
 
 
39
  display_progress(0.2, "Применение аудиоэффектов к вокалу...", progress)
40
  board = Pedalboard(
41
  [
@@ -49,19 +61,17 @@ def add_audio_effects(vocal_audio_path, instrumental_audio_path, reverb_rm_size,
49
  ]
50
  )
51
 
52
- vocal_output_path = f'Vocal_Effects.wav'
53
- with AudioFile(vocal_audio_path) as f:
54
  with AudioFile(vocal_output_path, 'w', f.samplerate, 2) as o:
55
  while f.tell() < f.frames:
56
  chunk = f.read(int(f.samplerate))
57
- chunk = np.tile(chunk, (2, 1)).T
58
  effected = board(chunk, f.samplerate, reset=False)
59
  o.write(effected)
60
 
61
  display_progress(0.5, "Объединение вокала и инструментальной части...", progress)
62
  output_dir = os.path.join(BASE_DIR, 'processed_output')
63
- if not os.path.exists(output_dir):
64
- os.makedirs(output_dir)
65
  combined_output_path = os.path.join(output_dir, f'AiCover_combined.{output_format}')
66
 
67
  if os.path.exists(combined_output_path):
@@ -71,4 +81,4 @@ def add_audio_effects(vocal_audio_path, instrumental_audio_path, reverb_rm_size,
71
 
72
  display_progress(1.0, "Готово!", progress)
73
 
74
- return combined_output_path
 
28
  combined = vocal.overlay(instrumental)
29
  combined.export(output_path, format=output_format)
30
 
31
+ def convert_to_stereo(input_path, output_path):
32
+ y, sr = librosa.load(input_path, sr=None, mono=False)
33
+ if y.ndim == 1:
34
+ y = np.vstack([y, y])
35
+ elif y.ndim > 2:
36
+ y = y[:2, :]
37
+ sf.write(output_path, y.T, sr, format='WAV')
38
+
39
  def add_audio_effects(vocal_audio_path, instrumental_audio_path, reverb_rm_size, reverb_wet, reverb_dry, reverb_damping, reverb_width,
40
  low_shelf_gain, high_shelf_gain, compressor_ratio, compressor_threshold, noise_gate_threshold, noise_gate_ratio,
41
  noise_gate_attack, noise_gate_release, chorus_rate_hz, chorus_depth, chorus_centre_delay_ms, chorus_feedback,
 
44
  if not vocal_audio_path or not instrumental_audio_path:
45
  raise ValueError("Оба пути к аудиофайлам должны быть заполнены.")
46
 
47
+ # Convert vocal file to stereo if necessary
48
+ stereo_vocal_path = 'Vocal_Stereo.wav'
49
+ convert_to_stereo(vocal_audio_path, stereo_vocal_path)
50
+
51
  display_progress(0.2, "Применение аудиоэффектов к вокалу...", progress)
52
  board = Pedalboard(
53
  [
 
61
  ]
62
  )
63
 
64
+ vocal_output_path = os.path.join(BASE_DIR, 'Vocal_Effects.wav')
65
+ with AudioFile(stereo_vocal_path) as f:
66
  with AudioFile(vocal_output_path, 'w', f.samplerate, 2) as o:
67
  while f.tell() < f.frames:
68
  chunk = f.read(int(f.samplerate))
 
69
  effected = board(chunk, f.samplerate, reset=False)
70
  o.write(effected)
71
 
72
  display_progress(0.5, "Объединение вокала и инструментальной части...", progress)
73
  output_dir = os.path.join(BASE_DIR, 'processed_output')
74
+ os.makedirs(output_dir, exist_ok=True)
 
75
  combined_output_path = os.path.join(output_dir, f'AiCover_combined.{output_format}')
76
 
77
  if os.path.exists(combined_output_path):
 
81
 
82
  display_progress(1.0, "Готово!", progress)
83
 
84
+ return combined_output_path