def _test_write_pitched(self):
        self.sched.pitch = 2.0
        rf = ratefilter.RateFilter()
        rf.in_hz = self.sound.samplerate
        rf.out_hz = int(rf.in_hz * 2.0)
        rf.write(self.sound)
        pitched_sound = rf.read(rf.readable())

        frames = [200]
        for i in frames:
            self.sched.add(i)

        stream_out = []
        chunk = buffering.Sound(1)
        length = 200 + len(pitched_sound)
        for i in range(length):
            chunk *= 0
            self.clock.set(i, 1)
            self.sched.render(chunk)
            stream_out.extend(chunk)
        stream_out = buffering.Sound(seq=stream_out)

        predicted = buffering.Sound(len(stream_out))
        for i in frames:
            x, y = i, i+len(pitched_sound)
            dest = predicted[x:y]
            dest += pitched_sound

        self.assertEqual(numarray.any(stream_out[:200]), False)
        self.assertEqual(numarray.any(predicted[:200]), False)
        self.assertEqual(predicted[200:], pitched_sound)
        self.assertEqual(stream_out[200:], pitched_sound)
    def _test_write_one_pitched(self):
        rf = ratefilter.RateFilter()
        rf.in_hz = self.sound.samplerate
        rf.out_hz = int(rf.in_hz * 2.0)
        rf.write(self.sound)
        sound = rf.read(rf.readable())

        self.sched.add(50)

        chunk = buffering.Sound(10)
        self.sched.pitch = 2.0
        stream_out = []
        for i in range(50):
            self.clock.set(i*10, 10)
            chunk *= 0
            self.sched.render(chunk)
            stream_out.extend(chunk)
        stream_out = buffering.Sound(seq=stream_out)

        predicted = buffering.Sound(len(stream_out))
        dest = predicted[50:50+len(sound)]
        orig = sound
        dest += orig

        self.assertEqual(numarray.any(predicted[:50]), False)
        self.assertEqual(numarray.any(predicted[50:]), True)
        self.assertEqual(numarray.any(stream_out[:50]), False)
        self.assertEqual(numarray.any(stream_out[50:]), True)
        self.assertEqual(len(stream_out), len(predicted))
    def test_mix(self):
        """ test that writers mix audio correctly. """
        stream_out = buffering.Sound(500)
        predicted = buffering.Sound(500)
        predicted[200:300] += self.sound
        predicted[250:350] += self.sound

        writer_one = scheduler.Writer(self.sound)
        writer_two = scheduler.Writer(self.sound)
        writer_one.write(stream_out[200:])
        writer_two.write(stream_out[250:])
        self.assertEqual(list(stream_out), list(predicted))
        self.assertEqual(numarray.any(stream_out[:200]), False)
        self.assertEqual(numarray.any(stream_out[350:]), False)
    def test_write_many(self):
        starts = [200, 250, 300]        
        for frame in starts:
            self.sched.add(frame)

        predicted = buffering.Sound(10 * self.periodsize)
        for i in starts:
            predicted[i:i+len(self.sound)] += self.sound
        predicted = list(predicted)
            
        stream_out = []
        chunk = buffering.Sound(self.periodsize)
        for i in range(10):
            self.clock.set(self.periodsize * i, self.periodsize)
            chunk *= 0
            self.sched.render(chunk)
            stream_out.extend(chunk)

        self.assertEqual(predicted, stream_out)
        self.assertEqual(numarray.any(stream_out[:200]), False)
        self.assertEqual(numarray.any(stream_out[450:]), False)
    def test_one(self):
        sound_start = 400
        sound_stop = sound_start + len(self.sound)

        self.sched.add(sound_start)
        stream_out = []
        target = numarray.array([0] * self.periodsize, numarray.Int16)
        for i in range(100):
            self.clock.set(self.periodsize * i, self.periodsize)
            target *= 0
            self.sched.render(target)
            stream_out.extend(target)
        stream_out = numarray.array(stream_out, type=numarray.Int16)
        
        pre_write = stream_out[:sound_start]
        self.assertEqual(numarray.any(pre_write), False)

        written = stream_out[sound_start:sound_stop]
        self.assertEqual(numarray.all(written), True)

        post_write = stream_out[sound_stop:]
        self.assertEqual(bool(numarray.any(post_write)), False)
Example #6
0
 def all(self, X, V):
     return array((any(X < self.lower) or any(X > self.upper)) and -1 or 1)
 def test_write(self):
     scheduler.RESAMPLE = self._scheduler_RESAMPLE
     stream_out = buffering.Sound(1000)
     self.writer.write(stream_out)
     self.assertEqual(numarray.all(self.sound[:100]), True)
     self.assertEqual(numarray.any(self.sound[100:]), False)