parent
a5dcd23bf2
commit
115a06bb37
@ -0,0 +1,50 @@
|
|||||||
|
"""Contain the online bayesian normalization augmentation model."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from data_utils.augmentor.base import AugmentorBase
|
||||||
|
|
||||||
|
|
||||||
|
class OnlineBayesianNormalizationAugmentor(AugmentorBase):
|
||||||
|
"""Augmentation model for adding online bayesian normalization.
|
||||||
|
|
||||||
|
:param rng: Random generator object.
|
||||||
|
:type rng: random.Random
|
||||||
|
:param target_db: Target RMS value in decibels.
|
||||||
|
:type target_db: float
|
||||||
|
:param prior_db: Prior RMS estimate in decibels.
|
||||||
|
:type prior_db: float
|
||||||
|
:param prior_samples: Prior strength in number of samples.
|
||||||
|
:type prior_samples: int
|
||||||
|
:param startup_delay: Default 0.0s. If provided, this function will
|
||||||
|
accrue statistics for the first startup_delay
|
||||||
|
seconds before applying online normalization.
|
||||||
|
:type starup_delay: float.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
rng,
|
||||||
|
target_db,
|
||||||
|
prior_db,
|
||||||
|
prior_samples,
|
||||||
|
startup_delay=0.0):
|
||||||
|
self._target_db = target_db
|
||||||
|
self._prior_db = prior_db
|
||||||
|
self._prior_samples = prior_samples
|
||||||
|
self._startup_delay = startup_delay
|
||||||
|
self._rng = rng
|
||||||
|
self._startup_delay=startup_delay
|
||||||
|
|
||||||
|
def transform_audio(self, audio_segment):
|
||||||
|
"""Normalizes the input audio using the online Bayesian approach.
|
||||||
|
|
||||||
|
Note that this is an in-place transformation.
|
||||||
|
|
||||||
|
:param audio_segment: Audio segment to add effects to.
|
||||||
|
:type audio_segment: AudioSegment|SpeechSegment
|
||||||
|
"""
|
||||||
|
audio_segment.normalize_online_bayesian(self._target_db,
|
||||||
|
self._prior_db,
|
||||||
|
self._prior_samples,
|
||||||
|
self._startup_delay)
|
@ -0,0 +1,30 @@
|
|||||||
|
"""Contain the resample augmentation model."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from data_utils.augmentor.base import AugmentorBase
|
||||||
|
|
||||||
|
|
||||||
|
class ResampleAugmentor(AugmentorBase):
|
||||||
|
"""Augmentation model for resampling.
|
||||||
|
|
||||||
|
:param rng: Random generator object.
|
||||||
|
:type rng: random.Random
|
||||||
|
:param new_sample_rate: New sample rate in Hz
|
||||||
|
:type new_sample_rate: int
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, rng, new_sample_rate):
|
||||||
|
self._new_sample_rate = new_sample_rate
|
||||||
|
self._rng = rng
|
||||||
|
|
||||||
|
def transform_audio(self, audio_segment):
|
||||||
|
"""Resamples the input audio to a target sample rate.
|
||||||
|
|
||||||
|
Note that this is an in-place transformation.
|
||||||
|
|
||||||
|
:param audio: Audio segment to add effects to.
|
||||||
|
:type audio: AudioSegment|SpeechSegment
|
||||||
|
"""
|
||||||
|
audio_segment.resample(self._new_sample_rate)
|
@ -0,0 +1,43 @@
|
|||||||
|
"""Contain the speech perturbation augmentation model."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from data_utils.augmentor.base import AugmentorBase
|
||||||
|
|
||||||
|
|
||||||
|
class SpeedPerturbAugmentor(AugmentorBase):
|
||||||
|
"""Augmentation model for adding speed perturbation.
|
||||||
|
|
||||||
|
See reference paper here:
|
||||||
|
http://www.danielpovey.com/files/2015_interspeech_augmentation.pdf
|
||||||
|
|
||||||
|
:param rng: Random generator object.
|
||||||
|
:type rng: random.Random
|
||||||
|
:param min_speed_rate: Lower bound of new speed rate to sample.
|
||||||
|
:type min_speed_rate: float
|
||||||
|
:param max_speed_rate: Upper bound of new speed rate to sample.
|
||||||
|
:type max_speed_rate: float
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, rng, min_speed_rate, max_speed_rate):
|
||||||
|
|
||||||
|
if (min_speed_rate < 0.5):
|
||||||
|
raise ValueError("Sampling speed below 0.9 can cause unnatural effects")
|
||||||
|
if (max_speed_rate > 1.5):
|
||||||
|
raise ValueError("Sampling speed above 1.1 can cause unnatural effects")
|
||||||
|
self._min_speed_rate = min_speed_rate
|
||||||
|
self._max_speed_rate = max_speed_rate
|
||||||
|
self._rng = rng
|
||||||
|
|
||||||
|
def transform_audio(self, audio_segment):
|
||||||
|
"""Sample a new speed rate from the given range and
|
||||||
|
changes the speed of the given audio clip.
|
||||||
|
|
||||||
|
Note that this is an in-place transformation.
|
||||||
|
|
||||||
|
:param audio_segment: Audio segment to add effects to.
|
||||||
|
:type audio_segment: AudioSegment|SpeechSegment
|
||||||
|
"""
|
||||||
|
sampled_speed = self._rng.uniform(self._min_speed_rate, self._max_speed_rate)
|
||||||
|
audio_segment.change_speed(sampled_speed)
|
Loading…
Reference in new issue