- Timestamp:
- Mar 31, 2019, 9:58:02 PM (6 years ago)
- Branches:
- feature/constantq
- Children:
- 9492313a
- Parents:
- 868c6b8 (diff), f55630c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- python
- Files:
-
- 1 added
- 2 deleted
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
python/demos/demo_wav2midi.py
r868c6b8 rdfe6ab6 64 64 if new_note[2] > 0: 65 65 track.append(Message('note_off', note=int(new_note[2]), 66 velocity=127, time= 0)66 velocity=127, time=delta) 67 67 ) 68 68 track.append(Message('note_on', -
python/ext/py-filter.c
r868c6b8 rdfe6ab6 110 110 { 111 111 Py_XDECREF(self->out); 112 del_aubio_filter (self->o); 112 if (self->o) 113 del_aubio_filter (self->o); 113 114 Py_TYPE(self)->tp_free ((PyObject *) self); 114 115 } -
python/ext/py-sink.c
r868c6b8 rdfe6ab6 151 151 Py_sink_del (Py_sink *self, PyObject *unused) 152 152 { 153 del_aubio_sink(self->o); 154 free(self->mwrite_data.data); 153 if (self->o) { 154 del_aubio_sink(self->o); 155 free(self->mwrite_data.data); 156 } 155 157 if (self->uri) { 156 158 free(self->uri); -
python/ext/py-source.c
r868c6b8 rdfe6ab6 437 437 aubio_source_do (self->o, &(self->c_read_to), &read); 438 438 439 if (PyErr_Occurred() != NULL) { 440 return NULL; 441 } 442 439 443 outputs = PyTuple_New(2); 440 444 PyTuple_SetItem( outputs, 0, self->read_to ); … … 457 461 /* compute _do function */ 458 462 aubio_source_do_multi (self->o, &(self->c_mread_to), &read); 463 464 if (PyErr_Occurred() != NULL) { 465 return NULL; 466 } 459 467 460 468 outputs = PyTuple_New(2); … … 574 582 } else if (PyLong_AsLong(size) > 0) { 575 583 // short read, return a shorter array 576 PyArrayObject *shortread = (PyArrayObject*)PyTuple_GetItem(done, 0); 584 PyObject *vec = PyTuple_GetItem(done, 0); 585 // take a copy to prevent resizing internal arrays 586 PyArrayObject *shortread = (PyArrayObject*)PyArray_FROM_OTF(vec, 587 NPY_NOTYPE, NPY_ARRAY_ENSURECOPY); 577 588 PyArray_Dims newdims; 578 589 PyObject *reshaped; … … 587 598 reshaped = PyArray_Newshape(shortread, &newdims, NPY_CORDER); 588 599 Py_DECREF(shortread); 600 Py_DECREF(vec); 589 601 return reshaped; 590 602 } else { -
python/lib/moresetuptools.py
r868c6b8 rdfe6ab6 69 69 for define_macro in ['HAVE_STDLIB_H', 'HAVE_STDIO_H', 70 70 'HAVE_MATH_H', 'HAVE_STRING_H', 71 'HAVE_ C99_VARARGS_MACROS',71 'HAVE_ERRNO_H', 'HAVE_C99_VARARGS_MACROS', 72 72 'HAVE_LIMITS_H', 'HAVE_STDARG_H', 73 73 'HAVE_MEMCPY_HACKS']: -
python/tests/test_aubio.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase 5 4 … … 16 15 17 16 if __name__ == '__main__': 17 from unittest import main 18 18 main() 19 -
python/tests/test_aubio_cmd.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from numpy.testing import TestCase 3 4 import aubio.cmd 4 from nose2 import main5 from numpy.testing import TestCase6 5 7 6 class aubio_cmd(TestCase): … … 32 31 33 32 if __name__ == '__main__': 33 from unittest import main 34 34 main() -
python/tests/test_aubio_cut.py
r868c6b8 rdfe6ab6 2 2 3 3 import aubio.cut 4 from nose2 import main5 4 from numpy.testing import TestCase 6 5 … … 14 13 15 14 if __name__ == '__main__': 15 from unittest import main 16 16 main() -
python/tests/test_cvec.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 import numpy as np 5 4 from numpy.testing import TestCase, assert_equal … … 142 141 143 142 if __name__ == '__main__': 143 from unittest import main 144 144 main() -
python/tests/test_dct.py
r868c6b8 rdfe6ab6 67 67 except AssertionError: 68 68 self.skipTest('creating aubio.dct with size %d did not fail' % size) 69 70 if __name__ == '__main__': 71 from unittest import main 72 main() -
python/tests/test_fft.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase 5 4 from numpy.testing import assert_equal, assert_almost_equal … … 213 212 214 213 if __name__ == '__main__': 214 from unittest import main 215 215 main() -
python/tests/test_filter.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal, assert_almost_equal 5 4 from aubio import fvec, digital_filter 6 from .utils import array_from_text_file5 from utils import array_from_text_file 7 6 8 7 class aubio_filter_test_case(TestCase): … … 95 94 96 95 if __name__ == '__main__': 96 from unittest import main 97 97 main() -
python/tests/test_filterbank.py
r868c6b8 rdfe6ab6 5 5 6 6 from aubio import cvec, filterbank, float_type 7 from .utils import array_from_text_file7 from utils import array_from_text_file 8 8 9 9 class aubio_filterbank_test_case(TestCase): … … 88 88 89 89 if __name__ == '__main__': 90 import nose291 nose2.main()90 from unittest import main 91 main() -
python/tests/test_filterbank_mel.py
r868c6b8 rdfe6ab6 3 3 import numpy as np 4 4 from numpy.testing import TestCase, assert_equal, assert_almost_equal 5 from _tools import assert_warns 5 6 6 7 from aubio import fvec, cvec, filterbank, float_type 7 8 import warnings9 warnings.filterwarnings('ignore', category=UserWarning, append=True)10 8 11 9 class aubio_filterbank_mel_test_case(TestCase): … … 76 74 freq_list = [0, samplerate//4, samplerate // 2 + 1] 77 75 f = filterbank(len(freq_list)-2, 1024) 78 # TODO add assert_warns79 f.set_triangle_bands(fvec(freq_list), samplerate)76 with assert_warns(UserWarning): 77 f.set_triangle_bands(fvec(freq_list), samplerate) 80 78 81 79 def test_triangle_freqs_with_not_enough_filters(self): … … 84 82 freq_list = [0, 100, 1000, 4000, 8000, 10000] 85 83 f = filterbank(len(freq_list)-3, 1024) 86 # TODO add assert_warns87 f.set_triangle_bands(fvec(freq_list), samplerate)84 with assert_warns(UserWarning): 85 f.set_triangle_bands(fvec(freq_list), samplerate) 88 86 89 87 def test_triangle_freqs_with_too_many_filters(self): … … 92 90 freq_list = [0, 100, 1000, 4000, 8000, 10000] 93 91 f = filterbank(len(freq_list)-1, 1024) 94 # TODO add assert_warns95 f.set_triangle_bands(fvec(freq_list), samplerate)92 with assert_warns(UserWarning): 93 f.set_triangle_bands(fvec(freq_list), samplerate) 96 94 97 95 def test_triangle_freqs_with_double_value(self): … … 100 98 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] 101 99 f = filterbank(len(freq_list)-2, 1024) 102 # TODO add assert_warns103 f.set_triangle_bands(fvec(freq_list), samplerate)100 with assert_warns(UserWarning): 101 f.set_triangle_bands(fvec(freq_list), samplerate) 104 102 105 103 def test_triangle_freqs_with_triple(self): … … 108 106 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000] 109 107 f = filterbank(len(freq_list)-2, 1024) 110 # TODO add assert_warns 111 f.set_triangle_bands(fvec(freq_list), samplerate) 108 with assert_warns(UserWarning): 109 f.set_triangle_bands(fvec(freq_list), samplerate) 110 112 111 113 112 def test_triangle_freqs_without_norm(self): … … 169 168 170 169 if __name__ == '__main__': 171 import nose2172 nose2.main()170 from unittest import main 171 main() -
python/tests/test_fvec.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 import numpy as np 5 4 from numpy.testing import TestCase, assert_equal, assert_almost_equal … … 149 148 150 149 if __name__ == '__main__': 150 from unittest import main 151 151 main() -
python/tests/test_fvec_shift.py
r868c6b8 rdfe6ab6 31 31 self.run_shift_ishift(7) 32 32 33 from unittest import main34 33 if __name__ == '__main__': 34 from unittest import main 35 35 main() -
python/tests/test_hztomel.py
r868c6b8 rdfe6ab6 4 4 from numpy.testing import TestCase 5 5 from numpy.testing import assert_equal, assert_almost_equal 6 from _tools import assert_warns 6 7 import numpy as np 7 8 import aubio … … 38 39 39 40 def test_meltohz_negative(self): 40 # TODO add assert_warns41 assert_equal(meltohz(-1), 0)41 with assert_warns(UserWarning): 42 assert_equal(meltohz(-1), 0) 42 43 43 44 def test_hztomel_negative(self): 44 # TODO add assert_warns45 assert_equal(hztomel(-1), 0)45 with assert_warns(UserWarning): 46 assert_equal(hztomel(-1), 0) 46 47 47 48 … … 58 59 59 60 def test_meltohz_negative(self): 60 # TODO add assert_warns61 assert_equal(meltohz(-1, htk=True), 0)61 with assert_warns(UserWarning): 62 assert_equal(meltohz(-1, htk=True), 0) 62 63 assert_almost_equal(meltohz(2000, htk=True), 3428.7, decimal=1) 63 64 assert_almost_equal(meltohz(1000, htk=True), 1000., decimal=1) 64 65 65 66 def test_hztomel_negative(self): 66 # TODO add assert_warns 67 assert_equal(hztomel(-1, htk=True), 0) 67 with assert_warns(UserWarning): 68 assert_equal(meltohz(-1, htk=True), 0) 69 with assert_warns(UserWarning): 70 assert_equal(hztomel(-1, htk=True), 0) 68 71 assert_almost_equal(hztomel(1000, htk=True), 1000., decimal=1) 69 72 -
python/tests/test_mathutils.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal 5 4 from numpy import array, arange, isnan, isinf … … 102 101 103 102 if __name__ == '__main__': 103 from unittest import main 104 104 main() -
python/tests/test_mfcc.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from nose2 import main 4 from nose2.tools import params 3 from _tools import parametrize, assert_raises 5 4 from numpy import random, count_nonzero 6 5 from numpy.testing import TestCase … … 16 15 new_deflts = [1024, 40, 13, 44100] 17 16 18 class aubio_mfcc(TestCase):17 class Test_aubio_mfcc(object): 19 18 20 def setUp(self): 21 self.o = mfcc() 19 members_args = 'name' 22 20 23 def test_default_creation(self): 24 pass 25 26 def test_delete(self): 27 del self.o 28 29 @params(*new_params) 21 @parametrize(members_args, new_params) 30 22 def test_read_only_member(self, name): 31 o = self.o32 with self.assertRaises((TypeError, AttributeError)):23 o = mfcc() 24 with assert_raises((TypeError, AttributeError)): 33 25 setattr(o, name, 0) 34 26 35 @param s(*zip(new_params, new_deflts))27 @parametrize('name, expected', zip(new_params, new_deflts)) 36 28 def test_default_param(self, name, expected): 37 29 """ test mfcc.{:s} = {:d} """.format(name, expected) 38 o = self.o39 self.assertEqual( getattr(o, name), expected)30 o = mfcc() 31 assert getattr(o, name) == expected 40 32 41 33 class aubio_mfcc_wrong_params(TestCase): … … 83 75 84 76 85 class aubio_mfcc_all_parameters(TestCase):77 class Test_aubio_mfcc_all_parameters(object): 86 78 87 @params(79 run_values = [ 88 80 (2048, 40, 13, 44100), 89 81 (1024, 40, 13, 44100), … … 101 93 (1024, 40, 40, 44100), 102 94 (1024, 40, 3, 44100), 103 ) 95 ] 96 run_args = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate'] 97 98 @parametrize(run_args, run_values) 104 99 def test_run_with_params(self, buf_size, n_filters, n_coeffs, samplerate): 105 100 " check mfcc can run with reasonable parameters " … … 149 144 150 145 if __name__ == '__main__': 151 main() 146 from _tools import run_module_suite 147 run_module_suite() -
python/tests/test_midi2note.py
r868c6b8 rdfe6ab6 3 3 4 4 from aubio import midi2note 5 from nose2.tools import params 6 import unittest 5 from _tools import parametrize, assert_raises 7 6 8 7 list_of_known_midis = ( … … 16 15 ) 17 16 18 class midi2note_good_values(unittest.TestCase):17 class Test_midi2note_good_values(object): 19 18 20 @param s(*list_of_known_midis)19 @parametrize('midi, note', list_of_known_midis) 21 20 def test_midi2note_known_values(self, midi, note): 22 21 " known values are correctly converted " 23 self.assertEqual ( midi2note(midi), note)22 assert midi2note(midi) == (note) 24 23 25 class midi2note_wrong_values(unittest.TestCase):24 class Test_midi2note_wrong_values(object): 26 25 27 26 def test_midi2note_negative_value(self): 28 27 " fails when passed a negative value " 29 self.assertRaises(ValueError, midi2note, -2)28 assert_raises(ValueError, midi2note, -2) 30 29 31 30 def test_midi2note_large(self): 32 31 " fails when passed a value greater than 127 " 33 self.assertRaises(ValueError, midi2note, 128)32 assert_raises(ValueError, midi2note, 128) 34 33 35 34 def test_midi2note_floating_value(self): 36 35 " fails when passed a floating point " 37 self.assertRaises(TypeError, midi2note, 69.2)36 assert_raises(TypeError, midi2note, 69.2) 38 37 39 38 def test_midi2note_character_value(self): 40 39 " fails when passed a value that can not be transformed to integer " 41 self.assertRaises(TypeError, midi2note, "a")40 assert_raises(TypeError, midi2note, "a") 42 41 43 42 if __name__ == '__main__': 44 import nose245 nose2.main()43 from _tools import run_module_suite 44 run_module_suite() -
python/tests/test_musicutils.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 import numpy as np 5 4 from numpy.testing import TestCase 6 from numpy.testing .utilsimport assert_equal, assert_almost_equal5 from numpy.testing import assert_equal, assert_almost_equal 7 6 from aubio import window, level_lin, db_spl, silence_detection, level_detection 8 7 from aubio import fvec, float_type … … 86 85 87 86 if __name__ == '__main__': 87 from unittest import main 88 88 main() -
python/tests/test_note2midi.py
r868c6b8 rdfe6ab6 5 5 6 6 from aubio import note2midi, freq2note, note2freq, float_type 7 from n ose2.tools import params8 import unittest7 from numpy.testing import TestCase 8 from _tools import parametrize, assert_raises, skipTest 9 9 10 10 list_of_known_notes = ( … … 45 45 ) 46 46 47 class note2midi_good_values(unittest.TestCase):47 class Test_note2midi_good_values(object): 48 48 49 @param s(*list_of_known_notes)49 @parametrize('note, midi', list_of_known_notes) 50 50 def test_note2midi_known_values(self, note, midi): 51 51 " known values are correctly converted " 52 self.assertEqual ( note2midi(note), midi )52 assert note2midi(note) == midi 53 53 54 @param s(*list_of_known_notes_with_unicode_issues)54 @parametrize('note, midi', list_of_known_notes_with_unicode_issues) 55 55 def test_note2midi_known_values_with_unicode_issues(self, note, midi): 56 " known values are correctly converted, unless decoding is expected to fail"56 " difficult values are correctly converted unless expected failure " 57 57 try: 58 self.assertEqual ( note2midi(note), midi )58 assert note2midi(note) == midi 59 59 except UnicodeEncodeError as e: 60 # platforms with decoding failures include: 61 # - osx: python <= 2.7.10 62 # - win: python <= 2.7.12 60 63 import sys 61 str fmt = "len(u'\\U0001D12A') != 1, excpected decoding failure | {:s} | {:s} {:s}"62 str res = strfmt.format(e, sys.platform, sys.version)63 # happens with: darwin 2.7.10, windows 2.7.1264 strmsg = "len(u'\\U0001D12A') != 1, expected decoding failure" 65 strmsg += " | upgrade to Python 3 to fix" 66 strmsg += " | {:s} | {:s} {:s}" 64 67 if len('\U0001D12A') != 1 and sys.version[0] == '2': 65 s elf.skipTest(strres + " | upgrade to Python 3 to fix")68 skipTest(strmsg.format(repr(e), sys.platform, sys.version)) 66 69 else: 67 70 raise 68 71 69 class note2midi_wrong_values( unittest.TestCase):72 class note2midi_wrong_values(TestCase): 70 73 71 74 def test_note2midi_missing_octave(self): … … 105 108 self.assertRaises(ValueError, note2midi, 'CB+-3') 106 109 107 @params(*list_of_unknown_notes) 110 class Test_note2midi_unknown_values(object): 111 112 @parametrize('note', list_of_unknown_notes) 108 113 def test_note2midi_unknown_values(self, note): 109 114 " unknown values throw out an error " 110 self.assertRaises(ValueError, note2midi, note)115 assert_raises(ValueError, note2midi, note) 111 116 112 class freq2note_simple_test( unittest.TestCase):117 class freq2note_simple_test(TestCase): 113 118 114 119 def test_freq2note_above(self): … … 120 125 self.assertEqual("A4", freq2note(439)) 121 126 122 class note2freq_simple_test( unittest.TestCase):127 class note2freq_simple_test(TestCase): 123 128 124 129 def test_note2freq(self): … … 134 139 135 140 if __name__ == '__main__': 136 import nose2137 nose2.main()141 from _tools import run_module_suite 142 run_module_suite() -
python/tests/test_notes.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal, assert_almost_equal 5 from aubio import notes 4 from aubio import notes, source 5 import numpy as np 6 from utils import list_all_sounds 7 8 list_of_sounds = list_all_sounds('sounds') 6 9 7 10 AUBIO_DEFAULT_NOTES_SILENCE = -70. … … 53 56 self.o.set_release_drop(val) 54 57 55 from .utils import list_all_sounds56 list_of_sounds = list_all_sounds('sounds')57 58 58 class aubio_notes_sinewave(TestCase): 59 59 60 60 def analyze_file(self, filepath, samplerate=0): 61 from aubio import source62 import numpy as np63 61 win_s = 512 # fft size 64 62 hop_s = 256 # hop size … … 93 91 94 92 if __name__ == '__main__': 93 from unittest import main 95 94 main() -
python/tests/test_onset.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal, assert_almost_equal 5 4 from aubio import onset, fvec … … 117 116 118 117 if __name__ == '__main__': 118 from unittest import main 119 119 main() -
python/tests/test_phasevoc.py
r868c6b8 rdfe6ab6 2 2 3 3 from numpy.testing import TestCase, assert_equal, assert_array_less 4 from _tools import parametrize 4 5 from aubio import fvec, cvec, pvoc, float_type 5 from nose2 import main6 from nose2.tools import params7 6 import numpy as np 8 7 … … 19 18 return np.random.rand(hop_s).astype(float_type) * 2. - 1. 20 19 21 class aubio_pvoc_test_case(TestCase):20 class Test_aubio_pvoc_test_case(object): 22 21 """ pvoc object test case """ 23 22 … … 66 65 assert_equal ( t, 0.) 67 66 68 @params( 67 resynth_noise_args = "hop_s, ratio" 68 resynth_noise_values = [ 69 69 ( 256, 8), 70 70 ( 256, 4), … … 88 88 (8192, 4), 89 89 (8192, 2), 90 ) 90 ] 91 92 @parametrize(resynth_noise_args, resynth_noise_values) 91 93 def test_resynth_steps_noise(self, hop_s, ratio): 92 94 """ check the resynthesis of a random signal is correct """ … … 94 96 self.reconstruction(sigin, hop_s, ratio) 95 97 96 @params( 98 resynth_sine_args = "samplerate, hop_s, ratio, freq" 99 resynth_sine_values = [ 97 100 (44100, 256, 8, 441), 98 101 (44100, 256, 4, 1203), … … 109 112 (96000, 1024, 8, 47000), 110 113 (96000, 1024, 8, 20), 111 ) 114 ] 115 116 @parametrize(resynth_sine_args, resynth_sine_values) 112 117 def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq): 113 118 """ check the resynthesis of a sine is correct """ … … 200 205 201 206 if __name__ == '__main__': 207 from unittest import main 202 208 main() 203 -
python/tests/test_pitch.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import TestCase, main 4 from numpy.testing import assert_equal 3 from numpy.testing import TestCase, assert_equal 5 4 from numpy import sin, arange, mean, median, isnan, pi 6 5 from aubio import fvec, pitch, freqtomidi, float_type … … 117 116 for algo in pitch_algorithms: 118 117 for mode in signal_modes: 119 test_method = create_test (algo, mode)120 test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo,118 _test_method = create_test (algo, mode) 119 _test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo, 121 120 mode[0], mode[1], mode[2], mode[3] ) 122 setattr (aubio_pitch_Sinusoid, test_method.__name__,test_method)121 setattr (aubio_pitch_Sinusoid, _test_method.__name__, _test_method) 123 122 124 123 if __name__ == '__main__': 124 from unittest import main 125 125 main() -
python/tests/test_sink.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from nose2 import main4 from nose2.tools import params5 3 from numpy.testing import TestCase 6 4 from aubio import fvec, source, sink 7 from .utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path 8 9 import warnings 10 warnings.filterwarnings('ignore', category=UserWarning, append=True) 5 from utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path 6 from utils import parse_file_samplerate 7 from _tools import parametrize, skipTest, assert_raises, assert_warns 11 8 12 9 list_of_sounds = list_all_sounds('sounds') … … 24 21 all_params.append((hop_size, samplerate, soundfile)) 25 22 26 class aubio_sink_test_case(TestCase): 27 28 def setUp(self): 29 if not len(list_of_sounds): 30 self.skipTest('add some sound files in \'python/tests/sounds\'') 23 class Test_aubio_sink(object): 31 24 32 25 def test_wrong_filename(self): 33 with self.assertRaises(RuntimeError):26 with assert_raises(RuntimeError): 34 27 sink('') 35 28 36 29 def test_wrong_samplerate(self): 37 with self.assertRaises(RuntimeError):30 with assert_raises(RuntimeError): 38 31 sink(get_tmp_sink_path(), -1) 39 32 40 33 def test_wrong_samplerate_too_large(self): 41 with self.assertRaises(RuntimeError):34 with assert_raises(RuntimeError): 42 35 sink(get_tmp_sink_path(), 1536001, 2) 43 36 44 37 def test_wrong_channels(self): 45 with self.assertRaises(RuntimeError):38 with assert_raises(RuntimeError): 46 39 sink(get_tmp_sink_path(), 44100, -1) 47 40 48 41 def test_wrong_channels_too_large(self): 49 with self.assertRaises(RuntimeError):42 with assert_raises(RuntimeError): 50 43 sink(get_tmp_sink_path(), 44100, 202020) 51 44 … … 67 60 shutil.rmtree(tmpdir) 68 61 69 @param s(*all_params)62 @parametrize('hop_size, samplerate, path', all_params) 70 63 def test_read_and_write(self, hop_size, samplerate, path): 71 64 orig_samplerate = parse_file_samplerate(soundfile) 72 65 try: 73 f = source(path, samplerate, hop_size) 66 if orig_samplerate is not None and orig_samplerate < samplerate: 67 # upsampling should emit a warning 68 with assert_warns(UserWarning): 69 f = source(soundfile, samplerate, hop_size) 70 else: 71 f = source(soundfile, samplerate, hop_size) 74 72 except RuntimeError as e: 75 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) 73 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' 74 skipTest(err_msg.format(str(e), hop_size, samplerate)) 76 75 if samplerate == 0: samplerate = f.samplerate 77 76 sink_path = get_tmp_sink_path() … … 85 84 del_tmp_sink_path(sink_path) 86 85 87 @param s(*all_params)86 @parametrize('hop_size, samplerate, path', all_params) 88 87 def test_read_and_write_multi(self, hop_size, samplerate, path): 88 orig_samplerate = parse_file_samplerate(soundfile) 89 89 try: 90 f = source(path, samplerate, hop_size) 90 if orig_samplerate is not None and orig_samplerate < samplerate: 91 # upsampling should emit a warning 92 with assert_warns(UserWarning): 93 f = source(soundfile, samplerate, hop_size) 94 else: 95 f = source(soundfile, samplerate, hop_size) 91 96 except RuntimeError as e: 92 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) 97 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' 98 skipTest(err_msg.format(str(e), hop_size, samplerate)) 93 99 if samplerate == 0: samplerate = f.samplerate 94 100 sink_path = get_tmp_sink_path() … … 126 132 127 133 if __name__ == '__main__': 128 main() 134 from _tools import run_module_suite 135 run_module_suite() -
python/tests/test_slicing.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal 5 4 from aubio import slice_source_at_stamps 6 from .utils import count_files_in_directory, get_default_test_sound7 from .utils import count_samples_in_directory, count_samples_in_file5 from utils import count_files_in_directory, get_default_test_sound 6 from utils import count_samples_in_directory, count_samples_in_file 8 7 9 8 import tempfile … … 168 167 169 168 if __name__ == '__main__': 169 from unittest import main 170 170 main() -
python/tests/test_source.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from nose2 import main 4 from nose2.tools import params 3 5 4 from numpy.testing import TestCase, assert_equal 6 5 from aubio import source 7 from .utils import list_all_sounds8 9 import warnings10 warnings.filterwarnings('ignore', category=UserWarning, append=True) 6 from utils import list_all_sounds, parse_file_samplerate 7 import unittest 8 from _tools import assert_raises, assert_equal, assert_warns 9 from _tools import parametrize, skipTest 11 10 12 11 list_of_sounds = list_all_sounds('sounds') … … 14 13 hop_sizes = [512, 1024, 64] 15 14 16 path =None15 default_test_sound = len(list_of_sounds) and list_of_sounds[0] or None 17 16 18 17 all_params = [] … … 22 21 all_params.append((hop_size, samplerate, soundfile)) 23 22 24 25 class aubio_source_test_case_base(TestCase): 23 no_sounds_msg = "no test sounds, add some in 'python/tests/sounds/'!" 24 25 _debug = False 26 27 28 class Test_aubio_source_test_case(TestCase): 26 29 27 30 def setUp(self): 28 if not len(list_of_sounds): 29 self.skipTest('add some sound files in \'python/tests/sounds\'') 30 self.default_test_sound = list_of_sounds[0] 31 32 class aubio_source_test_case(aubio_source_test_case_base): 33 34 @params(*list_of_sounds) 35 def test_close_file(self, filename): 31 if not default_test_sound: 32 skipTest(no_sounds_msg) 33 34 def test_close_file(self): 36 35 samplerate = 0 # use native samplerate 37 36 hop_size = 256 38 f = source(filename, samplerate, hop_size) 39 f.close() 40 41 @params(*list_of_sounds) 42 def test_close_file_twice(self, filename): 37 f = source(default_test_sound, samplerate, hop_size) 38 f.close() 39 40 def test_close_file_twice(self): 43 41 samplerate = 0 # use native samplerate 44 42 hop_size = 256 45 f = source(filename, samplerate, hop_size) 46 f.close() 47 f.close() 48 49 class aubio_source_read_test_case(aubio_source_test_case_base): 43 f = source(default_test_sound, samplerate, hop_size) 44 f.close() 45 f.close() 46 47 def test_read_after_close(self): 48 samplerate = 0 # use native samplerate 49 hop_size = 256 50 f = source(default_test_sound, samplerate, hop_size) 51 read, frames = f() 52 f.close() 53 with assert_raises(RuntimeError): 54 read, frames = f() 55 with assert_raises(RuntimeError): 56 read, frames = f.do_multi() 57 58 59 class Test_aubio_source_read(object): 50 60 51 61 def read_from_source(self, f): … … 57 67 assert_equal(samples[read:], 0) 58 68 break 59 #result_str = "read {:.2f}s ({:d} frames in {:d} blocks at {:d}Hz) from {:s}" 60 #result_params = total_frames / float(f.samplerate), total_frames, total_frames//f.hop_size, f.samplerate, f.uri 61 #print (result_str.format(*result_params)) 69 if _debug: 70 result_str = "read {:.2f}s ({:d} frames" 71 result_str += " in {:d} blocks at {:d}Hz) from {:s}" 72 result_params = total_frames / float(f.samplerate), total_frames, \ 73 total_frames//f.hop_size, f.samplerate, f.uri 74 print (result_str.format(*result_params)) 62 75 return total_frames 63 76 64 @param s(*all_params)77 @parametrize('hop_size, samplerate, soundfile', all_params) 65 78 def test_samplerate_hopsize(self, hop_size, samplerate, soundfile): 79 orig_samplerate = parse_file_samplerate(soundfile) 66 80 try: 67 f = source(soundfile, samplerate, hop_size) 81 if orig_samplerate is not None and orig_samplerate < samplerate: 82 # upsampling should emit a warning 83 with assert_warns(UserWarning): 84 f = source(soundfile, samplerate, hop_size) 85 else: 86 f = source(soundfile, samplerate, hop_size) 68 87 except RuntimeError as e: 69 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e))) 88 err_msg = 'failed opening with hop_s={:d}, samplerate={:d} ({:s})' 89 skipTest(err_msg.format(hop_size, samplerate, str(e))) 70 90 assert f.samplerate != 0 71 91 read_frames = self.read_from_source(f) 72 92 if 'f_' in soundfile and samplerate == 0: 73 93 import re 74 f = re.compile( '.*_\([0:9]*f\)_.*')94 f = re.compile(r'.*_\([0:9]*f\)_.*') 75 95 match_f = re.findall('([0-9]*)f_', soundfile) 76 96 if len(match_f) == 1: 77 97 expected_frames = int(match_f[0]) 78 self.assertEqual(expected_frames, read_frames)79 80 @param s(*list_of_sounds)98 assert_equal(expected_frames, read_frames) 99 100 @parametrize('p', list_of_sounds) 81 101 def test_samplerate_none(self, p): 82 102 f = source(p) … … 84 104 self.read_from_source(f) 85 105 86 @param s(*list_of_sounds)106 @parametrize('p', list_of_sounds) 87 107 def test_samplerate_0(self, p): 88 108 f = source(p, 0) … … 90 110 self.read_from_source(f) 91 111 92 @param s(*list_of_sounds)112 @parametrize('p', list_of_sounds) 93 113 def test_zero_hop_size(self, p): 94 114 f = source(p, 0, 0) … … 97 117 self.read_from_source(f) 98 118 99 @param s(*list_of_sounds)119 @parametrize('p', list_of_sounds) 100 120 def test_seek_to_half(self, p): 101 121 from random import randint … … 109 129 assert a == b + c 110 130 111 @param s(*list_of_sounds)131 @parametrize('p', list_of_sounds) 112 132 def test_duration(self, p): 113 133 total_frames = 0 … … 118 138 total_frames += read 119 139 if read < f.hop_size: break 120 self.assertEqual(duration, total_frames)121 122 123 class aubio_source_test_wrong_params(TestCase):140 assert_equal (duration, total_frames) 141 142 143 class Test_aubio_source_wrong_params(object): 124 144 125 145 def test_wrong_file(self): 126 with self.assertRaises(RuntimeError):146 with assert_raises(RuntimeError): 127 147 source('path_to/unexisting file.mp3') 128 148 129 class aubio_source_test_wrong_params_with_file(aubio_source_test_case_base): 149 @unittest.skipIf(default_test_sound is None, no_sounds_msg) 150 class Test_aubio_source_wrong_params_with_file(TestCase): 130 151 131 152 def test_wrong_samplerate(self): 132 with self.assertRaises(ValueError):133 source( self.default_test_sound, -1)153 with assert_raises(ValueError): 154 source(default_test_sound, -1) 134 155 135 156 def test_wrong_hop_size(self): 136 with self.assertRaises(ValueError):137 source( self.default_test_sound, 0, -1)157 with assert_raises(ValueError): 158 source(default_test_sound, 0, -1) 138 159 139 160 def test_wrong_channels(self): 140 with self.assertRaises(ValueError):141 source( self.default_test_sound, 0, 0, -1)161 with assert_raises(ValueError): 162 source(default_test_sound, 0, 0, -1) 142 163 143 164 def test_wrong_seek(self): 144 f = source( self.default_test_sound)145 with self.assertRaises(ValueError):165 f = source(default_test_sound) 166 with assert_raises(ValueError): 146 167 f.seek(-1) 147 168 148 169 def test_wrong_seek_too_large(self): 149 f = source( self.default_test_sound)170 f = source(default_test_sound) 150 171 try: 151 with self.assertRaises(ValueError):172 with assert_raises(ValueError): 152 173 f.seek(f.duration + f.samplerate * 10) 153 except AssertionError:154 s elf.skipTest('seeking after end of stream failed raising ValueError')155 156 class aubio_source_readmulti_test_case(aubio_source_read_test_case):174 except: 175 skipTest('seeking after end of stream failed raising ValueError') 176 177 class Test_aubio_source_readmulti(Test_aubio_source_read): 157 178 158 179 def read_from_source(self, f): … … 164 185 assert_equal(samples[:,read:], 0) 165 186 break 166 #result_str = "read {:.2f}s ({:d} frames in {:d} channels and {:d} blocks at {:d}Hz) from {:s}" 167 #result_params = total_frames / float(f.samplerate), total_frames, f.channels, int(total_frames/f.hop_size), f.samplerate, f.uri 168 #print (result_str.format(*result_params)) 187 if _debug: 188 result_str = "read {:.2f}s ({:d} frames in {:d} channels" 189 result_str += " and {:d} blocks at {:d}Hz) from {:s}" 190 result_params = total_frames / float(f.samplerate), total_frames, \ 191 f.channels, int(total_frames/f.hop_size), \ 192 f.samplerate, f.uri 193 print (result_str.format(*result_params)) 169 194 return total_frames 170 195 171 class aubio_source_with(aubio_source_test_case_base): 172 173 #@params(*list_of_sounds) 174 @params(*list_of_sounds) 196 class Test_aubio_source_with(object): 197 198 @parametrize('filename', list_of_sounds) 175 199 def test_read_from_mono(self, filename): 176 200 total_frames = 0 … … 186 210 187 211 if __name__ == '__main__': 188 main() 212 from _tools import run_module_suite 213 run_module_suite() -
python/tests/test_source_channels.py
r868c6b8 rdfe6ab6 9 9 import numpy as np 10 10 from numpy.testing import assert_equal 11 from .utils import get_tmp_sink_path11 from utils import get_tmp_sink_path 12 12 13 13 class aubio_source_test_case(unittest.TestCase): -
python/tests/test_specdesc.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase, assert_equal, assert_almost_equal 5 4 from numpy import random, arange, log, zeros … … 230 229 231 230 if __name__ == '__main__': 231 from unittest import main 232 232 main() -
python/tests/test_zero_crossing_rate.py
r868c6b8 rdfe6ab6 1 1 #! /usr/bin/env python 2 2 3 from unittest import main4 3 from numpy.testing import TestCase 5 4 from aubio import fvec, zero_crossing_rate … … 44 43 45 44 if __name__ == '__main__': 45 from unittest import main 46 46 main() -
python/tests/utils.py
r868c6b8 rdfe6ab6 2 2 3 3 import os 4 import re 4 5 import glob 5 6 import numpy as np … … 9 10 10 11 def array_from_text_file(filename, dtype = 'float'): 11 filename = os.path.join(os.path.dirname(__file__), filename) 12 with open(filename) as f: 13 lines = f.readlines() 14 return np.array([line.split() for line in lines], 15 dtype = dtype) 12 realpathname = os.path.join(os.path.dirname(__file__), filename) 13 return np.loadtxt(realpathname, dtype = dtype) 16 14 17 15 def list_all_sounds(rel_dir): … … 39 37 os.unlink(path) 40 38 except WindowsError as e: 41 print("deleting {:s} failed ({:s}), reopening".format(path, repr(e))) 42 with open(path, 'wb') as f: 43 f.close() 44 try: 45 os.unlink(path) 46 except WindowsError as f: 47 print("deleting {:s} failed ({:s}), aborting".format(path, repr(e))) 39 # removing the temporary directory sometimes fails on windows 40 import warnings 41 errmsg = "failed deleting temporary file {:s} ({:s})" 42 warnings.warn(UserWarning(errmsg.format(path, repr(e)))) 48 43 49 44 def array_from_yaml_file(filename): … … 84 79 total_files += 1 85 80 return total_files 81 82 def parse_file_samplerate(soundfile): 83 samplerate = None 84 # parse samplerate 85 re_sr = re.compile(r'/([0-9]{4,})Hz_.*') 86 match_samplerate = re_sr.findall(soundfile) 87 if match_samplerate: 88 samplerate = int(match_samplerate[0]) 89 else: 90 import warnings 91 warnings.warn(UserWarning("could not parse samplerate for {:s}" 92 .format(soundfile))) 93 return samplerate
Note: See TracChangeset
for help on using the changeset viewer.