History

moved tests to subdirectory

Paul Brossier committed 13 years ago

Commit 26adcfb1 parent 985ec9e21 files · +0 −0Browse files

Showing the changes to python/tests (13 of 21 files). Show all

Unified · Split

13 files
  1. python/tests/test_aubio.py +14 −0
  2. python/tests/test_cvec.py +50 −0
  3. python/tests/test_fft.py +113 −0
  4. python/tests/test_filter.py +68 −0
  5. python/tests/test_filterbank.py +23 −0
  6. python/tests/test_filterbank_mel.py +51 −0
  7. python/tests/test_fvec.py +135 −0
  8. python/tests/test_onset.py +20 −0
  9. python/tests/test_peakpicker.py +115 −0
  10. python/tests/test_phasevoc.py +65 −0
  11. python/tests/test_pitch.py +101 −0
  12. python/tests/test_source.py +27 −0
  13. python/tests/test_specdesc.py +238 −0
python/tests/test_aubio.py+14−0
@@ -0,0 +1,14 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4
5class aubiomodule_test_case(TestCase):
6
7 def test_import(self):
8 """ try importing aubio """
9 import aubio
10
11if __name__ == '__main__':
12 from unittest import main
13 main()
14
python/tests/test_cvec.py+50−0
@@ -0,0 +1,50 @@
1from numpy.testing import TestCase, run_module_suite
2from numpy.testing import assert_equal, assert_almost_equal
3from aubio import cvec
4from numpy import array, shape, pi
5
6class aubio_cvec_test_case(TestCase):
7
8 def test_vector_created_with_zeroes(self):
9 a = cvec(10)
10 a
11 shape(a.norm)
12 shape(a.phas)
13 a.norm[0]
14 assert_equal(a.norm, 0.)
15 assert_equal(a.phas, 0.)
16
17 def test_vector_assign_element(self):
18 a = cvec()
19 a.norm[0] = 1
20 assert_equal(a.norm[0], 1)
21 a.phas[0] = 1
22 assert_equal(a.phas[0], 1)
23
24 def test_vector_assign_element_end(self):
25 a = cvec()
26 a.norm[-1] = 1
27 assert_equal(a.norm[-1], 1)
28 assert_equal(a.norm[len(a.norm)-1], 1)
29 a.phas[-1] = 1
30 assert_equal(a.phas[-1], 1)
31 assert_equal(a.phas[len(a.phas)-1], 1)
32
33 def test_assign_cvec_norm_slice(self):
34 spec = cvec(1024)
35 spec.norm[40:100] = 100
36 assert_equal (spec.norm[0:40], 0)
37 assert_equal (spec.norm[40:100], 100)
38 assert_equal (spec.norm[100:-1], 0)
39 assert_equal (spec.phas, 0)
40
41 def test_assign_cvec_phas_slice(self):
42 spec = cvec(1024)
43 spec.phas[39:-1] = -pi
44 assert_equal (spec.phas[0:39], 0)
45 assert_equal (spec.phas[39:-1], -pi)
46 assert_equal (spec.norm, 0)
47
48if __name__ == '__main__':
49 from unittest import main
50 main()
python/tests/test_fft.py+113−0
@@ -0,0 +1,113 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5# WARNING: numpy also has an fft object
6from aubio import fvec, fft, cvec
7from numpy import array, shape
8from math import pi
9
10class aubio_fft_test_case(TestCase):
11
12 def test_members(self):
13 f = fft()
14 assert_equal (f.win_s, 1024)
15
16 def test_output_dimensions(self):
17 """ check the dimensions of output """
18 win_s = 1024
19 timegrain = fvec(win_s)
20 f = fft(win_s)
21 fftgrain = f (timegrain)
22 assert_equal (fftgrain.norm, 0)
23 assert_equal (shape(fftgrain.norm), (win_s/2+1,))
24 assert_equal (fftgrain.phas, 0)
25 assert_equal (shape(fftgrain.phas), (win_s/2+1,))
26
27 def test_zeros(self):
28 """ check the transform of zeros """
29 win_s = 512
30 timegrain = fvec(win_s)
31 f = fft(win_s)
32 fftgrain = f(timegrain)
33 assert_equal ( fftgrain.norm == 0, True )
34 assert_equal ( fftgrain.phas == 0, True )
35
36 def test_impulse(self):
37 """ check the transform of one impulse at a random place """
38 from random import random
39 from math import floor
40 win_s = 256
41 i = floor(random()*win_s)
42 impulse = pi * random()
43 f = fft(win_s)
44 timegrain = fvec(win_s)
45 timegrain[i] = impulse
46 fftgrain = f ( timegrain )
47 #self.plot_this ( fftgrain.phas )
48 assert_almost_equal ( fftgrain.norm, impulse, decimal = 6 )
49 assert_equal ( fftgrain.phas <= pi, True)
50 assert_equal ( fftgrain.phas >= -pi, True)
51
52 def test_impulse_negative(self):
53 """ check the transform of one impulse at a random place """
54 from random import random
55 from math import floor
56 win_s = 256
57 i = 0
58 impulse = -10.
59 f = fft(win_s)
60 timegrain = fvec(win_s)
61 timegrain[i] = impulse
62 fftgrain = f ( timegrain )
63 #self.plot_this ( fftgrain.phas )
64 assert_almost_equal ( fftgrain.norm, abs(impulse), decimal = 6 )
65 if impulse < 0:
66 # phase can be pi or -pi, as it is not unwrapped
67 assert_almost_equal ( abs(fftgrain.phas[1:-1]) , pi, decimal = 6 )
68 assert_almost_equal ( fftgrain.phas[0], pi, decimal = 6)
69 assert_almost_equal ( fftgrain.phas[-1], pi, decimal = 6)
70 else:
71 assert_equal ( fftgrain.phas[1:-1] == 0, True)
72 assert_equal ( fftgrain.phas[0] == 0, True)
73 assert_equal ( fftgrain.phas[-1] == 0, True)
74 # now check the resynthesis
75 synthgrain = f.rdo ( fftgrain )
76 #self.plot_this ( fftgrain.phas.T )
77 assert_equal ( fftgrain.phas <= pi, True)
78 assert_equal ( fftgrain.phas >= -pi, True)
79 #self.plot_this ( synthgrain - timegrain )
80 assert_almost_equal ( synthgrain, timegrain, decimal = 6 )
81
82 def test_impulse_at_zero(self):
83 """ check the transform of one impulse at a index 0 """
84 win_s = 1024
85 impulse = pi
86 f = fft(win_s)
87 timegrain = fvec(win_s)
88 timegrain[0] = impulse
89 fftgrain = f ( timegrain )
90 #self.plot_this ( fftgrain.phas )
91 assert_equal ( fftgrain.phas[0], 0)
92 # could be 0 or -0 depending on fft implementation (0 for fftw3, -0 for ooura)
93 assert_almost_equal ( fftgrain.phas[1], 0)
94 assert_almost_equal ( fftgrain.norm[0], impulse, decimal = 6 )
95
96 def test_rdo_before_do(self):
97 """ check running fft.rdo before fft.do works """
98 win_s = 1024
99 impulse = pi
100 f = fft(win_s)
101 fftgrain = cvec(win_s)
102 t = f.rdo( fftgrain )
103 assert_equal ( t, 0 )
104
105 def plot_this(self, this):
106 from pylab import plot, show
107 plot ( this )
108 show ()
109
110if __name__ == '__main__':
111 from unittest import main
112 main()
113
python/tests/test_filter.py+68−0
@@ -0,0 +1,68 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, assert_equal, assert_almost_equal
4from aubio import fvec, digital_filter
5from numpy import array
6
7def array_from_text_file(filename, dtype = 'float'):
8 return array([line.split() for line in open(filename).readlines()],
9 dtype = dtype)
10
11class aubio_filter_test_case(TestCase):
12
13 def test_members(self):
14 f = digital_filter()
15 assert_equal (f.order, 7)
16 f = digital_filter(5)
17 assert_equal (f.order, 5)
18 f(fvec())
19
20 def test_cweighting_error(self):
21 f = digital_filter (2)
22 self.assertRaises ( ValueError, f.set_c_weighting, 44100 )
23 f = digital_filter (8)
24 self.assertRaises ( ValueError, f.set_c_weighting, 44100 )
25 f = digital_filter (5)
26 self.assertRaises ( ValueError, f.set_c_weighting, 4000 )
27 f = digital_filter (5)
28 self.assertRaises ( ValueError, f.set_c_weighting, 193000 )
29 f = digital_filter (7)
30 self.assertRaises ( ValueError, f.set_a_weighting, 193000 )
31 f = digital_filter (5)
32 self.assertRaises ( ValueError, f.set_a_weighting, 192000 )
33
34 def test_c_weighting(self):
35 expected = array_from_text_file('c_weighting_test_simple.expected')
36 f = digital_filter(5)
37 f.set_c_weighting(44100)
38 v = fvec(32)
39 v[12] = .5
40 u = f(v)
41 assert_almost_equal (expected[1], u)
42
43 def test_a_weighting(self):
44 expected = array_from_text_file('a_weighting_test_simple.expected')
45 f = digital_filter(7)
46 f.set_a_weighting(44100)
47 v = fvec(32)
48 v[12] = .5
49 u = f(v)
50 assert_almost_equal (expected[1], u)
51
52 def test_a_weighting_parted(self):
53 expected = array_from_text_file('a_weighting_test_simple.expected')
54 f = digital_filter(7)
55 f.set_a_weighting(44100)
56 v = fvec(16)
57 v[12] = .5
58 u = f(v)
59 assert_almost_equal (expected[1][:16], u)
60 # one more time
61 v = fvec(16)
62 u = f(v)
63 assert_almost_equal (expected[1][16:], u)
64
65if __name__ == '__main__':
66 from unittest import main
67 main()
68
python/tests/test_filterbank.py+23−0
@@ -0,0 +1,23 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5from numpy import random
6from aubio import cvec, filterbank
7
8class aubio_filterbank_test_case(TestCase):
9
10 def test_members(self):
11 f = filterbank(40, 512)
12 assert_equal ([f.n_filters, f.win_s], [40, 512])
13
14 def test_set_coeffs(self):
15 f = filterbank(40, 512)
16 r = random.random([40, 512 / 2 + 1]).astype('float32')
17 f.set_coeffs(r)
18 assert_equal (r, f.get_coeffs())
19
20if __name__ == '__main__':
21 from unittest import main
22 main()
23
python/tests/test_filterbank_mel.py+51−0
@@ -0,0 +1,51 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5from numpy import array, shape
6from aubio import cvec, filterbank
7
8class aubio_filterbank_mel_test_case(TestCase):
9
10 def test_slaney(self):
11 f = filterbank(40, 512)
12 f.set_mel_coeffs_slaney(16000)
13 a = f.get_coeffs()
14 assert_equal(shape (a), (40, 512/2 + 1) )
15
16 def test_other_slaney(self):
17 f = filterbank(40, 512*2)
18 f.set_mel_coeffs_slaney(44100)
19 a = f.get_coeffs()
20 #print "sum is", sum(sum(a))
21 for win_s in [256, 512, 1024, 2048, 4096]:
22 f = filterbank(40, win_s)
23 f.set_mel_coeffs_slaney(320000)
24 a = f.get_coeffs()
25 #print "sum is", sum(sum(a))
26
27 def test_triangle_freqs_zeros(self):
28 f = filterbank(9, 1024)
29 freq_list = [40, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 15000, 24000]
30 freqs = array(freq_list, dtype = 'float32')
31 f.set_triangle_bands(freqs, 48000)
32 f.get_coeffs().T
33 assert_equal ( f(cvec(1024)), 0)
34
35 def test_triangle_freqs_ones(self):
36 f = filterbank(9, 1024)
37 freq_list = [40, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 15000, 24000]
38 freqs = array(freq_list, dtype = 'float32')
39 f.set_triangle_bands(freqs, 48000)
40 f.get_coeffs().T
41 spec = cvec(1024)
42 spec.norm[:] = 1
43 assert_almost_equal ( f(spec),
44 [ 0.02070313, 0.02138672, 0.02127604, 0.02135417,
45 0.02133301, 0.02133301, 0.02133311, 0.02133334, 0.02133345])
46
47if __name__ == '__main__':
48 from unittest import main
49 main()
50
51
python/tests/test_fvec.py+135−0
@@ -0,0 +1,135 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5from aubio import fvec, zero_crossing_rate, alpha_norm, min_removal
6from numpy import array, shape
7
8class aubio_fvec_test_case(TestCase):
9
10 def test_vector_created_with_zeroes(self):
11 a = fvec(10)
12 a
13 shape(a)
14 a[0]
15 #del a
16 assert_equal(array(a), 0.)
17
18 def test_vector_create_with_list(self):
19 a = fvec([0,1,2,3])
20 assert_equal (range(4), a)
21
22 def test_vector_assign_element(self):
23 a = fvec()
24 a[0] = 1
25 assert_equal(a[0], 1)
26
27 def test_vector_assign_element_end(self):
28 a = fvec()
29 a[-1] = 1
30 assert_equal(a[-1], 1)
31 assert_equal(a[len(a)-1], 1)
32
33 def test_vector(self):
34 a = fvec()
35 a, len(a) #a.length
36 a[0]
37 array(a)
38 a = fvec(10)
39 a = fvec(1)
40 a.T
41 array(a).T
42 a = range(len(a))
43
44 def test_wrong_values(self):
45 self.assertRaises (ValueError, fvec, -10)
46
47 a = fvec(2)
48 self.assertRaises (IndexError, a.__getitem__, 3)
49 self.assertRaises (IndexError, a.__getitem__, 2)
50
51 def test_alpha_norm_of_fvec(self):
52 a = fvec(2)
53 self.assertEquals (alpha_norm(a, 1), 0)
54 a[0] = 1
55 self.assertEquals (alpha_norm(a, 1), 0.5)
56 a[1] = 1
57 self.assertEquals (alpha_norm(a, 1), 1)
58 a = array([0, 1], dtype='float32')
59 from math import sqrt
60 assert_almost_equal (alpha_norm(a, 2), sqrt(2)/2.)
61
62 def test_alpha_norm_of_none(self):
63 self.assertRaises (ValueError, alpha_norm, None, 1)
64
65 def test_alpha_norm_of_array_of_float32(self):
66 # check scalar fails
67 a = array(1, dtype = 'float32')
68 self.assertRaises (ValueError, alpha_norm, a, 1)
69 # check 2d array fails
70 a = array([[2],[4]], dtype = 'float32')
71 self.assertRaises (ValueError, alpha_norm, a, 1)
72 # check 1d array
73 a = array(range(10), dtype = 'float32')
74 self.assertEquals (alpha_norm(a, 1), 4.5)
75
76 def test_alpha_norm_of_array_of_int(self):
77 a = array(1, dtype = 'int')
78 self.assertRaises (ValueError, alpha_norm, a, 1)
79 a = array([[[1,2],[3,4]]], dtype = 'int')
80 self.assertRaises (ValueError, alpha_norm, a, 1)
81 a = array(range(10), dtype = 'int')
82 self.assertRaises (ValueError, alpha_norm, a, 1)
83
84 def test_alpha_norm_of_array_of_string (self):
85 a = "hello"
86 self.assertRaises (ValueError, alpha_norm, a, 1)
87
88 def test_zero_crossing_rate(self):
89 a = array([0,1,-1], dtype='float32')
90 assert_almost_equal (zero_crossing_rate(a), 1./3. )
91 a = array([0.]*100, dtype='float32')
92 self.assertEquals (zero_crossing_rate(a), 0 )
93 a = array([-1.]*100, dtype='float32')
94 self.assertEquals (zero_crossing_rate(a), 0 )
95 a = array([1.]*100, dtype='float32')
96 self.assertEquals (zero_crossing_rate(a), 0 )
97
98 def test_alpha_norm_of_array_of_float64(self):
99 # check scalar fail
100 a = array(1, dtype = 'float64')
101 self.assertRaises (ValueError, alpha_norm, a, 1)
102 # check 3d array fail
103 a = array([[[1,2],[3,4]]], dtype = 'float64')
104 self.assertRaises (ValueError, alpha_norm, a, 1)
105 # check float64 1d array fail
106 a = array(range(10), dtype = 'float64')
107 self.assertRaises (ValueError, alpha_norm, a, 1)
108 # check float64 2d array fail
109 a = array([range(10), range(10)], dtype = 'float64')
110 self.assertRaises (ValueError, alpha_norm, a, 1)
111
112 def test_fvec_min_removal_of_array(self):
113 a = array([20,1,19], dtype='float32')
114 b = min_removal(a)
115 assert_equal (array(b), [19, 0, 18])
116 assert_equal (b, [19, 0, 18])
117 assert_equal (a, b)
118 a[0] = 0
119 assert_equal (a, b)
120
121 def test_fvec_min_removal_of_array_float64(self):
122 a = array([20,1,19], dtype='float64')
123 self.assertRaises (ValueError, min_removal, a)
124
125 def test_fvec_min_removal_of_fvec(self):
126 a = fvec(3)
127 a = array([20, 1, 19], dtype = 'float32')
128 b = min_removal(a)
129 assert_equal (array(b), [19, 0, 18])
130 assert_equal (b, [19, 0, 18])
131 assert_equal (a, b)
132
133if __name__ == '__main__':
134 from unittest import main
135 main()
python/tests/test_onset.py+20−0
@@ -0,0 +1,20 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5# WARNING: numpy also has an fft object
6from aubio import onset, cvec
7from numpy import array, shape, arange, zeros, log
8from math import pi
9
10class aubio_onset(TestCase):
11
12 def test_members(self):
13 o = onset()
14 assert_equal ([o.buf_size, o.hop_size, o.method, o.samplerate],
15 [1024,512,'default',44100])
16
17
18if __name__ == '__main__':
19 from unittest import main
20 main()
python/tests/test_peakpicker.py+115−0
@@ -0,0 +1,115 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, assert_equal, assert_almost_equal
4from aubio import peakpicker, fvec
5
6class aubio_peakpicker(TestCase):
7
8 def test_members(self):
9 o = peakpicker()
10
11 def test_peakpicker_zeroes(self):
12 o = peakpicker()
13 assert_equal(o.get_thresholded_input(), 0.)
14
15 def test_peakpick_set_threshold(self):
16 o = peakpicker()
17 new_threshold = threshold
18 o.set_threshold(new_threshold)
19 assert_almost_equal(new_threshold, o.get_threshold())
20
21 def test_peakpicker_get_threshold(self):
22 o = peakpicker()
23 new_threshold = o.get_threshold()
24 o.set_threshold(new_threshold)
25 assert_equal(new_threshold, o.get_threshold())
26
27buf_size = 1024
28slice_size = 5
29delay = 1
30threshold = .9
31
32class aubio_peakpicker_peaks(TestCase):
33
34 def setUp(self):
35 self.o = peakpicker()
36 self.o.set_threshold (threshold)
37 self.vec = fvec(buf_size)
38
39 def test_peakpicker_impulse(self):
40 vec = self.vec; o = self.o
41 a = 345
42 vec[a] = 1000.
43 self.peaks = [a]
44
45 def test_peakpicker_ramp_up(self):
46 vec = self.vec; o = self.o
47 a = 345
48 vec[a] = 1000. / 4. * 1.
49 vec[a+1] = 1000. / 4. * 2.
50 vec[a+2] = 1000. / 4. * 3.
51 vec[a+3] = 1000.
52 self.peaks = [a+1]
53
54 def test_peakpicker_ramp_down(self):
55 vec = self.vec; o = self.o
56 a = 345
57 vec[a] = 1000.
58 vec[a+1] = 1000. / 4. * 3.
59 vec[a+2] = 1000. / 4. * 2.
60 vec[a+3] = 1000. / 4. * 1.
61 self.peaks = [a]
62
63 def test_peakpicker_plateau(self):
64 vec = self.vec; o = self.o
65 a = 345
66 vec[a] = 1000. / 2
67 vec[a+1] = 1000.
68 vec[a+2] = 1000.
69 vec[a+3] = 1000.
70 vec[a+4] = 1000. / 2
71 self.peaks = [a+1]
72
73 def test_peakpicker_consecutive_peaks(self):
74 vec = self.vec; o = self.o
75 a = 345
76 vec[a] = 1000. / 2
77 vec[a+1] = 1000.
78 vec[a+3] = 1000.
79 vec[a+4] = 1000. / 2
80 self.peaks = [a]
81
82 def test_peakpicker_distant_peaks(self):
83 vec = self.vec; o = self.o
84 a = 345
85 vec[a] = 1000.
86 vec[a+7] = 1000.
87 self.peaks = [a, a+7]
88
89 def test_peakpicker_very_distant_peaks(self):
90 vec = self.vec; o = self.o
91 a = 345
92 vec[a] = 1000.
93 vec[a+67] = 1000.
94 self.peaks = [a, a+67]
95
96 def tearDown(self):
97 fpeaks = []
98 for index in range(0,buf_size-slice_size):
99 sliced = self.vec[index:index+slice_size]
100 findex = self.o(sliced)
101 if findex:
102 # we found a peak
103 fpeak = index - findex - delay
104 #print self.peaks, index, '-', findex, '-', delay, '=', fpeak
105 if not round(index - findex - delay) in self.peaks:
106 self.fail('missing peak ' + str(fpeak))
107 fpeaks.append(fpeak)
108 if len(fpeaks) != len(self.peaks):
109 self.fail('some peaks of ' + str(self.peaks) + 'were not found, got only ' + str(fpeaks))
110 #print
111 #print fpeaks, self.peaks
112
113if __name__ == '__main__':
114 from unittest import main
115 main()
python/tests/test_phasevoc.py+65−0
@@ -0,0 +1,65 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, run_module_suite
4from numpy.testing import assert_equal, assert_almost_equal
5from aubio import fvec, cvec, pvoc
6from numpy import array, shape
7
8class aubio_pvoc_test_case(TestCase):
9
10 def test_members(self):
11 f = pvoc()
12 assert_equal ([f.win_s, f.hop_s], [1024, 512])
13 f = pvoc(2048, 128)
14 assert_equal ([f.win_s, f.hop_s], [2048, 128])
15
16 def test_zeros(self):
17 win_s, hop_s = 1024, 256
18 f = pvoc (win_s, hop_s)
19 t = fvec (hop_s)
20 for time in range( 4 * win_s / hop_s ):
21 s = f(t)
22 r = f.rdo(s)
23 assert_equal ( array(t), 0)
24 assert_equal ( s.norm, 0)
25 assert_equal ( s.phas, 0)
26 assert_equal ( r, 0)
27
28 def test_steps_two_channels(self):
29 """ check the resynthesis of steps is correct """
30 f = pvoc(1024, 512)
31 t1 = fvec(512)
32 t2 = fvec(512)
33 # positive step in first channel
34 t1[100:200] = .1
35 # positive step in second channel
36 t1[20:50] = -.1
37 s1 = f(t1)
38 r1 = f.rdo(s1)
39 s2 = f(t2)
40 r2 = f.rdo(s2)
41 #self.plot_this ( s1.norm.T )
42 assert_almost_equal ( t1, r2, decimal = 6 )
43
44 def test_steps_three_random_channels(self):
45 from random import random
46 f = pvoc(64, 16)
47 t0 = fvec(16)
48 t1 = fvec(16)
49 for i in xrange(16):
50 t1[i] = random() * 2. - 1.
51 t2 = f.rdo(f(t1))
52 t2 = f.rdo(f(t0))
53 t2 = f.rdo(f(t0))
54 t2 = f.rdo(f(t0))
55 assert_almost_equal( t1, t2, decimal = 6 )
56
57 def plot_this( self, this ):
58 from pylab import semilogy, show
59 semilogy ( this )
60 show ()
61
62if __name__ == '__main__':
63 from unittest import main
64 main()
65
python/tests/test_pitch.py+101−0
@@ -0,0 +1,101 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase
4from numpy.testing import assert_equal, assert_almost_equal
5from numpy import random, sin, arange, mean, median
6from math import pi
7from aubio import fvec, pitch
8
9class aubio_mathutils_test_case(TestCase):
10
11 def test_members(self):
12 p = pitch()
13 assert_equal ( [p.method, p.buf_size, p.hop_size, p.samplerate],
14 ['default', 1024, 512, 44100])
15
16 def test_members_not_default(self):
17 p = pitch('mcomb', 2048, 512, 32000)
18 assert_equal ( [p.method, p.buf_size, p.hop_size, p.samplerate],
19 ['mcomb', 2048, 512, 32000])
20
21 def test_run_on_zeros(self):
22 p = pitch('mcomb', 2048, 512, 32000)
23 f = fvec (512)
24 assert_equal ( p(f), 0. )
25
26 def test_run_on_ones(self):
27 p = pitch('mcomb', 2048, 512, 32000)
28 f = fvec (512)
29 f[:] = 1
30 assert( p(f) != 0. )
31
32 def test_run_default_on_sinusoid(self):
33 method = 'default'
34 buf_size = 2048
35 hop_size = 512
36 samplerate = 32000
37 freq = 450.
38 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
39
40 def test_run_schmitt_on_sinusoid(self):
41 method = 'schmitt'
42 buf_size = 4096
43 hop_size = 512
44 samplerate = 44100
45 freq = 800.
46 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
47
48 def test_run_mcomb_on_sinusoid(self):
49 method = 'mcomb'
50 buf_size = 2048
51 hop_size = 512
52 samplerate = 44100
53 freq = 10000.
54 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
55
56 def test_run_fcomb_on_sinusoid(self):
57 method = 'fcomb'
58 buf_size = 2048
59 hop_size = 512
60 samplerate = 32000
61 freq = 440.
62 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
63
64 def test_run_yin_on_sinusoid(self):
65 method = 'yin'
66 buf_size = 4096
67 hop_size = 512
68 samplerate = 32000
69 freq = 880.
70 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
71
72 def test_run_yinfft_on_sinusoid(self):
73 method = 'yinfft'
74 buf_size = 2048
75 hop_size = 512
76 samplerate = 32000
77 freq = 640.
78 self.run_pitch_on_sinusoid(method, buf_size, hop_size, samplerate, freq)
79
80 def run_pitch_on_sinusoid(self, method, buf_size, hop_size, samplerate, freq):
81 p = pitch(method, buf_size, hop_size, samplerate)
82 sinvec = self.build_sinusoid(hop_size * 100, freq, samplerate)
83 self.run_pitch(p, sinvec, freq)
84
85 def build_sinusoid(self, length, freq, samplerate):
86 return sin( 2. * pi * arange(length).astype('float32') * freq / samplerate)
87
88 def run_pitch(self, p, input_vec, freq):
89 count = 0
90 pitches, errors = [], []
91 for vec_slice in input_vec.reshape((-1, p.hop_size)):
92 pitch = p(vec_slice)
93 pitches.append(pitch)
94 errors.append(1. - pitch / freq)
95 # check that the mean of all relative errors is less than 10%
96 assert_almost_equal (mean(errors), 0., decimal = 2)
97
98if __name__ == '__main__':
99 from unittest import main
100 main()
101
python/tests/test_source.py+27−0
@@ -0,0 +1,27 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, assert_equal, assert_almost_equal
4from aubio import fvec, source
5from numpy import array
6
7path = "/Users/piem/archives/sounds/loops/drum_Chocolate_Milk_-_Ation_Speaks_Louder_Than_Words.wav"
8
9class aubio_filter_test_case(TestCase):
10
11 def test_members(self):
12 f = source(path)
13 print dir(f)
14
15 def test_read(self):
16 f = source(path)
17 total_frames = 0
18 while True:
19 vec, read = f()
20 total_frames += read
21 if read < f.hop_size: break
22 print "read", total_frames / float(f.samplerate), " seconds from", path
23
24if __name__ == '__main__':
25 from unittest import main
26 main()
27
python/tests/test_specdesc.py+238−0
@@ -0,0 +1,238 @@
1#! /usr/bin/env python
2
3from numpy.testing import TestCase, assert_equal, assert_almost_equal
4from numpy import random, arange, log, zeros
5from aubio import specdesc, cvec
6from math import pi
7
8methods = ["default",
9 "energy",
10 "hfc",
11 "complex",
12 "phase",
13 "specdiff",
14 "kl",
15 "mkl",
16 "specflux",
17 "centroid",
18 "spread",
19 "skewness",
20 "kurtosis",
21 "slope",
22 "decrease",
23 "rolloff"]
24buf_size = 2048
25
26class aubio_specdesc(TestCase):
27
28 def test_members(self):
29 o = specdesc()
30
31 for method in methods:
32 o = specdesc(method, buf_size)
33 assert_equal ([o.buf_size, o.method], [buf_size, method])
34
35 spec = cvec(buf_size)
36 spec.norm[0] = 1
37 spec.norm[1] = 1./2.
38 #print "%20s" % method, str(o(spec))
39 o(spec)
40 spec.norm = random.random_sample((len(spec.norm),)).astype('float32')
41 spec.phas = random.random_sample((len(spec.phas),)).astype('float32')
42 #print "%20s" % method, str(o(spec))
43 assert (o(spec) != 0.)
44
45 def test_hfc(self):
46 o = specdesc("hfc", buf_size)
47 spec = cvec(buf_size)
48 # hfc of zeros is zero
49 assert_equal (o(spec), 0.)
50 # hfc of ones is sum of all bin numbers
51 spec.norm[:] = 1
52 expected = sum(range(buf_size/2 + 2))
53 assert_equal (o(spec), expected)
54 # changing phase doesn't change anything
55 spec.phas[:] = 1
56 assert_equal (o(spec), sum(range(buf_size/2 + 2)))
57
58 def test_phase(self):
59 o = specdesc("phase", buf_size)
60 spec = cvec(buf_size)
61 # phase of zeros is zero
62 assert_equal (o(spec), 0.)
63 spec.phas = random.random_sample((len(spec.phas),)).astype('float32')
64 # phase of random is not zero
65 spec.norm[:] = 1
66 assert (o(spec) != 0.)
67
68 def test_specdiff(self):
69 o = specdesc("phase", buf_size)
70 spec = cvec(buf_size)
71 # specdiff of zeros is zero
72 assert_equal (o(spec), 0.)
73 spec.phas = random.random_sample((len(spec.phas),)).astype('float32')
74 # phase of random is not zero
75 spec.norm[:] = 1
76 assert (o(spec) != 0.)
77
78 def test_hfc(self):
79 o = specdesc("hfc")
80 c = cvec()
81 assert_equal( 0., o(c))
82 a = arange(c.length, dtype='float32')
83 c.norm = a
84 assert_equal (a, c.norm)
85 assert_equal ( sum(a*(a+1)), o(c))
86
87 def test_complex(self):
88 o = specdesc("complex")
89 c = cvec()
90 assert_equal( 0., o(c))
91 a = arange(c.length, dtype='float32')
92 c.norm = a
93 assert_equal (a, c.norm)
94 # the previous run was on zeros, so previous frames are still 0
95 # so we have sqrt ( abs ( r2 ^ 2) ) == r2
96 assert_equal ( sum(a), o(c))
97 # second time. c.norm = a, so, r1 = r2, and the euclidian distance is 0
98 assert_equal ( 0, o(c))
99
100 def test_kl(self):
101 o = specdesc("kl")
102 c = cvec()
103 assert_equal( 0., o(c))
104 a = arange(c.length, dtype='float32')
105 c.norm = a
106 assert_almost_equal( sum(a * log(1.+ a/1.e-10 ) ) / o(c), 1., decimal=6)
107
108 def test_mkl(self):
109 o = specdesc("mkl")
110 c = cvec()
111 assert_equal( 0., o(c))
112 a = arange(c.length, dtype='float32')
113 c.norm = a
114 assert_almost_equal( sum(log(1.+ a/1.e-10 ) ) / o(c), 1, decimal=6)
115
116 def test_specflux(self):
117 o = specdesc("specflux")
118 c = cvec()
119 assert_equal( 0., o(c))
120 a = arange(c.length, dtype='float32')
121 c.norm = a
122 assert_equal( sum(a), o(c))
123 assert_equal( 0, o(c))
124 c.norm = zeros(c.length, dtype='float32')
125 assert_equal( 0, o(c))
126
127 def test_centroid(self):
128 o = specdesc("centroid")
129 c = cvec()
130 # make sure centroid of zeros is zero
131 assert_equal( 0., o(c))
132 a = arange(c.length, dtype='float32')
133 c.norm = a
134 centroid = sum(a*a) / sum(a)
135 assert_almost_equal (centroid, o(c), decimal = 2)
136
137 c.norm = a * .5
138 assert_almost_equal (centroid, o(c), decimal = 2)
139
140 def test_spread(self):
141 o = specdesc("spread")
142 c = cvec(2048)
143 ramp = arange(c.length, dtype='float32')
144 assert_equal( 0., o(c))
145
146 a = ramp
147 c.norm = a
148 centroid = sum(a*a) / sum(a)
149 spread = sum( a * pow(ramp - centroid, 2.) ) / sum(a)
150 assert_almost_equal (o(c), spread, decimal = 1)
151
152 def test_skewness(self):
153 o = specdesc("skewness")
154 c = cvec()
155 assert_equal( 0., o(c))
156 a = arange(c.length, dtype='float32')
157 c.norm = a
158 centroid = sum(a*a) / sum(a)
159 spread = sum( (a - centroid)**2 *a) / sum(a)
160 skewness = sum( (a - centroid)**3 *a) / sum(a) / spread **1.5
161 assert_almost_equal (skewness, o(c), decimal = 2)
162
163 c.norm = a * 3
164 assert_almost_equal (skewness, o(c), decimal = 2)
165
166 def test_kurtosis(self):
167 o = specdesc("kurtosis")
168 c = cvec()
169 assert_equal( 0., o(c))
170 a = arange(c.length, dtype='float32')
171 c.norm = a
172 centroid = sum(a*a) / sum(a)
173 spread = sum( (a - centroid)**2 *a) / sum(a)
174 kurtosis = sum( (a - centroid)**4 *a) / sum(a) / spread **2
175 assert_almost_equal (kurtosis, o(c), decimal = 2)
176
177 def test_slope(self):
178 o = specdesc("slope")
179 c = cvec()
180 assert_equal( 0., o(c))
181 a = arange(c.length * 2, 0, -2, dtype='float32')
182 k = arange(c.length, dtype='float32')
183 c.norm = a
184 num = len(a) * sum(k*a) - sum(k)*sum(a)
185 den = (len(a) * sum(k**2) - sum(k)**2)
186 slope = num/den/sum(a)
187 assert_almost_equal (slope, o(c), decimal = 5)
188
189 a = arange(0, c.length * 2, +2, dtype='float32')
190 c.norm = a
191 num = len(a) * sum(k*a) - sum(k)*sum(a)
192 den = (len(a) * sum(k**2) - sum(k)**2)
193 slope = num/den/sum(a)
194 assert_almost_equal (slope, o(c), decimal = 5)
195
196 a = arange(0, c.length * 2, +2, dtype='float32')
197 c.norm = a * 2
198 assert_almost_equal (slope, o(c), decimal = 5)
199
200 def test_decrease(self):
201 o = specdesc("decrease")
202 c = cvec()
203 assert_equal( 0., o(c))
204 a = arange(c.length * 2, 0, -2, dtype='float32')
205 k = arange(c.length, dtype='float32')
206 c.norm = a
207 decrease = sum((a[1:] - a [0]) / k[1:]) / sum(a[1:])
208 assert_almost_equal (decrease, o(c), decimal = 5)
209
210 a = arange(0, c.length * 2, +2, dtype='float32')
211 c.norm = a
212 decrease = sum((a[1:] - a [0]) / k[1:]) / sum(a[1:])
213 assert_almost_equal (decrease, o(c), decimal = 5)
214
215 a = arange(0, c.length * 2, +2, dtype='float32')
216 c.norm = a * 2
217 decrease = sum((a[1:] - a [0]) / k[1:]) / sum(a[1:])
218 assert_almost_equal (decrease, o(c), decimal = 5)
219
220 def test_rolloff(self):
221 o = specdesc("rolloff")
222 c = cvec()
223 assert_equal( 0., o(c))
224 a = arange(c.length * 2, 0, -2, dtype='float32')
225 k = arange(c.length, dtype='float32')
226 c.norm = a
227 cumsum = .95*sum(a*a)
228 i = 0; rollsum = 0
229 while rollsum < cumsum:
230 rollsum += a[i]*a[i]
231 i+=1
232 rolloff = i
233 assert_equal (rolloff, o(c))
234
235
236if __name__ == '__main__':
237 from unittest import main
238 main()

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t