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)
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:])
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)
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)
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)
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)
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)
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))
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)
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))
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:])
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)