3 from numpy.testing import TestCase, assert_equal, assert_array_less
4 from aubio import fvec, cvec, pvoc, float_type
5 from nose2.tools import params
8 if float_type == 'float32':
13 def create_sine(hop_s, freq, samplerate):
14 t = np.arange(hop_s).astype(float_type)
15 return np.sin( 2. * np.pi * freq * t / float(samplerate))
17 def create_noise(hop_s):
18 return np.random.rand(hop_s).astype(float_type) * 2. - 1.
20 class aubio_pvoc_test_case(TestCase):
21 """ pvoc object test case """
23 def test_members_automatic_sizes_default(self):
24 """ check object creation with default parameters """
26 assert_equal ([f.win_s, f.hop_s], [1024, 512])
28 def test_members_unnamed_params(self):
29 """ check object creation with unnamed parameters """
31 assert_equal ([f.win_s, f.hop_s], [2048, 128])
33 def test_members_named_params(self):
34 """ check object creation with named parameters """
35 f = pvoc(hop_s = 128, win_s = 2048)
36 assert_equal ([f.win_s, f.hop_s], [2048, 128])
39 """ check the resynthesis of zeros gives zeros """
40 win_s, hop_s = 1024, 256
41 f = pvoc (win_s, hop_s)
43 for time in range( int ( 4 * win_s / hop_s ) ):
47 assert_equal ( s.norm, 0.)
48 assert_equal ( s.phas, 0.)
71 def test_resynth_steps_noise(self, hop_s, ratio):
72 """ check the resynthesis of a random signal is correct """
73 sigin = create_noise(hop_s)
74 self.reconstruction(sigin, hop_s, ratio)
78 (44100, 256, 4, 1203),
79 (44100, 256, 2, 3045),
83 (44100, 1024, 8, 445),
84 (44100, 1024, 4, 445),
85 (44100, 1024, 2, 445),
86 ( 8000, 1024, 2, 445),
87 (22050, 1024, 2, 445),
89 (96000, 1024, 8, 47000),
92 def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq):
93 """ check the resynthesis of a sine is correct """
94 sigin = create_sine(hop_s, freq, samplerate)
95 self.reconstruction(sigin, hop_s, ratio)
97 def reconstruction(self, sigin, hop_s, ratio):
99 f = pvoc(buf_s, hop_s)
101 r2 = f.rdo( f(sigin) )
102 for i in range(1, ratio):
103 r2 = f.rdo( f(zeros) )
104 # compute square errors
105 sq_error = (r2 - sigin)**2
106 # make sure all square errors are less than desired precision
107 assert_array_less(sq_error, max_sq_error)
109 def test_large_input_timegrain(self):
113 with self.assertRaises(ValueError):
116 def test_small_input_timegrain(self):
120 with self.assertRaises(ValueError):
123 def test_large_input_fftgrain(self):
127 with self.assertRaises(ValueError):
130 def test_small_input_fftgrain(self):
134 with self.assertRaises(ValueError):
137 if __name__ == '__main__':
138 from nose2 import main