__all__ = ["Normalize"]
from dataclasses import dataclass
import numpy as np
from voicebox.audio import Audio
from voicebox.effects import RemoveDcOffset
from voicebox.effects.effect import Effect
[docs]
@dataclass
class Normalize(Effect):
"""
Normalizes audio such that any DC offset is removed and
``max(abs(signal)) == max_amplitude`` (``1.0`` by default).
"""
max_amplitude: float = 1.0
remove_dc_offset: bool = True
[docs]
def apply(self, audio: Audio) -> Audio:
if self.remove_dc_offset:
remove_offset = RemoveDcOffset()
audio = remove_offset(audio)
max_value = np.abs(audio.signal).max()
if max_value > 0:
audio.signal *= self.max_amplitude / max_value
return audio