def test_default_windowsize(self): num_samples = 1000 one_track = MonoAudioWave([1] * num_samples, 44000) hanned = one_track.transform(HanningWindow()) for idx, value in enumerate(hanned.samples): self.assertAlmostEqual(hanning(num_samples)[idx], value, places=2)
def test_rms_calculation(self): sine_track = MonoAudioWave(np.sin(np.linspace(0, 1000, 10000)), 44000) # Full-scale sine has -3db RMS self.assertAlmostEqual(sine_track.get_rms(), -3, places=1) # Half signal is a 6dB decrease sine_track.samples = sine_track.samples / 2 self.assertAlmostEqual(sine_track.get_rms(), -9, places=1)
def test_peak_from_below(self): sine_track = MonoAudioWave(np.sin(np.linspace(0, 1000, 10000)), 44000) # Normalized initialization self.assertAlmostEqual(max(abs(sine_track.samples)), 1, places=1) # Reduce to half-scale sine_track.samples /= 2 self.assertAlmostEqual(max(abs(sine_track.samples)), 0.5, places=1) # Normalize again sine_track = sine_track.transform(PeakNormalizer()) self.assertAlmostEqual(max(abs(sine_track.samples)), 1, places=1)
def test_peak_from_above(self): sine_track = MonoAudioWave(np.sin(np.linspace(0, 1000, 10000)), 44000) # Normalized initialization self.assertAlmostEqual(max(abs(sine_track.samples)), 1, places=1) # Amplify to double-cale sine_track.samples = sine_track.samples * 2 self.assertAlmostEqual(max(abs(sine_track.samples)), 2, places=1) # Normalize again sine_track = sine_track.transform(PeakNormalizer()) self.assertAlmostEqual(max(abs(sine_track.samples)), 1, places=1)
def __call__(self, data: MonoAudioWave) -> MonoAudioWave: assert isinstance(data, MonoAudioWave) if self.rampup_time is None: rampup_samples = data.num_samples // 2 else: rampup_samples = data.get_sample_id(self.rampup_time) if self.rampdown_time is None: rampdown_samples = data.num_samples // 2 else: rampdown_samples = data.get_sample_id(self.rampdown_time) rampup_window = self._window(rampup_samples * 2)[:rampup_samples] rampdown_window = self._window(rampdown_samples * 2)[:rampdown_samples] data.samples[:rampup_samples] = rampup_window \ * data.samples[:rampup_samples] data.samples[-rampdown_samples:] = rampdown_window[::-1] * \ data.samples[-rampdown_samples:] return data
def test_peak_from_above(self): sine_track = MonoAudioWave(np.sin(np.linspace(0, 1000, 10000)), 44000) # Normalize to 3dB -> factor 2 amplitude increase sine_track = sine_track.transform(RmsNormalizer(2)) self.assertAlmostEqual(rms(sine_track.samples), 2, places=1)
def test_rms_from_above(self): sine_track = MonoAudioWave(np.sin(np.linspace(0, 1000, 10000)), 44000) sine_track = sine_track.transform(RmsNormalizer(0.5)) self.assertAlmostEqual(rms(sine_track.samples), 0.5, places=1)
def __call__(self, data: MonoAudioWave) -> MonoAudioWave: assert isinstance(data, MonoAudioWave) data.samples = data.samples / np.max(np.abs(data.samples)) return data