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