Пример #1
0
    def test_zeropad(self):
        fs = 48000
        duration = 100e-3

        sig = Signal(1, duration, fs)
        sig.add_tone(100).zeropad(number=10)
        assert np.all(sig[:10] == sig[-10:])
        assert np.all(sig[:10] == 0)

        sig = Signal(1, duration, fs)
        sig.add_tone(100).zeropad(number=[10, 5])
        assert np.all(sig[:10] == 0)
        assert np.all(sig[-5:] == 0)

        sig = Signal(1, duration, fs)
        sig.add_tone(100).zeropad(duration=10e-3)
        n_zeros = audio.nsamples(10e-3, fs)
        assert np.all(sig[:n_zeros] == 0)
        assert np.all(sig[-n_zeros:] == 0)

        sig = Signal(1, duration, fs)
        sig.add_tone(100).zeropad(duration=[5e-3, 10e-3])
        n_zeros_s = audio.nsamples(5e-3, fs)
        n_zeros_e = audio.nsamples(10e-3, fs)
        assert np.all(sig[:n_zeros_s] == 0)
        assert np.all(sig[-n_zeros_e:] == 0)
Пример #2
0
    def test_nsamples(self):
        duration = 1
        fs = 10

        assert audio.nsamples(duration, fs) == 10

        # test for directly using signal class
        sig = audio.Signal(1, 1, 10)
        assert audio.nsamples(sig) == 10
Пример #3
0
    def test_gauss_fade_window(self):
        window = audio.gaussian_fade_window(np.zeros(1000), 100e-3, 1e3)
        n_window = 100

        #test symmentry
        assert np.array_equal(window[:100], window[-100:][::-1])

        #test starts at -60dB
        testing.assert_almost_equal(window[0], 0.001)

        #test setting cutoff
        window = audio.gaussian_fade_window(np.zeros(1000), 100e-3, 1e3, cutoff=-20)
        testing.assert_almost_equal(window[0], 0.1)

        # Test that the last sample in the window is not equal to 1
        nsamp = audio.nsamples(200e-3, 1e3)
        window = audio.gaussian_fade_window(np.zeros(nsamp + 1), 100e-3 , 1e3)
        n_window = 100

        assert window[int(nsamp / 2)] == 1
        assert window[int(nsamp / 2 - 1)] != 1
        assert window[int(nsamp / 2 + 1)] != 1
        assert window[int(nsamp / 2 + 1)] == window[int(nsamp / 2 - 1)]

        # Test multichannel window
        window = audio.gaussian_fade_window(np.zeros([1000, 2]), 100e-3, 1e3)
        assert np.array_equal(window[:, 0], window[:, 1])
        assert np.array_equal(window[:100, 0], window[-100:, 0][::-1])

        sig = audio.Signal((2, 3), 1, 48000)
        win = audio.gaussian_fade_window(sig, 100e-3)
        assert win.shape == sig.shape
        testing.assert_array_equal (win[:, 1, 0], win[:, 0, 1])
Пример #4
0
    def test_generate_noise(self):
        duration = 1
        fs = 100e3

        noise = audio.generate_noise(duration, fs)
        assert len(noise) == audio.nsamples(duration, fs)
        assert np.ndim(noise) == 1
        # Test for whole spectrum
        spec = np.fft.fft(noise)
        assert np.all(~np.isclose(np.abs(spec)[1:], 0))
        testing.assert_almost_equal(np.abs(spec[0]), 0)
        testing.assert_almost_equal(np.var(noise), 1)

        # # Test no offset
        testing.assert_almost_equal(noise.mean(), 0)
        # test seed
        noise1 = audio.generate_noise(duration, fs, seed=1)
        noise2 = audio.generate_noise(duration, fs, seed=1)
        noise3 = audio.generate_noise(duration, fs, seed=2)
        testing.assert_equal(noise1, noise2)
        assert ~np.all(noise1 == noise3)

        # test directly handing over signal
        sig = audio.Signal((2, 3), 1, 10)
        noise = audio.generate_noise(sig)
        assert noise.shape == (10, 2, 3)
        testing.assert_array_equal(noise[:, 0, :], noise[:, 1, :])
        testing.assert_array_equal(noise[:, :, 0], noise[:, :, 1])


        # test directly handing over signal
        noise = audio.generate_noise(1, 10, n_channels=(2, 3))
        assert noise.shape == (10, 2, 3)
        testing.assert_array_equal(noise[:, 0, :], noise[:, 1, :])
        testing.assert_array_equal(noise[:, :, 0], noise[:, :, 1])

        # test multichannel
        noise = audio.generate_noise(1, 10, n_channels=(2, 3), ntype='pink')
        assert noise.shape == (10, 2, 3)
        testing.assert_array_equal(noise[:, 0, :], noise[:, 1, :])
        testing.assert_array_equal(noise[:, :, 0], noise[:, :, 1])
