Spaces:
Sleeping
Sleeping
Update src/main.py
Browse files- src/main.py +26 -1
src/main.py
CHANGED
|
@@ -18,6 +18,8 @@ from pedalboard import Pedalboard, Reverb, Compressor, HighpassFilter
|
|
| 18 |
from pedalboard.io import AudioFile
|
| 19 |
from pydub import AudioSegment
|
| 20 |
|
|
|
|
|
|
|
| 21 |
from mdx import run_mdx
|
| 22 |
from rvc import Config, load_hubert, get_vc, rvc_infer
|
| 23 |
|
|
@@ -135,6 +137,27 @@ def convert_to_stereo(audio_path):
|
|
| 135 |
else:
|
| 136 |
return audio_path
|
| 137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
|
| 139 |
def pitch_shift(audio_path, pitch_change):
|
| 140 |
output_path = f'{os.path.splitext(audio_path)[0]}_p{pitch_change}.wav'
|
|
@@ -290,13 +313,15 @@ def song_cover_pipeline(main_vocals, backup_vocals, voice_model, pitch_change, k
|
|
| 290 |
if backup_vocals == "":
|
| 291 |
print("####### ENTRATO QUA, BACKUP VOCALS NON DATI IN INPUT ########")
|
| 292 |
ai_vocals_mixed_path = convert_to_stereo(ai_vocals_mixed_path)
|
|
|
|
| 293 |
return ai_vocals_mixed_path
|
| 294 |
|
| 295 |
display_progress('[~] Combining AI Vocals and Instrumentals...', 0.9, is_webui, progress)
|
| 296 |
combine_audio([ai_vocals_mixed_path, backup_vocals], ai_cover_path, main_gain, backup_gain, inst_gain, output_format)
|
| 297 |
|
| 298 |
ai_cover_path = convert_to_stereo(ai_cover_path)
|
| 299 |
-
|
|
|
|
| 300 |
return ai_cover_path
|
| 301 |
|
| 302 |
except Exception as e:
|
|
|
|
| 18 |
from pedalboard.io import AudioFile
|
| 19 |
from pydub import AudioSegment
|
| 20 |
|
| 21 |
+
import pyloudnorm as pyln
|
| 22 |
+
|
| 23 |
from mdx import run_mdx
|
| 24 |
from rvc import Config, load_hubert, get_vc, rvc_infer
|
| 25 |
|
|
|
|
| 137 |
else:
|
| 138 |
return audio_path
|
| 139 |
|
| 140 |
+
def normalize_audio(input_audio_path, output_audio_path):
|
| 141 |
+
y1, sr1 = librosa.load(inpud_audio_path, mono = False)
|
| 142 |
+
meter = pyln.Meter(sr1)
|
| 143 |
+
lufs_left1 = meter.integrated_loudness(y1[0])
|
| 144 |
+
lufs_right1 = meter.integrated_loudness(y1[1])
|
| 145 |
+
|
| 146 |
+
y2, sr2 = librosa.load(output_audio_path, mono = False)
|
| 147 |
+
meter2 = pyln.Meter(sr2)
|
| 148 |
+
lufs_left2 = meter2.integrated_loudness(y2[0])
|
| 149 |
+
lufs_right2 = meter2.integrated_loudness(y2[1])
|
| 150 |
+
|
| 151 |
+
y2_normalized_left = pyln.normalize.loudness(y2[0], lufs_left2, lufs_left1)
|
| 152 |
+
y2_normalized_right = pyln.normalize.loudness(y2[0], lufs_right2, lufs_right1)
|
| 153 |
+
|
| 154 |
+
y2_normalized = np.stack((y2_normalized_left, y2_normalized_right), axis=0)
|
| 155 |
+
|
| 156 |
+
output_path = f"{output_audio_path}_normalized.wav"
|
| 157 |
+
|
| 158 |
+
sf.write(output_path, y2_normalized.T, sr2)
|
| 159 |
+
|
| 160 |
+
return output_path
|
| 161 |
|
| 162 |
def pitch_shift(audio_path, pitch_change):
|
| 163 |
output_path = f'{os.path.splitext(audio_path)[0]}_p{pitch_change}.wav'
|
|
|
|
| 313 |
if backup_vocals == "":
|
| 314 |
print("####### ENTRATO QUA, BACKUP VOCALS NON DATI IN INPUT ########")
|
| 315 |
ai_vocals_mixed_path = convert_to_stereo(ai_vocals_mixed_path)
|
| 316 |
+
ai_vocals_mixed_path = normalize(main_vocals, ai_vocals_mixed_path)
|
| 317 |
return ai_vocals_mixed_path
|
| 318 |
|
| 319 |
display_progress('[~] Combining AI Vocals and Instrumentals...', 0.9, is_webui, progress)
|
| 320 |
combine_audio([ai_vocals_mixed_path, backup_vocals], ai_cover_path, main_gain, backup_gain, inst_gain, output_format)
|
| 321 |
|
| 322 |
ai_cover_path = convert_to_stereo(ai_cover_path)
|
| 323 |
+
ai_cover_path = normalize(main_vocals, ai_cover_path)
|
| 324 |
+
|
| 325 |
return ai_cover_path
|
| 326 |
|
| 327 |
except Exception as e:
|