Esempio n. 1
0
    def test_can_invert_long_fft(self):
        samplerate = SR11025()
        rs = resampled(resample_to=samplerate)

        @simple_in_memory_settings
        class Document(rs):
            long_windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=SampleRate(Milliseconds(500), Seconds(1)),
                wfunc=OggVorbisWindowingFunc(),
                needs=rs.resampled,
                store=True)

            long_fft = ArrayWithUnitsFeature(FFT,
                                             needs=long_windowed,
                                             store=True)

        synth = SineSynthesizer(samplerate)
        audio = synth.synthesize(Seconds(2), freqs_in_hz=[440., 880.])

        _id = Document.process(meta=audio.encode())
        doc = Document(_id)

        fft_synth = FFTSynthesizer()
        recon = fft_synth.synthesize(doc.long_fft)
        self.assertIsInstance(recon, AudioSamples)
        self.assertEqual(audio.dimensions, recon.dimensions)
Esempio n. 2
0
    def test_can_apply_sliding_windows_in_succession(self):
        samplerate = SR11025()
        short_window = samplerate * (16, 512)
        long_window = SampleRate(
            frequency=short_window.frequency * 1,
            duration=short_window.frequency * 64)
        rs = resampled(resample_to=samplerate, store_resampled=True)

        samples = AudioSamples.silence(samplerate, Seconds(10))

        @simple_in_memory_settings
        class Sound(rs):
            short_windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=short_window,
                needs=rs.resampled)

            long_windowed = ArrayWithUnitsFeature(
                SlidingWindow,
                wscheme=long_window,
                needs=short_windowed)

        _id = Sound.process(meta=samples.encode())
        snd = Sound(_id)
        self.assertEqual((512,), snd.short_windowed.shape[1:])
        self.assertEqual((64, 512), snd.long_windowed.shape[1:])
Esempio n. 3
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)
Esempio n. 4
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)
Esempio n. 5
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)
Esempio n. 6
0
    def test_has_correct_duration(self):
        samplerate = SR22050()
        rs = resampled(resample_to=samplerate)

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

        synth = NoiseSynthesizer(samplerate)
        audio = synth.synthesize(Milliseconds(5500))

        _id = Document.process(meta=audio.encode())
        doc = Document(_id)

        orig_seconds = audio.dimensions[0].end / Picoseconds(int(1e12))
        new_seconds = doc.windowed.dimensions[0].end / Picoseconds(int(1e12))
        self.assertAlmostEqual(orig_seconds, new_seconds, delta=0.01)
Esempio n. 7
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)
Esempio n. 8
0
    def test_can_persist_and_retrieve_with_second_long_windowing_scheme(self):
        samplerate = SR22050()
        rs = resampled(resample_to=samplerate)

        window_size = Seconds(1)
        wscheme = SampleRate(window_size, window_size)

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

        synth = NoiseSynthesizer(samplerate)
        audio = synth.synthesize(Milliseconds(5500))

        _id = Document.process(meta=audio.encode())
        doc = Document(_id)

        self.assertEqual(6, len(doc.windowed))
Esempio n. 9
0
    def test_has_correct_duration(self):
        samplerate = SR22050()
        rs = resampled(resample_to=samplerate)

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

        synth = NoiseSynthesizer(samplerate)
        audio = synth.synthesize(Milliseconds(5500))

        _id = Document.process(meta=audio.encode())
        doc = Document(_id)

        orig_seconds = audio.dimensions[0].end / Picoseconds(int(1e12))
        new_seconds = doc.windowed.dimensions[0].end / Picoseconds(int(1e12))
        self.assertAlmostEqual(orig_seconds, new_seconds, delta=0.01)
Esempio n. 10
0
    def test_can_persist_and_retrieve_with_second_long_windowing_scheme(self):
        samplerate = SR22050()
        rs = resampled(resample_to=samplerate)

        window_size = Seconds(1)
        wscheme = SampleRate(window_size, window_size)

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

        synth = NoiseSynthesizer(samplerate)
        audio = synth.synthesize(Milliseconds(5500))

        _id = Document.process(meta=audio.encode())
        doc = Document(_id)

        self.assertEqual(6, len(doc.windowed))
Esempio n. 11
0
    def test_can_apply_sliding_windows_in_succession(self):
        samplerate = SR11025()
        short_window = samplerate * (16, 512)
        long_window = SampleRate(frequency=short_window.frequency * 1,
                                 duration=short_window.frequency * 64)
        rs = resampled(resample_to=samplerate, store_resampled=True)

        samples = AudioSamples.silence(samplerate, Seconds(10))

        @simple_in_memory_settings
        class Sound(rs):
            short_windowed = ArrayWithUnitsFeature(SlidingWindow,
                                                   wscheme=short_window,
                                                   needs=rs.resampled)

            long_windowed = ArrayWithUnitsFeature(SlidingWindow,
                                                  wscheme=long_window,
                                                  needs=short_windowed)

        _id = Sound.process(meta=samples.encode())
        snd = Sound(_id)
        self.assertEqual((512, ), snd.short_windowed.shape[1:])
        self.assertEqual((64, 512), snd.long_windowed.shape[1:])
Esempio n. 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)