コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
ファイル: window.py プロジェクト: saikalyanranga/lauscher
    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
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    def __call__(self, data: MonoAudioWave) -> MonoAudioWave:
        assert isinstance(data, MonoAudioWave)

        data.samples = data.samples / np.max(np.abs(data.samples))
        return data