示例#1
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:])
示例#2
0
    def _process(self, data):
        sr = data.samples_per_second

        if self._resample is None:
            target_sr = self._samplerate.samples_per_second
            self._resample = Resample(
                sr, target_sr, 1 if len(data.shape) == 1 else data.shape[1])

            if target_sr != sr:
                self._rs = self._resample
                # KLUDGE: The following line seems to solve a bug whereby
                # libsamplerate doesn't generate enough samples the first time
                # src_process is called. We're calling it once here, so the "real"
                # output will come out click-free
                silence = AudioSamples.silence(self._samplerate,
                                               Seconds(1),
                                               channels=data.channels)
                self._resample(silence)
            else:
                self._rs = self._noop

        resampled = self._rs(data, self._finalized)
        if not isinstance(resampled, ArrayWithUnits):
            resampled = AudioSamples(resampled, self._samplerate)
        yield resampled
示例#3
0
    def synthesize(self, duration):
        """
        Synthesize silence

        Args:
            duration (numpy.timedelta64): The duration of the synthesized sound
        """
        return AudioSamples.silence(self.samplerate, duration)
示例#4
0
    def synthesize(self, duration):
        """
        Synthesize silence

        Args:
            duration (numpy.timedelta64): The duration of the synthesized sound
        """
        return AudioSamples.silence(self.samplerate, duration)
示例#5
0
 def test_smoke(self):
     samples = AudioSamples.silence(SR22050(), Seconds(1))
     samplerate = SR22050()
     scale = GeometricScale(start_center_hz=20,
                            stop_center_hz=5000,
                            bandwidth_ratio=1.2,
                            n_bands=8)
     scale.ensure_overlap_ratio(0.5)
     taps = 16
     filter_bank = fir_filter_bank(scale, taps, samplerate, np.hanning(3))
     correlogram = auto_correlogram(samples, filter_bank)
     self.assertEqual(3, correlogram.ndim)
示例#6
0
 def test_smoke(self):
     samples = AudioSamples.silence(SR22050(), Seconds(1))
     samplerate = SR22050()
     scale = GeometricScale(
         start_center_hz=20,
         stop_center_hz=5000,
         bandwidth_ratio=1.2,
         n_bands=8)
     scale.ensure_overlap_ratio(0.5)
     taps = 16
     filter_bank = fir_filter_bank(scale, taps, samplerate, np.hanning(3))
     correlogram = auto_correlogram(samples, filter_bank)
     self.assertEqual(3, correlogram.ndim)
示例#7
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:])
示例#8
0
 def test_can_decompose_audio_samples(self):
     samples = AudioSamples.silence(SR22050(), Seconds(1))
     bands = frequency_decomposition(samples, [64, 128, 256, 512, 1024])
     expected_td = TimeDimension(samples.end, samples.end)
     self.assertEqual(expected_td, bands.dimensions[0])
     self.assertIsInstance(bands.dimensions[1], ExplicitFrequencyDimension)
示例#9
0
 def test_can_decompose_audio_samples(self):
     samples = AudioSamples.silence(SR22050(), Seconds(1))
     bands = frequency_decomposition(samples, [64, 128, 256, 512, 1024])
     expected_td = TimeDimension(samples.end, samples.end)
     self.assertEqual(expected_td, bands.dimensions[0])
     self.assertIsInstance(bands.dimensions[1], ExplicitFrequencyDimension)