from template import aubio_unit_template from localaubio import * buf_size = 4096 hop_size = 512 channels = 1 samplerate = 44100. class pitch_test_case(unittest.TestCase): def setUp(self, type = aubio_pitch_yinfft, mode = aubio_pitchm_freq): self.create(type=type) def create(self, type = aubio_pitch_yinfft, mode = aubio_pitchm_freq): self.type = type self.o = new_aubio_pitch(buf_size, hop_size, channels, int(samplerate), type, mode) def tearDown(self): del_aubio_pitch(self.o) def test_pitch(self): """ create and delete pitch """ pass def test_pitch_run_zeroes(self): """ run pitch on an empty buffer """ vec = new_fvec(buf_size, channels) out = new_fvec(1, channels) for i in range(100): aubio_pitch_do(self.o,vec, out) self.assertEqual(fvec_read_sample(out, 0, 0),0.) del vec def test_pitch_run_4_impulses(self): """ run pitch on a train of 4 impulses """ vec = new_fvec(buf_size, channels) out = new_fvec(1, channels) fvec_write_sample(vec,-1.,0, 0) fvec_write_sample(vec, 1.,0, buf_size/4) fvec_write_sample(vec,-1.,0, buf_size/2) fvec_write_sample(vec, 1.,0,3*buf_size/4) frequency = samplerate/2*4/buf_size for i in range(100): aubio_pitch_do(self.o,vec, out) self.assertEqual(fvec_read_sample(out, 0, 0),frequency) del vec def test_pitch_run_4_positive_impulses(self): """ run pitch on a train of 4 positive impulses of arbitrary size """ vec = new_fvec(buf_size, channels) out = new_fvec(1, channels) frequency = samplerate/2*8/buf_size for i in range(100): fvec_write_sample(vec, 2.-.01*i,0, 0) fvec_write_sample(vec, 2.-.01*i,0, buf_size/4) fvec_write_sample(vec, 2.-.01*i,0, buf_size/2) fvec_write_sample(vec, 2.-.01*i,0,3*buf_size/4) aubio_pitch_do(self.o,vec, out) self.assertAlmostEqual(fvec_read_sample(out, 0, 0),frequency,1) del vec def test_pitch_run_4_negative_impulses(self): """ run pitch on a train of 4 negative impulses of arbitrary size """ vec = new_fvec(buf_size, channels) out = new_fvec(1, channels) frequency = samplerate/2*8/buf_size for i in range(1,100): fvec_write_sample(vec,-.01*i,0, 0) fvec_write_sample(vec,-.01*i,0, buf_size/4) fvec_write_sample(vec,-.01*i,0, buf_size/2) fvec_write_sample(vec,-.01*i,0,3*buf_size/4) aubio_pitch_do(self.o,vec, out) self.assertAlmostEqual(fvec_read_sample(out, 0, 0),frequency,1) del vec def test_pitch_run_8_impulses(self): """ run pitch on a train of 8 impulses """ vec = new_fvec(buf_size, channels) out = new_fvec(1, channels) fvec_write_sample(vec, 1.,0, 0) fvec_write_sample(vec,-1.,0, buf_size/8) fvec_write_sample(vec, 1.,0, buf_size/4) fvec_write_sample(vec,-1.,0,3*buf_size/8) fvec_write_sample(vec, 1.,0, buf_size/2) fvec_write_sample(vec,-1.,0,5*buf_size/8) fvec_write_sample(vec, 1.,0,3*buf_size/4) fvec_write_sample(vec,-1.,0,7*buf_size/8) for i in range(100): aubio_pitch_do(self.o,vec, out) self.assertAlmostEqual(fvec_read_sample(out, 0, 0), samplerate/2/buf_size*8, 1) del vec """ class pitch_yin_test_case(pitch_test_case): def setUp(self, type = aubio_pitch_yin): self.create(type=type) class pitch_fcomb_test_case(pitch_test_case): def setUp(self, type = aubio_pitch_fcomb): self.create(type=type) class pitch_mcomb_test_case(pitch_test_case): def setUp(self, type = aubio_pitch_mcomb): self.create(type=type) class pitch_schmitt_test_case(pitch_test_case): def setUp(self, type = aubio_pitch_schmitt): self.create(type=type) """ if __name__ == '__main__': unittest.main()