示例#1
0
    def setUp(self):
        self.samplerate = SR44100()
        rs = resampled(resample_to=self.samplerate)

        wscheme = HalfLapped()

        @simple_in_memory_settings
        class Document(rs):
            windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=wscheme,
                wfunc=OggVorbisWindowingFunc(),
                needs=rs.resampled,
                store=False)

            fft = ArrayWithUnitsFeature(
                FFT,
                needs=windowed,
                store=False)

            centroid = ArrayWithUnitsFeature(
                SpectralCentroid,
                needs=fft,
                store=True)

        ss = SineSynthesizer(self.samplerate)
        chunks = \
            [ss.synthesize(Seconds(1), [440 * i]) for i in range(1, 6)]
        self.audio = \
            AudioSamples(ArrayWithUnits.concat(chunks), self.samplerate)
        _id = Document.process(meta=self.audio.encode())
        self.doc = Document(_id)
示例#2
0
    def setUp(self):
        self.samplerate = SR22050()
        rs = resampled(resample_to=self.samplerate)

        window_size = Picoseconds(int(1e12))
        wscheme = SampleRate(window_size, window_size)

        @simple_in_memory_settings
        class Document(rs):
            windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=wscheme,
                needs=rs.resampled,
                store=False)

            dct = ArrayWithUnitsFeature(
                DCTIV,
                needs=windowed,
                store=True)

        ss = SineSynthesizer(self.samplerate)
        self.audio = ss.synthesize(Seconds(5), [440., 660., 880.])

        _id = Document.process(meta=self.audio.encode())
        self.doc = Document(_id)
示例#3
0
 def test_can_apply_empty_time_slice_to_wrapper(self):
     synth = SineSynthesizer(SR11025())
     samples = synth.synthesize(Seconds(10))
     encoded = samples.encode(fmt='OGG', subtype='VORBIS')
     wrapper = OggVorbisWrapper(encoded)
     samples = wrapper[TimeSlice()]
     expected = Seconds(10) / Seconds(1)
     actual = samples.end / Seconds(1)
     self.assertAlmostEqual(expected, actual, places=6)
示例#4
0
 def test_can_convert_to_categorical_distribution(self):
     samplerate = SR11025()
     synth = SineSynthesizer(samplerate)
     samples = synth.synthesize(Seconds(4), [220, 440, 880])
     _, windowed = samples.sliding_window_with_leftovers(
         TimeSlice(duration=samplerate.frequency * 512),
         TimeSlice(duration=samplerate.frequency * 256))
     c = categorical(windowed, mu=255)
     self.assertEqual(windowed.shape + (255 + 1,), c.shape)
     np.testing.assert_allclose(c.sum(axis=-1), 1)
示例#5
0
 def test_can_convert_to_categorical_distribution(self):
     samplerate = SR11025()
     synth = SineSynthesizer(samplerate)
     samples = synth.synthesize(Seconds(4), [220, 440, 880])
     _, windowed = samples.sliding_window_with_leftovers(
         TimeSlice(duration=samplerate.frequency * 512),
         TimeSlice(duration=samplerate.frequency * 256))
     c = categorical(windowed, mu=255)
     self.assertEqual(windowed.shape + (255 + 1, ), c.shape)
     np.testing.assert_allclose(c.sum(axis=-1), 1)
示例#6
0
 def test_can_invert_categorical_distribution(self):
     samplerate = SR11025()
     synth = SineSynthesizer(samplerate)
     samples = synth.synthesize(Seconds(4), [220, 440, 880])
     _, windowed = samples.sliding_window_with_leftovers(
         TimeSlice(duration=samplerate.frequency * 512),
         TimeSlice(duration=samplerate.frequency * 256))
     c = categorical(windowed, mu=255)
     inverted = inverse_categorical(c, mu=255)
     self.assertEqual(windowed.shape, inverted.shape)
     self.assertIsInstance(inverted, ArrayWithUnits)
     self.assertSequenceEqual(windowed.dimensions, inverted.dimensions)
示例#7
0
 def test_can_invert_categorical_distribution(self):
     samplerate = SR11025()
     synth = SineSynthesizer(samplerate)
     samples = synth.synthesize(Seconds(4), [220, 440, 880])
     _, windowed = samples.sliding_window_with_leftovers(
         TimeSlice(duration=samplerate.frequency * 512),
         TimeSlice(duration=samplerate.frequency * 256))
     c = categorical(windowed, mu=255)
     inverted = inverse_categorical(c, mu=255)
     self.assertEqual(windowed.shape, inverted.shape)
     self.assertIsInstance(inverted, ArrayWithUnits)
     self.assertSequenceEqual(windowed.dimensions, inverted.dimensions)
