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) 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 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)
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)
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)
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)
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)
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)
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])
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 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 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_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())
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())