History

Merge branch 'master' into pitchshift

Paul Brossier committed 10 years ago

Commit ad653462 parents 3ffedf2 bd8a92d20 files · +375 −53Browse files

Showing the changes to python (9 of 20 files). Show all

Unified · Split

9 files
  1. python/demos/demo_mfcc.py +25 −8
  2. python/ext/aubiomodule.c +18 −0
  3. python/ext/py-fft.c +2 −5
  4. python/ext/py-phasevoc.c +2 −3
  5. python/ext/py-source.c +2 −2
  6. python/lib/moresetuptools.py +2 −1
  7. python/tests/test_fvec.py +1 −1
  8. python/tests/test_source.py +5 −1
  9. python/tests/test_specdesc.py +1 −3
python/demos/demo_mfcc.py+25−8
@@ -2,20 +2,27 @@ · 1 unmodified line
22
33 import sys
44 from aubio import source, pvoc, mfcc
5−from numpy import vstack, zeros
5+from numpy import vstack, zeros, diff
66
7−win_s = 512 # fft size
8−hop_s = win_s // 4 # hop size
97 n_filters = 40 # must be 40 for mfcc
108 n_coeffs = 13
11−samplerate = 44100
129
1310 if len(sys.argv) < 2:
14− print("Usage: %s <source_filename>" % sys.argv[0])
11+ print("Usage: %s <source_filename> [samplerate] [win_s] [hop_s] [mode]" % sys.argv[0])
12+ print(" where [mode] can be 'delta' or 'ddelta' for first and second derivatives")
1513 sys.exit(1)
1614
1715 source_filename = sys.argv[1]
1816
17+if len(sys.argv) > 2: samplerate = int(sys.argv[2])
18+else: samplerate = 0
19+if len(sys.argv) > 3: win_s = int(sys.argv[3])
20+else: win_s = 512
21+if len(sys.argv) > 4: hop_s = int(sys.argv[4])
22+else: hop_s = win_s // 4
23+if len(sys.argv) > 5: mode = sys.argv[5]
24+else: mode = "default"
25+
1926 samplerate = 0
2027 if len( sys.argv ) > 2: samplerate = int(sys.argv[2])
2128
@@ -48,18 +55,28 @@ get_waveform_plot( source_filename, samplerate, block_size = hop_s, ax = wave) · 26 unmodified lines
4855 wave.xaxis.set_visible(False)
4956 wave.yaxis.set_visible(False)
5057
58+# compute first and second derivatives
59+if mode in ["delta", "ddelta"]:
60+ mfccs = diff(mfccs, axis = 0)
61+if mode == "ddelta":
62+ mfccs = diff(mfccs, axis = 0)
63+
5164 all_times = arange(mfccs.shape[0]) * hop_s
5265 n_coeffs = mfccs.shape[1]
5366 for i in range(n_coeffs):
5467 ax = plt.axes ( [0.1, 0.75 - ((i+1) * 0.65 / n_coeffs), 0.8, 0.65 / n_coeffs], sharex = wave )
5568 ax.xaxis.set_visible(False)
56− ax.yaxis.set_visible(False)
69+ ax.set_yticks([])
70+ ax.set_ylabel('%d' % i)
5771 ax.plot(all_times, mfccs.T[i])
5872
5973 # add time to the last axis
60−set_xlabels_sample2time( ax, frames_read, samplerate)
74+set_xlabels_sample2time( ax, frames_read, samplerate)
6175
6276 #plt.ylabel('spectral descriptor value')
6377 ax.xaxis.set_visible(True)
64−wave.set_title('MFCC for %s' % source_filename)
78+title = 'MFCC for %s' % source_filename
79+if mode == "delta": title = mode + " " + title
80+elif mode == "ddelta": title = "double-delta" + " " + title
81+wave.set_title(title)
6582 plt.show()
python/ext/aubiomodule.c+18−0
@@ -256,6 +256,22 @@ static struct PyModuleDef moduledef = { · 255 unmodified lines
256256 };
257257 #endif
258258
259+void
260+aubio_log_function(int level, const char *message, void *data)
261+{
262+ // remove trailing \n
263+ char *pos;
264+ if ((pos=strchr(message, '\n')) != NULL) {
265+ *pos = '\0';
266+ }
267+ // warning or error
268+ if (level == AUBIO_LOG_ERR) {
269+ PyErr_Format(PyExc_RuntimeError, "%s", message);
270+ } else {
271+ PyErr_WarnEx(PyExc_UserWarning, message, 1);
272+ }
273+}
274+
259275 static PyObject *
260276 initaubio (void)
261277 {
@@ -315,6 +331,8 @@ initaubio (void) · 53 unmodified lines
315331 // add ufunc
316332 add_ufuncs(m);
317333
334+ aubio_log_set_level_function(AUBIO_LOG_ERR, aubio_log_function, NULL);
335+ aubio_log_set_level_function(AUBIO_LOG_WRN, aubio_log_function, NULL);
318336 return m;
319337 }
320338
python/ext/py-fft.c+2−5
@@ -51,11 +51,8 @@ Py_fft_init (Py_fft * self, PyObject * args, PyObject * kwds) · 50 unmodified lines
5151 {
5252 self->o = new_aubio_fft (self->win_s);
5353 if (self->o == NULL) {
54− PyErr_Format(PyExc_RuntimeError,
55− "error creating fft with win_s=%d "
56− "(should be a power of 2 greater than 1; "
57− "try recompiling aubio with --enable-fftw3)",
58− self->win_s);
54+ // PyErr_Format(PyExc_RuntimeError, ...) was set above by new_ which called
55+ // AUBIO_ERR when failing
5956 return -1;
6057 }
6158
python/ext/py-phasevoc.c+2−3
@@ -66,9 +66,8 @@ Py_pvoc_init (Py_pvoc * self, PyObject * args, PyObject * kwds) · 65 unmodified lines
6666 {
6767 self->o = new_aubio_pvoc ( self->win_s, self->hop_s);
6868 if (self->o == NULL) {
69− PyErr_Format(PyExc_RuntimeError,
70− "failed creating pvoc with win_s=%d, hop_s=%d",
71− self->win_s, self->hop_s);
69+ // PyErr_Format(PyExc_RuntimeError, ...) was set above by new_ which called
70+ // AUBIO_ERR when failing
7271 return -1;
7372 }
7473
python/ext/py-source.c+2−2
@@ -140,8 +140,8 @@ Py_source_init (Py_source * self, PyObject * args, PyObject * kwds) · 139 unmodified lines
140140 {
141141 self->o = new_aubio_source ( self->uri, self->samplerate, self->hop_size );
142142 if (self->o == NULL) {
143− PyErr_Format (PyExc_RuntimeError, "error creating source with \"%s\"",
144− self->uri);
143+ // PyErr_Format(PyExc_RuntimeError, ...) was set above by new_ which called
144+ // AUBIO_ERR when failing
145145 return -1;
146146 }
147147 self->samplerate = aubio_source_get_samplerate ( self->o );
python/lib/moresetuptools.py+2−1
@@ -65,7 +65,8 @@ def add_local_aubio_sources(ext): · 64 unmodified lines
6565 for define_macro in ['HAVE_STDLIB_H', 'HAVE_STDIO_H',
6666 'HAVE_MATH_H', 'HAVE_STRING_H',
6767 'HAVE_C99_VARARGS_MACROS',
68− 'HAVE_LIMITS_H', 'HAVE_MEMCPY_HACKS']:
68+ 'HAVE_LIMITS_H', 'HAVE_STDARG_H',
69+ 'HAVE_MEMCPY_HACKS']:
6970 ext.define_macros += [(define_macro, 1)]
7071
7172 # loof for additional packages
python/tests/test_fvec.py+1−1
@@ -98,7 +98,7 @@ class aubio_alpha_norm(TestCase): · 97 unmodified lines
9898 x = np.random.rand(1024).astype(float_type)
9999 alpha = np.random.rand() * 5.
100100 x_alpha_norm = (np.sum(np.abs(x)**alpha)/len(x))**(1/alpha)
101− assert_almost_equal(alpha_norm(x, alpha), x_alpha_norm, decimal = 5)
101+ assert_almost_equal(alpha_norm(x, alpha), x_alpha_norm, decimal = 4)
102102
103103 class aubio_zero_crossing_rate_test(TestCase):
104104
python/tests/test_source.py+5−1
@@ -6,6 +6,9 @@ from numpy.testing import TestCase · 5 unmodified lines
66 from aubio import source
77 from utils import list_all_sounds
88
9+import warnings
10+warnings.filterwarnings('ignore', category=UserWarning, append=True)
11+
912 list_of_sounds = list_all_sounds('sounds')
1013 samplerates = [0, 44100, 8000, 32000]
1114 hop_sizes = [512, 1024, 64]
@@ -22,7 +25,8 @@ for soundfile in list_of_sounds: · 10 unmodified lines
2225 class aubio_source_test_case_base(TestCase):
2326
2427 def setUp(self):
25− if not len(list_of_sounds): self.skipTest('add some sound files in \'python/tests/sounds\'')
28+ if not len(list_of_sounds):
29+ self.skipTest('add some sound files in \'python/tests/sounds\'')
2630 self.default_test_sound = list_of_sounds[0]
2731
2832 class aubio_source_test_case(aubio_source_test_case_base):
python/tests/test_specdesc.py+1−3
@@ -225,10 +225,8 @@ class aubio_specdesc_wrong(TestCase): · 224 unmodified lines
225225 specdesc("default", -10)
226226
227227 def test_unknown(self):
228− # FIXME should fail?
229− with self.assertRaises(ValueError):
228+ with self.assertRaises(RuntimeError):
230229 specdesc("unknown", 512)
231− self.skipTest('todo: new_specdesc should fail on wrong method')
232230
233231 if __name__ == '__main__':
234232 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