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