Пример #5
0
    def test_clip(self):
        sig = Signal(2, 1, 48000).add_noise()
        o_sig = sig.copy()
        sig.clip(0, 1)
        assert sig.n_samples == o_sig.n_samples

        # Test multi channel clipping (2 x 2 )
        sig = Signal((2, 2), 1, 48000).add_noise()
        o_sig = sig.copy()
        sig.clip(0, 1)
        assert sig.n_samples == o_sig.n_samples

        sig = Signal(2, 1, 48000).add_noise()
        o_sig = sig.copy()
        sig.clip(0, 0.5)
        assert sig.n_samples == (o_sig.n_samples // 2)
        assert np.all(sig == o_sig[:o_sig.n_samples // 2, :])
        assert sig.base == None

        sig = Signal(2, 1, 48000).add_noise()
        o_sig = sig.copy()
        sig.clip(0.5)
        assert sig.n_samples == (o_sig.n_samples // 2)
        assert np.all(sig == o_sig[o_sig.n_samples // 2:, :])
        assert sig.base == None

        sig = Signal((2, 2), 1, 48000).add_noise()
        o_sig = sig.copy()
        sig.clip(0.5)
        assert sig.n_samples == (o_sig.n_samples // 2)
        assert np.all(sig == o_sig[o_sig.n_samples // 2:, :])
        assert sig.base == None

        # test negative indexing
        sig = Signal(2, 1, 48000).add_noise()
        o_sig = sig.copy()
        n_samples = audio.nsamples(0.9, sig.fs)
        sig.clip(0, -0.1)
        assert sig.n_samples == n_samples
        assert np.all(sig == o_sig[:n_samples, :])
        assert sig.base == None
Пример #6
0
    def __new__(cls, n_channels, duration, fs, dtype=float):

        n_samples = audio.nsamples(duration, fs)

        if not np.ndim(n_channels):  #if channels is only an integer
            if n_channels == 1:
                obj = super(BaseSignal, cls).__new__(cls,
                                                     shape=(n_samples),
                                                     dtype=dtype)
            else:
                obj = super(BaseSignal,
                            cls).__new__(cls,
                                         shape=(n_samples, n_channels),
                                         dtype=dtype)
        else:
            obj = super(BaseSignal,
                        cls).__new__(cls,
                                     shape=[n_samples] + list(n_channels),
                                     dtype=dtype)
        obj._fs = fs
        obj.fill(0)
        return obj
Пример #7
0
    def test_cosine_fade_window(self):
        window = audio.cosine_fade_window(np.zeros(1000), 100e-3, 1e3)
        n_window = 100

        #test symmentry
        assert np.array_equal(window[:100], window[-100:][::-1])

        #test starts with 0
        assert window[0] == 0

        window = audio.cosine_fade_window(np.zeros(1000), 100e-3, 1e3)
        n_window = 100

        #test if the window is a cosine curve of the right type
        cos_curve = np.concatenate([window[:100], window[-101:]])
        sin = (0.5 * audio.generate_tone(0.2 + 1. / 1e3, 5, 1e3,
                                         start_phase=np.pi)) + 0.5
        testing.assert_array_almost_equal(cos_curve, sin)

        # Test that the last sample in the window is not equal to 1
        nsamp = audio.nsamples(200e-3, 1e3)
        window = audio.cosine_fade_window(np.zeros(nsamp + 1), 100e-3 , 1e3)
        n_window = 100
        assert window[int(nsamp / 2)] == 1
        assert window[int(nsamp / 2 - 1)] != 1
        assert window[int(nsamp / 2 + 1)] != 1
        assert window[int(nsamp / 2 + 1)] == window[int(nsamp / 2 - 1)]

        # Test multichannel window
        window = audio.cosine_fade_window(np.zeros([1000, 2]), 100e-3, 1e3)
        assert np.array_equal(window[:, 0], window[:, 1])
        assert np.array_equal(window[:100, 0], window[-100:, 0][::-1])

        sig = audio.Signal((2, 3), 1, 48000)
        win = audio.cosine_fade_window(sig, 100e-3)
        assert win.shape == sig.shape
        testing.assert_array_equal (win[:, 1, 0], win[:, 0, 1])