Spaces:
Running
Running
File size: 1,947 Bytes
a00b67a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import random
import numpy as np
import torch
def linear2db(x, eps=1e-5, scale=20):
return scale * np.log10(x + eps)
def db2linear(x, eps=1e-5, scale=20):
return 10 ** (x / scale) - eps
def normalize_mag_spec(S, min_level_db=-100.0):
return torch.clamp((S - min_level_db) / -min_level_db, min=0.0, max=1.0)
def denormalize_mag_spec(S, min_level_db=-100.0):
return torch.clamp(S, min=0.0, max=1.0) * -min_level_db + min_level_db
def loudness_match_and_norm(audio1, audio2, meter):
lufs_1 = meter.integrated_loudness(audio1)
lufs_2 = meter.integrated_loudness(audio2)
if np.isinf(lufs_1) or np.isinf(lufs_2):
return audio1, audio2
else:
audio2 = audio2 * db2linear(lufs_1 - lufs_2)
return audio1, audio2
def loudness_normal_match_and_norm(audio1, audio2, meter):
lufs_1 = meter.integrated_loudness(audio1)
lufs_2 = meter.integrated_loudness(audio2)
if np.isinf(lufs_1) or np.isinf(lufs_2):
return audio1, audio2
else:
target_lufs = random.normalvariate(lufs_1, 6.0)
audio2 = audio2 * db2linear(target_lufs - lufs_2)
return audio1, audio2
def loudness_normal_match_and_norm_output_louder_first(audio1, audio2, meter):
lufs_1 = meter.integrated_loudness(audio1)
lufs_2 = meter.integrated_loudness(audio2)
if np.isinf(lufs_1) or np.isinf(lufs_2):
return audio1, audio2
else:
target_lufs = random.normalvariate(
lufs_1 - 2.0, 2.0
) # we want audio1 to be louder than audio2 about target_lufs_diff
audio2 = audio2 * db2linear(target_lufs - lufs_2)
return audio1, audio2
def loudnorm(audio, target_lufs, meter, eps=1e-5):
lufs = meter.integrated_loudness(audio)
if np.isinf(lufs):
return audio, 0.0
else:
adjusted_gain = target_lufs - lufs
audio = audio * db2linear(adjusted_gain, eps)
return audio, adjusted_gain
|