示例#8
0
    def test_perfect_reconstruction(self):
        synth = SineSynthesizer(SR22050())
        audio = synth.synthesize(Seconds(1), [440., 660., 880.])
        node = DCTIV()
        coeffs = node._process_raw(audio[None, :])
        recon = node._process_raw(coeffs)[0]

        # see? it's do-able w/ dct
        dct_coeffs = scipy.fftpack.dct(audio[None, :], norm='ortho')
        inverse_dct = scipy.fftpack.idct(dct_coeffs, norm='ortho')[0]

        np.testing.assert_almost_equal(inverse_dct, audio, decimal=4)
        np.testing.assert_almost_equal(recon, audio, decimal=4)
示例#9
0
    def test_perfect_reconstruction_using_overlap_add(self):
        synth = SineSynthesizer(SR22050())
        audio = synth.synthesize(Seconds(10), [440., 660., 880.])
        sr = SampleRate(duration=Seconds(1), frequency=Milliseconds(500))
        windowed = audio.sliding_window(sr)

        mdct = MDCT()

        coeffs = list(mdct._process(windowed * OggVorbisWindowingFunc()))[0]

        mdct_synth = MDCTSynthesizer()
        recon = mdct_synth.synthesize(coeffs)

        # take a slice, so we can ignore boundary conditions
        slce = TimeSlice(start=Seconds(1), duration=Seconds(8))

        np.testing.assert_allclose(recon[slce], audio[slce])
示例#10
0
    def setUp(self):
        self.samplerate = SR22050()
        rs = resampled(resample_to=self.samplerate)

        wscheme = HalfLapped()

        @simple_in_memory_settings
        class Document(rs):
            windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=wscheme,
                wfunc=OggVorbisWindowingFunc(),
                needs=rs.resampled,
                store=False)

            fft = ArrayWithUnitsFeature(
                FFT,
                needs=windowed,
                store=False)

            flatness = ArrayWithUnitsFeature(
                SpectralFlatness,
                needs=fft,
                store=True)

        # create a pure sine wave that fades out
        ss = SineSynthesizer(self.samplerate)
        sine = ss.synthesize(Seconds(5), [440.])
        sine_envelope = np.linspace(1.0, 0.0, len(sine))
        sine *= sine_envelope

        # create noise
        ns = NoiseSynthesizer(self.samplerate)
        noise = ns.synthesize(Seconds(5))
        noise_envelope = np.linspace(0.0, 1.0, len(noise))
        noise *= noise_envelope

        # mix the sine wave and noise together
        self.audio = sine + noise

        _id = Document.process(meta=self.audio.encode())
        self.doc = Document(_id)
示例#11
0
    def setUp(self):
        self.samplerate = SR11025()
        rs = resampled(resample_to=self.samplerate)

        wscheme = HalfLapped()

        @simple_in_memory_settings
        class Document(rs):
            windowed = ArrayWithUnitsFeature(SlidingWindow,
                                             wscheme=wscheme,
                                             needs=rs.resampled,
                                             store=False)

            mdct = ArrayWithUnitsFeature(MDCT, needs=windowed, store=True)

        ss = SineSynthesizer(self.samplerate)
        self.audio = ss.synthesize(Seconds(5), [440., 660., 880.])

        _id = Document.process(meta=self.audio.encode())
        self.doc = Document(_id)
示例#12
0
    def setUp(self):
        self.samplerate = SR11025()
        rs = resampled(resample_to=self.samplerate)

        wscheme = HalfLapped()

        @simple_in_memory_settings
        class Document(rs):
            windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=wscheme,
                needs=rs.resampled,
                store=False)

            mdct = ArrayWithUnitsFeature(
                MDCT,
                needs=windowed,
                store=True)

        ss = SineSynthesizer(self.samplerate)
        self.audio = ss.synthesize(Seconds(5), [440., 660., 880.])

        _id = Document.process(meta=self.audio.encode())
        self.doc = Document(_id)
示例#13
0
 def test_pad_with_samples_adds_silence_at_end(self):
     synth = SineSynthesizer(SR11025())
     samples = synth.synthesize(Seconds(2))
     padded = samples.pad_with_silence(Seconds(4))
     silence = padded[TimeSlice(start=Seconds(2))]
     self.assertEqual(0, silence.sum())
示例#14
0
 def test_pad_with_samples_adds_silence_at_end(self):
     synth = SineSynthesizer(SR11025())
     samples = synth.synthesize(Seconds(2))
     padded = samples.pad_with_silence(Seconds(4))
     silence = padded[TimeSlice(start=Seconds(2))]
     self.assertEqual(0, silence.sum())