Changeset 868c6b8
- Timestamp:
- Dec 19, 2018, 6:16:29 PM (6 years ago)
- Branches:
- feature/constantq
- Children:
- dfe6ab6
- Parents:
- f87e191 (diff), fda3394 (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. - Files:
-
- 9 added
- 7 deleted
- 69 edited
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
rf87e191 r868c6b8 6 6 *.gcno 7 7 *.gcda 8 python/lib/aubio/_aubio.*.so 9 .coverage 8 10 9 11 # ignore compiled examples -
MANIFEST.in
rf87e191 r868c6b8 12 12 include src/*/*.c src/*/*.h 13 13 include examples/*.c examples/*.h 14 include tests/*.h tests/*/*.c tests/*/*/*.c 14 recursive-include tests *.h *.c *.py 15 15 include python/ext/*.h 16 16 recursive-include python *.py -
Makefile
rf87e191 r868c6b8 262 262 --output-file build/coverage.info 263 263 # remove tests 264 lcov $(LCOVOPTS) --remove build/coverage.info '*/ tests/*' '*/ooura_fft8g*' \264 lcov $(LCOVOPTS) --remove build/coverage.info '*/ooura_fft8g*' \ 265 265 --output-file build/coverage_lib.info 266 266 … … 268 268 coverage_report: export WAFOPTS += --disable-docs 269 269 coverage_report: coverage 270 # create coverage report dir271 mkdir -p build/coverage/272 270 # generate report with lcov's genhtml 273 genhtml build/coverage_lib.info --output-directory build/coverage /lcov\271 genhtml build/coverage_lib.info --output-directory build/coverage_c \ 274 272 --branch-coverage --highlight --legend 275 273 # generate python report with coverage python package 276 274 coverage report 277 coverage html -d build/coverage /coverage275 coverage html -d build/coverage_python 278 276 # show links to generated reports 279 for i in $$(ls build/coverage /*/index.html); do echo file://$(PWD)/$$i; done277 for i in $$(ls build/coverage_*/index.html); do echo file://$(PWD)/$$i; done 280 278 281 279 sphinx: configure -
doc/python.rst
rf87e191 r868c6b8 31 31 py_datatypes 32 32 py_io 33 py_temporal 34 py_spectral 35 py_analysis 36 py_synth 33 37 py_utils 34 38 py_examples -
examples/aubiomfcc.c
rf87e191 r868c6b8 69 69 } 70 70 71 examples_common_process( (aubio_process_func_t)process_block, process_print);71 examples_common_process(process_block, process_print); 72 72 73 73 del_aubio_pvoc (pv); -
examples/aubionotes.c
rf87e191 r868c6b8 91 91 } 92 92 93 examples_common_process( (aubio_process_func_t)process_block, process_print);93 examples_common_process(process_block, process_print); 94 94 95 95 // send a last note off if required -
examples/aubioonset.c
rf87e191 r868c6b8 87 87 //aubio_sampler_load (sampler, "/archives/sounds/woodblock.aiff"); 88 88 89 examples_common_process( (aubio_process_func_t)process_block, process_print);89 examples_common_process(process_block, process_print); 90 90 91 91 // send a last note off -
examples/aubiopitch.c
rf87e191 r868c6b8 80 80 aubio_wavetable_play ( wavetable ); 81 81 82 examples_common_process( (aubio_process_func_t)process_block,process_print);82 examples_common_process(process_block, process_print); 83 83 84 84 del_aubio_pitch (o); -
examples/aubioquiet.c
rf87e191 r868c6b8 56 56 verbmsg ("buffer_size: %d, ", buffer_size); 57 57 verbmsg ("hop_size: %d\n", hop_size); 58 examples_common_process( (aubio_process_func_t)process_block,process_print);58 examples_common_process(process_block, process_print); 59 59 examples_common_del(); 60 60 return 0; -
examples/aubiotrack.c
rf87e191 r868c6b8 88 88 //aubio_sampler_load (sampler, "/archives/sounds/woodblock.aiff"); 89 89 90 examples_common_process( (aubio_process_func_t)process_block,process_print);90 examples_common_process(process_block, process_print); 91 91 92 92 // send a last note off -
python/README.md
rf87e191 r868c6b8 28 28 ----- 29 29 30 Some examples are available in the [`python/demos` ][demos_dir] folder. Each30 Some examples are available in the [`python/demos` folder][demos_dir]. Each 31 31 script is a command line program which accepts one ore more argument. 32 32 -
python/ext/aubio-types.h
rf87e191 r868c6b8 2 2 #include <structmember.h> 3 3 4 #include "aubio-docstrings.h" 4 5 #include "aubio-generated.h" 5 6 -
python/ext/aubiomodule.c
rf87e191 r868c6b8 224 224 225 225 // compute the function 226 result = Py _BuildValue (AUBIO_NPY_SMPL_CHR,fvec_alpha_norm (&vec, alpha));226 result = PyFloat_FromDouble(fvec_alpha_norm (&vec, alpha)); 227 227 if (result == NULL) { 228 228 return NULL; … … 320 320 321 321 // compute the function 322 result = Py _BuildValue (AUBIO_NPY_SMPL_CHR,aubio_zero_crossing_rate (&vec));322 result = PyFloat_FromDouble(aubio_zero_crossing_rate (&vec)); 323 323 if (result == NULL) { 324 324 return NULL; -
python/ext/py-cvec.c
rf87e191 r868c6b8 137 137 } 138 138 139 args = Py _BuildValue ("I",self->length);139 args = PyLong_FromLong(self->length); 140 140 if (args == NULL) { 141 141 goto fail; -
python/ext/py-fft.c
rf87e191 r868c6b8 1 1 #include "aubio-types.h" 2 2 3 static char Py_fft_doc[] = "fft object"; 3 static char Py_fft_doc[] = "" 4 "fft(size=1024)\n" 5 "\n" 6 "Compute Fast Fourier Transorms.\n" 7 "\n" 8 "Parameters\n" 9 "----------\n" 10 "size : int\n" 11 " size of the FFT to compute\n" 12 "\n" 13 "Example\n" 14 "-------\n" 15 ">>> x = aubio.fvec(512)\n" 16 ">>> f = aubio.fft(512)\n" 17 ">>> c = f(x); c\n" 18 "aubio cvec of 257 elements\n" 19 ">>> x2 = f.rdo(c); x2.shape\n" 20 "(512,)\n" 21 ""; 4 22 5 23 typedef struct -
python/ext/py-filter.c
rf87e191 r868c6b8 11 11 } Py_filter; 12 12 13 static char Py_filter_doc[] = "filter object"; 13 static char Py_filter_doc[] = "" 14 "digital_filter(order=7)\n" 15 "\n" 16 "Create a digital filter.\n" 17 ""; 18 19 static char Py_filter_set_c_weighting_doc[] = "" 20 "set_c_weighting(samplerate)\n" 21 "\n" 22 "Set filter coefficients to C-weighting.\n" 23 "\n" 24 "`samplerate` should be one of 8000, 11025, 16000, 22050, 24000, 32000,\n" 25 "44100, 48000, 88200, 96000, or 192000. `order` of the filter should be 5.\n" 26 "\n" 27 "Parameters\n" 28 "----------\n" 29 "samplerate : int\n" 30 " Sampling-rate of the input signal, in Hz.\n" 31 ""; 32 33 static char Py_filter_set_a_weighting_doc[] = "" 34 "set_a_weighting(samplerate)\n" 35 "\n" 36 "Set filter coefficients to A-weighting.\n" 37 "\n" 38 "`samplerate` should be one of 8000, 11025, 16000, 22050, 24000, 32000,\n" 39 "44100, 48000, 88200, 96000, or 192000. `order` of the filter should be 7.\n" 40 "\n" 41 "Parameters\n" 42 "----------\n" 43 "samplerate : int\n" 44 " Sampling-rate of the input signal.\n" 45 ""; 46 47 static char Py_filter_set_biquad_doc[] = "" 48 "set_biquad(b0, b1, b2, a1, a2)\n" 49 "\n" 50 "Set biquad coefficients. `order` of the filter should be 3.\n" 51 "\n" 52 "Parameters\n" 53 "----------\n" 54 "b0 : float\n" 55 " Forward filter coefficient.\n" 56 "b1 : float\n" 57 " Forward filter coefficient.\n" 58 "b2 : float\n" 59 " Forward filter coefficient.\n" 60 "a1 : float\n" 61 " Feedback filter coefficient.\n" 62 "a2 : float\n" 63 " Feedback filter coefficient.\n" 64 ""; 14 65 15 66 static PyObject * … … 157 208 static PyMethodDef Py_filter_methods[] = { 158 209 {"set_c_weighting", (PyCFunction) Py_filter_set_c_weighting, METH_VARARGS, 159 "set filter coefficients to C-weighting"},210 Py_filter_set_c_weighting_doc}, 160 211 {"set_a_weighting", (PyCFunction) Py_filter_set_a_weighting, METH_VARARGS, 161 "set filter coefficients to A-weighting"},212 Py_filter_set_a_weighting_doc}, 162 213 {"set_biquad", (PyCFunction) Py_filter_set_biquad, METH_VARARGS, 163 "set b0, b1, b2, a1, a2 biquad coefficients"},214 Py_filter_set_biquad_doc}, 164 215 {NULL} 165 216 }; -
python/ext/py-filterbank.c
rf87e191 r868c6b8 1 1 #include "aubio-types.h" 2 2 3 static char Py_filterbank_doc[] = "filterbank object"; 3 static char Py_filterbank_doc[] = "" 4 "filterbank(n_filters=40, win_s=1024)\n" 5 "\n" 6 "Create a bank of spectral filters. Each instance is a callable\n" 7 "that holds a matrix of coefficients.\n" 8 "\n" 9 "See also :meth:`set_mel_coeffs`, :meth:`set_mel_coeffs_htk`,\n" 10 ":meth:`set_mel_coeffs_slaney`, :meth:`set_triangle_bands`, and\n" 11 ":meth:`set_coeffs`.\n" 12 "\n" 13 "Parameters\n" 14 "----------\n" 15 "n_filters : int\n" 16 " Number of filters to create.\n" 17 "win_s : int\n" 18 " Size of the input spectrum to process.\n" 19 "\n" 20 "Examples\n" 21 "--------\n" 22 ">>> f = aubio.filterbank(128, 1024)\n" 23 ">>> f.set_mel_coeffs(44100, 0, 10000)\n" 24 ">>> c = aubio.cvec(1024)\n" 25 ">>> f(c).shape\n" 26 "(128, )\n" 27 ""; 28 29 static char Py_filterbank_set_triangle_bands_doc[] ="" 30 "set_triangle_bands(freqs, samplerate)\n" 31 "\n" 32 "Set triangular bands. The coefficients will be set to triangular\n" 33 "overlapping windows using the boundaries specified by `freqs`.\n" 34 "\n" 35 "`freqs` should contain `n_filters + 2` frequencies in Hz, ordered\n" 36 "by value, from smallest to largest. The first element should be greater\n" 37 "or equal to zero; the last element should be smaller or equal to\n" 38 "`samplerate / 2`.\n" 39 "\n" 40 "Parameters\n" 41 "----------\n" 42 "freqs: fvec\n" 43 " List of frequencies, in Hz.\n" 44 "samplerate : float\n" 45 " Sampling-rate of the expected input.\n" 46 "\n" 47 "Example\n" 48 "-------\n" 49 ">>> fb = aubio.filterbank(n_filters=100, win_s=2048)\n" 50 ">>> samplerate = 44100; freqs = np.linspace(0, 20200, 102)\n" 51 ">>> fb.set_triangle_bands(aubio.fvec(freqs), samplerate)\n" 52 ""; 53 54 static char Py_filterbank_set_mel_coeffs_slaney_doc[] = "" 55 "set_mel_coeffs_slaney(samplerate)\n" 56 "\n" 57 "Set coefficients of filterbank to match Slaney's Auditory Toolbox.\n" 58 "\n" 59 "The filter coefficients will be set as in Malcolm Slaney's\n" 60 "implementation. The filterbank should have been created with\n" 61 "`n_filters = 40`.\n" 62 "\n" 63 "This is approximately equivalent to using :meth:`set_mel_coeffs` with\n" 64 "`fmin = 400./3., fmax = 6853.84`.\n" 65 "\n" 66 "Parameters\n" 67 "----------\n" 68 "samplerate : float\n" 69 " Sampling-rate of the expected input.\n" 70 "\n" 71 "References\n" 72 "----------\n" 73 "\n" 74 "Malcolm Slaney, `Auditory Toolbox Version 2, Technical Report #1998-010\n" 75 "<https://engineering.purdue.edu/~malcolm/interval/1998-010/>`_\n" 76 ""; 77 78 static char Py_filterbank_set_mel_coeffs_doc[] = "" 79 "set_mel_coeffs(samplerate, fmin, fmax)\n" 80 "\n" 81 "Set coefficients of filterbank to linearly spaced mel scale.\n" 82 "\n" 83 "Parameters\n" 84 "----------\n" 85 "samplerate : float\n" 86 " Sampling-rate of the expected input.\n" 87 "fmin : float\n" 88 " Lower frequency boundary of the first filter.\n" 89 "fmax : float\n" 90 " Upper frequency boundary of the last filter.\n" 91 "\n" 92 "See also\n" 93 "--------\n" 94 "hztomel\n" 95 ""; 96 97 static char Py_filterbank_set_mel_coeffs_htk_doc[] = "" 98 "set_mel_coeffs_htk(samplerate, fmin, fmax)\n" 99 "\n" 100 "Set coefficients of the filters to be linearly spaced in the HTK mel scale.\n" 101 "\n" 102 "Parameters\n" 103 "----------\n" 104 "samplerate : float\n" 105 " Sampling-rate of the expected input.\n" 106 "fmin : float\n" 107 " Lower frequency boundary of the first filter.\n" 108 "fmax : float\n" 109 " Upper frequency boundary of the last filter.\n" 110 "\n" 111 "See also\n" 112 "--------\n" 113 "hztomel with `htk=True`\n" 114 ""; 115 116 static char Py_filterbank_get_coeffs_doc[] = "" 117 "get_coeffs()\n" 118 "\n" 119 "Get coefficients matrix of filterbank.\n" 120 "\n" 121 "Returns\n" 122 "-------\n" 123 "array_like\n" 124 " Array of shape (n_filters, win_s/2+1) containing the coefficients.\n" 125 ""; 126 127 static char Py_filterbank_set_coeffs_doc[] = "" 128 "set_coeffs(coeffs)\n" 129 "\n" 130 "Set coefficients of filterbank.\n" 131 "\n" 132 "Parameters\n" 133 "----------\n" 134 "coeffs : fmat\n" 135 " Array of shape (n_filters, win_s/2+1) containing the coefficients.\n" 136 ""; 137 138 static char Py_filterbank_set_power_doc[] = "" 139 "set_power(power)\n" 140 "\n" 141 "Set power applied to input spectrum of filterbank.\n" 142 "\n" 143 "Parameters\n" 144 "----------\n" 145 "power : float\n" 146 " Power to raise input spectrum to before computing the filters.\n" 147 ""; 148 149 static char Py_filterbank_get_power_doc[] = "" 150 "get_power()\n" 151 "\n" 152 "Get power applied to filterbank.\n" 153 "\n" 154 "Returns\n" 155 "-------\n" 156 "float\n" 157 " Power parameter.\n" 158 ""; 159 160 static char Py_filterbank_set_norm_doc[] = "" 161 "set_norm(norm)\n" 162 "\n" 163 "Set norm parameter. If set to `0`, the filters will not be normalized.\n" 164 "If set to `1`, the filters will be normalized to one. Default to `1`.\n" 165 "\n" 166 "This function should be called *before* :meth:`set_triangle_bands`,\n" 167 ":meth:`set_mel_coeffs`, :meth:`set_mel_coeffs_htk`, or\n" 168 ":meth:`set_mel_coeffs_slaney`.\n" 169 "\n" 170 "Parameters\n" 171 "----------\n" 172 "norm : int\n" 173 " `0` to disable, `1` to enable\n" 174 ""; 175 176 static char Py_filterbank_get_norm_doc[] = "" 177 "get_norm()\n" 178 "\n" 179 "Get norm parameter of filterbank.\n" 180 "\n" 181 "Returns\n" 182 "-------\n" 183 "float\n" 184 " Norm parameter.\n" 185 ""; 4 186 5 187 typedef struct … … 290 472 291 473 static PyObject * 474 Py_filterbank_get_power (Py_filterbank * self, PyObject *unused) 475 { 476 smpl_t power = aubio_filterbank_get_power(self->o); 477 return (PyObject *)PyFloat_FromDouble (power); 478 } 479 480 static PyObject * 292 481 Py_filterbank_set_norm(Py_filterbank *self, PyObject *args) 293 482 { … … 312 501 } 313 502 503 static PyObject * 504 Py_filterbank_get_norm (Py_filterbank * self, PyObject *unused) 505 { 506 smpl_t norm = aubio_filterbank_get_norm(self->o); 507 return (PyObject *)PyFloat_FromDouble (norm); 508 } 509 314 510 static PyMethodDef Py_filterbank_methods[] = { 315 511 {"set_triangle_bands", (PyCFunction) Py_filterbank_set_triangle_bands, 316 METH_VARARGS, "set coefficients of filterbanks"},512 METH_VARARGS, Py_filterbank_set_triangle_bands_doc}, 317 513 {"set_mel_coeffs_slaney", (PyCFunction) Py_filterbank_set_mel_coeffs_slaney, 318 METH_VARARGS, "set coefficients of filterbank as in Auditory Toolbox"},514 METH_VARARGS, Py_filterbank_set_mel_coeffs_slaney_doc}, 319 515 {"set_mel_coeffs", (PyCFunction) Py_filterbank_set_mel_coeffs, 320 METH_VARARGS, "set coefficients of filterbank to linearly spaced mel scale"},516 METH_VARARGS, Py_filterbank_set_mel_coeffs_doc}, 321 517 {"set_mel_coeffs_htk", (PyCFunction) Py_filterbank_set_mel_coeffs_htk, 322 METH_VARARGS, "set coefficients of filterbank to linearly spaced mel scale"},518 METH_VARARGS, Py_filterbank_set_mel_coeffs_htk_doc}, 323 519 {"get_coeffs", (PyCFunction) Py_filterbank_get_coeffs, 324 METH_NOARGS, "get coefficients of filterbank"},520 METH_NOARGS, Py_filterbank_get_coeffs_doc}, 325 521 {"set_coeffs", (PyCFunction) Py_filterbank_set_coeffs, 326 METH_VARARGS, "set coefficients of filterbank"},522 METH_VARARGS, Py_filterbank_set_coeffs_doc}, 327 523 {"set_power", (PyCFunction) Py_filterbank_set_power, 328 METH_VARARGS, "set power applied to filterbank input spectrum"}, 524 METH_VARARGS, Py_filterbank_set_power_doc}, 525 {"get_power", (PyCFunction) Py_filterbank_get_power, 526 METH_NOARGS, Py_filterbank_get_power_doc}, 329 527 {"set_norm", (PyCFunction) Py_filterbank_set_norm, 330 METH_VARARGS, "set norm applied to filterbank input spectrum"}, 528 METH_VARARGS, Py_filterbank_set_norm_doc}, 529 {"get_norm", (PyCFunction) Py_filterbank_get_norm, 530 METH_NOARGS, Py_filterbank_get_norm_doc}, 331 531 {NULL} 332 532 }; -
python/ext/py-musicutils.c
rf87e191 r868c6b8 40 40 } 41 41 42 level_lin = Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_level_lin(&vec));42 level_lin = PyFloat_FromDouble(aubio_level_lin(&vec)); 43 43 if (level_lin == NULL) { 44 44 PyErr_SetString (PyExc_ValueError, "failed computing level_lin"); … … 68 68 } 69 69 70 db_spl = Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_db_spl(&vec));70 db_spl = PyFloat_FromDouble(aubio_db_spl(&vec)); 71 71 if (db_spl == NULL) { 72 72 PyErr_SetString (PyExc_ValueError, "failed computing db_spl"); … … 97 97 } 98 98 99 silence_detection = Py _BuildValue("I",aubio_silence_detection(&vec, threshold));99 silence_detection = PyLong_FromLong(aubio_silence_detection(&vec, threshold)); 100 100 if (silence_detection == NULL) { 101 101 PyErr_SetString (PyExc_ValueError, "failed computing silence_detection"); … … 126 126 } 127 127 128 level_detection = Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_level_detection(&vec, threshold));128 level_detection = PyFloat_FromDouble(aubio_level_detection(&vec, threshold)); 129 129 if (level_detection == NULL) { 130 130 PyErr_SetString (PyExc_ValueError, "failed computing level_detection"); … … 195 195 } 196 196 if (htk != NULL && PyObject_IsTrue(htk) == 1) 197 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_hztomel_htk(v));197 return PyFloat_FromDouble(aubio_hztomel_htk(v)); 198 198 else 199 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_hztomel(v));199 return PyFloat_FromDouble(aubio_hztomel(v)); 200 200 } 201 201 … … 212 212 } 213 213 if (htk != NULL && PyObject_IsTrue(htk) == 1) 214 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_meltohz_htk(v));214 return PyFloat_FromDouble(aubio_meltohz_htk(v)); 215 215 else 216 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_meltohz(v));216 return PyFloat_FromDouble(aubio_meltohz(v)); 217 217 } 218 218 … … 224 224 return NULL; 225 225 } 226 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_hztomel_htk(v));226 return PyFloat_FromDouble(aubio_hztomel_htk(v)); 227 227 } 228 228 … … 234 234 return NULL; 235 235 } 236 return Py _BuildValue(AUBIO_NPY_SMPL_CHR,aubio_meltohz_htk(v));237 } 236 return PyFloat_FromDouble(aubio_meltohz_htk(v)); 237 } -
python/ext/py-phasevoc.c
rf87e191 r868c6b8 91 91 self->hop_s = Py_default_vector_length/2; 92 92 93 if (self == NULL) {94 return NULL;95 }96 97 93 if (win_s > 0) { 98 94 self->win_s = win_s; -
python/lib/gen_code.py
rf87e191 r868c6b8 234 234 235 235 def gen_doc(self): 236 out = """ 237 // TODO: add documentation 238 static char Py_{shortname}_doc[] = \"undefined\"; 236 sig = [] 237 for p in self.input_params: 238 name = p['name'] 239 defval = aubiodefvalue[name].replace('"','\\\"') 240 sig.append("{name}={defval}".format(defval=defval, name=name)) 241 out = """ 242 #ifndef PYAUBIO_{shortname}_doc 243 #define PYAUBIO_{shortname}_doc "{shortname}({sig})" 244 #endif /* PYAUBIO_{shortname}_doc */ 245 246 static char Py_{shortname}_doc[] = "" 247 PYAUBIO_{shortname}_doc 248 ""; 239 249 """ 240 return out.format( **self.__dict__)250 return out.format(sig=', '.join(sig), **self.__dict__) 241 251 242 252 def gen_new(self): -
python/tests/test_mfcc.py
rf87e191 r868c6b8 117 117 buf_size, n_filters, n_coeffs, samplerate = 512, 20, 10, 16000 118 118 m = mfcc(buf_size, n_filters, n_coeffs, samplerate) 119 m.set_scale(10.) 119 m.set_scale(10.5) 120 assert m.get_scale() == 10.5 120 121 m(cvec(buf_size)) 121 122 … … 123 124 buf_size, n_filters, n_coeffs, samplerate = 512, 20, 10, 16000 124 125 m = mfcc(buf_size, n_filters, n_coeffs, samplerate) 125 m.set_power(2.) 126 m.set_power(2.5) 127 assert m.get_power() == 2.5 126 128 m(cvec(buf_size)) 127 129 -
scripts/get_waf.sh
rf87e191 r868c6b8 4 4 #set -x 5 5 6 WAFVERSION=2.0.1 26 WAFVERSION=2.0.13 7 7 WAFTARBALL=waf-$WAFVERSION.tar.bz2 8 8 WAFURL=https://waf.io/$WAFTARBALL -
src/aubio_priv.h
rf87e191 r868c6b8 368 368 #endif /* __STRICT_ANSI__ */ 369 369 370 #if defined(DEBUG) 371 #include <assert.h> 372 #define AUBIO_ASSERT(x) assert(x) 373 #else 374 #define AUBIO_ASSERT(x) 375 #endif /* DEBUG */ 376 370 377 #endif /* AUBIO_PRIV_H */ -
src/io/ioutils.c
rf87e191 r868c6b8 52 52 return AUBIO_OK; 53 53 } 54 55 uint_t 56 aubio_sink_validate_input_length(const char_t *kind, const char_t *path, 57 uint_t max_size, uint_t write_data_length, uint_t write) 58 { 59 uint_t can_write = write; 60 61 if (write > max_size) { 62 AUBIO_WRN("%s: partial write to %s, trying to write %d frames," 63 " at most %d can be written at once\n", kind, path, write, max_size); 64 can_write = max_size; 65 } 66 67 if (can_write > write_data_length) { 68 AUBIO_WRN("%s: partial write to %s, trying to write %d frames," 69 " but found input of length %d\n", kind, path, write, 70 write_data_length); 71 can_write = write_data_length; 72 } 73 74 return can_write; 75 } 76 77 uint_t 78 aubio_sink_validate_input_channels(const char_t *kind, const char_t *path, 79 uint_t sink_channels, uint_t write_data_height) 80 { 81 uint_t channels = sink_channels; 82 if (write_data_height < sink_channels) { 83 AUBIO_WRN("%s: partial write to %s, trying to write %d channels," 84 " but found input of height %d\n", kind, path, sink_channels, 85 write_data_height); 86 channels = write_data_height; 87 } 88 return channels; 89 } -
src/io/ioutils.h
rf87e191 r868c6b8 54 54 uint_t channels); 55 55 56 /** validate length of input 57 58 \param kind the object kind to report on 59 \param path the path to report on 60 \param max_size maximum number of frames that can be written 61 \param write_data_length actual length of input vector/matrix 62 \param write number of samples asked 63 64 \return write or the maximum number of frames that can be written 65 */ 66 uint_t 67 aubio_sink_validate_input_length(const char_t *kind, const char_t *path, 68 uint_t max_size, uint_t write_data_length, uint_t write); 69 70 /** validate height of input 71 72 \param kind the object kind to report on 73 \param path the path to report on 74 \param max_size maximum number of channels that can be written 75 \param write_data_height actual height of input matrix 76 77 \return write_data_height or the maximum number of channels 78 */ 79 uint_t 80 aubio_sink_validate_input_channels(const char_t *kind, const char_t *path, 81 uint_t sink_channels, uint_t write_data_height); 82 56 83 #ifdef __cplusplus 57 84 } -
src/io/sink.c
rf87e191 r868c6b8 103 103 AUBIO_ERROR("sink: failed creating '%s' at %dHz (no sink built-in)\n", uri, samplerate); 104 104 #endif 105 AUBIO_FREE(s);105 del_aubio_sink(s); 106 106 return NULL; 107 107 } … … 136 136 137 137 void del_aubio_sink(aubio_sink_t * s) { 138 if (!s) return; 139 s->s_del((void *)s->sink); 138 AUBIO_ASSERT(s); 139 if (s->s_del && s->sink) 140 s->s_del((void *)s->sink); 140 141 AUBIO_FREE(s); 141 return;142 142 } -
src/io/sink_apple_audio.c
rf87e191 r868c6b8 32 32 #include <AudioToolbox/AudioToolbox.h> 33 33 34 #define FLOAT_TO_SHORT(x) (short)(x * 32768) 35 36 extern int createAubioBufferList(AudioBufferList *bufferList, int channels, int segmentSize); 34 extern int createAudioBufferList(AudioBufferList *bufferList, int channels, int segmentSize); 37 35 extern void freeAudioBufferList(AudioBufferList *bufferList); 38 36 extern CFURLRef createURLFromPath(const char * path); … … 62 60 s->async = false; 63 61 64 if ( (uri == NULL) || (str len(uri) < 1) ) {62 if ( (uri == NULL) || (strnlen(uri, PATH_MAX) < 1) ) { 65 63 AUBIO_ERROR("sink_apple_audio: Aborted opening null path\n"); 66 64 goto beach; 67 65 } 68 if (s->path != NULL) AUBIO_FREE(s->path); 66 69 67 s->path = AUBIO_ARRAY(char_t, strnlen(uri, PATH_MAX) + 1); 70 68 strncpy(s->path, uri, strnlen(uri, PATH_MAX) + 1); … … 77 75 return s; 78 76 } 77 79 78 // invalid samplerate given, abort 80 79 if (aubio_io_validate_samplerate("sink_apple_audio", s->path, samplerate)) { … … 92 91 return s; 93 92 beach: 94 AUBIO_FREE(s);93 del_aubio_sink_apple_audio(s); 95 94 return NULL; 96 95 } … … 103 102 s->samplerate = samplerate; 104 103 // automatically open when both samplerate and channels have been set 105 if ( s->samplerate != 0 &&s->channels != 0) {104 if (/* s->samplerate != 0 && */ s->channels != 0) { 106 105 return aubio_sink_apple_audio_open(s); 107 106 } … … 116 115 s->channels = channels; 117 116 // automatically open when both samplerate and channels have been set 118 if (s->samplerate != 0 && s->channels != 0) {117 if (s->samplerate != 0 /* && s->channels != 0 */) { 119 118 return aubio_sink_apple_audio_open(s); 120 119 } … … 151 150 CFURLRef fileURL = createURLFromPath(s->path); 152 151 bool overwrite = true; 152 153 // set the in-memory format 154 AudioStreamBasicDescription inputFormat; 155 memset(&inputFormat, 0, sizeof(AudioStreamBasicDescription)); 156 inputFormat.mFormatID = kAudioFormatLinearPCM; 157 inputFormat.mSampleRate = (Float64)(s->samplerate); 158 inputFormat.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; 159 inputFormat.mChannelsPerFrame = s->channels; 160 inputFormat.mBitsPerChannel = sizeof(smpl_t) * 8; 161 inputFormat.mFramesPerPacket = 1; 162 inputFormat.mBytesPerFrame = inputFormat.mBitsPerChannel * inputFormat.mChannelsPerFrame / 8; 163 inputFormat.mBytesPerPacket = inputFormat.mFramesPerPacket * inputFormat.mBytesPerFrame; 153 164 OSStatus err = noErr; 154 165 err = ExtAudioFileCreateWithURL(fileURL, fileType, &clientFormat, NULL, … … 162 173 goto beach; 163 174 } 164 if (createAubioBufferList(&s->bufferList, s->channels, s->max_frames * s->channels)) { 175 176 err = ExtAudioFileSetProperty(s->audioFile, 177 kExtAudioFileProperty_ClientDataFormat, 178 sizeof(AudioStreamBasicDescription), &inputFormat); 179 if (err) { 180 char_t errorstr[20]; 181 AUBIO_ERR("sink_apple_audio: error when trying to set output format on %s " 182 "(%s)\n", s->path, getPrintableOSStatusError(errorstr, err)); 183 goto beach; 184 } 185 186 if (createAudioBufferList(&s->bufferList, s->channels, s->max_frames * s->channels)) { 165 187 AUBIO_ERR("sink_apple_audio: error when creating buffer list for %s, " 166 188 "out of memory? \n", s->path); … … 175 197 void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data, uint_t write) { 176 198 UInt32 c, v; 177 short *data = (short*)s->bufferList.mBuffers[0].mData; 178 if (write > s->max_frames) { 179 AUBIO_WRN("sink_apple_audio: trying to write %d frames, max %d\n", write, s->max_frames); 180 write = s->max_frames; 181 } 182 smpl_t *buf = write_data->data; 183 184 if (buf) { 185 for (c = 0; c < s->channels; c++) { 186 for (v = 0; v < write; v++) { 187 data[v * s->channels + c] = 188 FLOAT_TO_SHORT(buf[ v * s->channels + c]); 189 } 190 } 191 } 192 aubio_sink_apple_audio_write(s, write); 199 smpl_t *data = (smpl_t*)s->bufferList.mBuffers[0].mData; 200 uint_t length = aubio_sink_validate_input_length("sink_apple_audio", s->path, 201 s->max_frames, write_data->length, write); 202 203 for (c = 0; c < s->channels; c++) { 204 for (v = 0; v < length; v++) { 205 data[v * s->channels + c] = write_data->data[v]; 206 } 207 } 208 209 aubio_sink_apple_audio_write(s, length); 193 210 } 194 211 195 212 void aubio_sink_apple_audio_do_multi(aubio_sink_apple_audio_t * s, fmat_t * write_data, uint_t write) { 196 213 UInt32 c, v; 197 short *data = (short*)s->bufferList.mBuffers[0].mData; 198 if (write > s->max_frames) { 199 AUBIO_WRN("sink_apple_audio: trying to write %d frames, max %d\n", write, s->max_frames); 200 write = s->max_frames; 201 } 202 smpl_t **buf = write_data->data; 203 204 if (buf) { 205 for (c = 0; c < s->channels; c++) { 206 for (v = 0; v < write; v++) { 207 data[v * s->channels + c] = 208 FLOAT_TO_SHORT(buf[c][v]); 209 } 210 } 211 } 212 aubio_sink_apple_audio_write(s, write); 214 smpl_t *data = (smpl_t*)s->bufferList.mBuffers[0].mData; 215 uint_t channels = aubio_sink_validate_input_channels("sink_apple_audio", 216 s->path, s->channels, write_data->height); 217 uint_t length = aubio_sink_validate_input_length("sink_apple_audio", s->path, 218 s->max_frames, write_data->length, write); 219 220 for (c = 0; c < channels; c++) { 221 for (v = 0; v < length; v++) { 222 data[v * s->channels + c] = write_data->data[c][v]; 223 } 224 } 225 226 aubio_sink_apple_audio_write(s, length); 213 227 } 214 228 215 229 void aubio_sink_apple_audio_write(aubio_sink_apple_audio_t *s, uint_t write) { 216 230 OSStatus err = noErr; 231 // set mDataByteSize to match the number of frames to be written 232 // see https://www.mail-archive.com/coreaudio-api@lists.apple.com/msg01109.html 233 s->bufferList.mBuffers[0].mDataByteSize = write * s->channels 234 * sizeof(smpl_t); 217 235 if (s->async) { 218 236 err = ExtAudioFileWriteAsync(s->audioFile, write, &s->bufferList); … … 258 276 259 277 void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s) { 260 if (s->audioFile) aubio_sink_apple_audio_close (s); 261 if (s->path) AUBIO_FREE(s->path); 278 AUBIO_ASSERT(s); 279 if (s->audioFile) 280 aubio_sink_apple_audio_close (s); 281 if (s->path) 282 AUBIO_FREE(s->path); 262 283 freeAudioBufferList(&s->bufferList); 263 284 AUBIO_FREE(s); 264 return;265 285 } 266 286 -
src/io/sink_sndfile.c
rf87e191 r868c6b8 59 59 if (path == NULL) { 60 60 AUBIO_ERR("sink_sndfile: Aborted opening null path\n"); 61 return NULL; 62 } 63 64 if (s->path) AUBIO_FREE(s->path); 61 goto beach; 62 } 63 65 64 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 66 65 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 98 97 s->samplerate = samplerate; 99 98 // automatically open when both samplerate and channels have been set 100 if ( s->samplerate != 0 &&s->channels != 0) {99 if (/* s->samplerate != 0 && */ s->channels != 0) { 101 100 return aubio_sink_sndfile_open(s); 102 101 } … … 111 110 s->channels = channels; 112 111 // automatically open when both samplerate and channels have been set 113 if (s->samplerate != 0 && s->channels != 0) {112 if (s->samplerate != 0 /* && s->channels != 0 */) { 114 113 return aubio_sink_sndfile_open(s); 115 114 } … … 148 147 /* allocate data for de/interleaving reallocated when needed. */ 149 148 if (s->scratch_size >= MAX_SIZE * AUBIO_MAX_CHANNELS) { 150 abort(); 151 AUBIO_ERR("sink_sndfile: %d x %d exceeds maximum aubio_sink_sndfile buffer size %d\n", 149 AUBIO_ERR("sink_sndfile: %d x %d exceeds maximum buffer size %d\n", 152 150 s->max_size, s->channels, MAX_SIZE * AUBIO_MAX_CHANNELS); 153 151 return AUBIO_FAIL; … … 159 157 160 158 void aubio_sink_sndfile_do(aubio_sink_sndfile_t *s, fvec_t * write_data, uint_t write){ 161 uint_t i, j, channels = s->channels; 162 int nsamples = 0; 163 smpl_t *pwrite; 159 uint_t i, j; 164 160 sf_count_t written_frames; 165 166 if (write > s->max_size) { 167 AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n", 168 write, s->max_size); 169 write = s->max_size; 170 } 171 172 nsamples = channels * write; 161 uint_t channels = s->channels; 162 uint_t length = aubio_sink_validate_input_length("sink_sndfile", s->path, 163 s->max_size, write_data->length, write); 164 int nsamples = channels * length; 173 165 174 166 /* interleaving data */ 175 167 for ( i = 0; i < channels; i++) { 176 pwrite = (smpl_t *)write_data->data; 177 for (j = 0; j < write; j++) { 178 s->scratch_data[channels*j+i] = pwrite[j]; 168 for (j = 0; j < length; j++) { 169 s->scratch_data[channels*j+i] = write_data->data[j]; 179 170 } 180 171 } … … 189 180 190 181 void aubio_sink_sndfile_do_multi(aubio_sink_sndfile_t *s, fmat_t * write_data, uint_t write){ 191 uint_t i, j, channels = s->channels; 192 int nsamples = 0; 193 smpl_t *pwrite; 182 uint_t i, j; 194 183 sf_count_t written_frames; 195 196 if (write > s->max_size) { 197 AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n", 198 write, s->max_size); 199 write = s->max_size; 200 } 201 202 nsamples = channels * write; 184 uint_t channels = aubio_sink_validate_input_channels("sink_sndfile", s->path, 185 s->channels, write_data->height); 186 uint_t length = aubio_sink_validate_input_length("sink_sndfile", s->path, 187 s->max_size, write_data->length, write); 188 int nsamples = channels * length; 203 189 204 190 /* interleaving data */ 205 for ( i = 0; i < write_data->height; i++) { 206 pwrite = (smpl_t *)write_data->data[i]; 207 for (j = 0; j < write; j++) { 208 s->scratch_data[channels*j+i] = pwrite[j]; 191 for ( i = 0; i < channels; i++) { 192 for (j = 0; j < length; j++) { 193 s->scratch_data[channels*j+i] = write_data->data[i][j]; 209 194 } 210 195 } … … 231 216 232 217 void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s){ 233 if (!s) return; 234 if (s->path) AUBIO_FREE(s->path); 235 aubio_sink_sndfile_close(s); 236 AUBIO_FREE(s->scratch_data); 218 AUBIO_ASSERT(s); 219 if (s->handle) 220 aubio_sink_sndfile_close(s); 221 if (s->path) 222 AUBIO_FREE(s->path); 223 if (s->scratch_data) 224 AUBIO_FREE(s->scratch_data); 237 225 AUBIO_FREE(s); 238 226 } -
src/io/sink_wavwrite.c
rf87e191 r868c6b8 88 88 goto beach; 89 89 } 90 if ((sint_t)samplerate < 0) { 91 AUBIO_ERR("sink_wavwrite: Can not create %s with samplerate %d\n", path, samplerate); 92 goto beach; 93 } 94 95 if (s->path) AUBIO_FREE(s->path); 90 96 91 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 97 92 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 136 131 s->samplerate = samplerate; 137 132 // automatically open when both samplerate and channels have been set 138 if ( s->samplerate != 0 &&s->channels != 0) {133 if (/* s->samplerate != 0 && */ s->channels != 0) { 139 134 return aubio_sink_wavwrite_open(s); 140 135 } … … 149 144 s->channels = channels; 150 145 // automatically open when both samplerate and channels have been set 151 if (s->samplerate != 0 && s->channels != 0) {146 if (s->samplerate != 0 /* && s->channels != 0 */) { 152 147 return aubio_sink_wavwrite_open(s); 153 148 } … … 234 229 235 230 void aubio_sink_wavwrite_do(aubio_sink_wavwrite_t *s, fvec_t * write_data, uint_t write){ 236 uint_t i = 0, written_frames = 0; 237 238 if (write > s->max_size) { 239 AUBIO_WRN("sink_wavwrite: trying to write %d frames to %s, " 240 "but only %d can be written at a time\n", write, s->path, s->max_size); 241 write = s->max_size; 242 } 243 244 for (i = 0; i < write; i++) { 245 s->scratch_data[i] = HTOLES(FLOAT_TO_SHORT(write_data->data[i])); 246 } 247 written_frames = fwrite(s->scratch_data, 2, write, s->fid); 231 uint_t c = 0, i = 0, written_frames = 0; 232 uint_t length = aubio_sink_validate_input_length("sink_wavwrite", s->path, 233 s->max_size, write_data->length, write); 234 235 for (c = 0; c < s->channels; c++) { 236 for (i = 0; i < length; i++) { 237 s->scratch_data[i * s->channels + c] = HTOLES(FLOAT_TO_SHORT(write_data->data[i])); 238 } 239 } 240 written_frames = fwrite(s->scratch_data, 2, length * s->channels, s->fid); 248 241 249 242 if (written_frames != write) { … … 258 251 uint_t c = 0, i = 0, written_frames = 0; 259 252 260 if (write > s->max_size) { 261 AUBIO_WRN("sink_wavwrite: trying to write %d frames to %s, " 262 "but only %d can be written at a time\n", write, s->path, s->max_size); 263 write = s->max_size; 264 } 265 266 for (c = 0; c < s->channels; c++) { 267 for (i = 0; i < write; i++) { 253 uint_t channels = aubio_sink_validate_input_channels("sink_wavwrite", s->path, 254 s->channels, write_data->height); 255 uint_t length = aubio_sink_validate_input_length("sink_wavwrite", s->path, 256 s->max_size, write_data->length, write); 257 258 for (c = 0; c < channels; c++) { 259 for (i = 0; i < length; i++) { 268 260 s->scratch_data[i * s->channels + c] = HTOLES(FLOAT_TO_SHORT(write_data->data[c][i])); 269 261 } 270 262 } 271 written_frames = fwrite(s->scratch_data, 2, write* s->channels, s->fid);263 written_frames = fwrite(s->scratch_data, 2, length * s->channels, s->fid); 272 264 273 265 if (written_frames != write * s->channels) { … … 298 290 299 291 void del_aubio_sink_wavwrite(aubio_sink_wavwrite_t * s){ 300 if (!s) return; 301 aubio_sink_wavwrite_close(s); 302 if (s->path) AUBIO_FREE(s->path); 303 AUBIO_FREE(s->scratch_data); 292 AUBIO_ASSERT(s); 293 if (s->fid) 294 aubio_sink_wavwrite_close(s); 295 if (s->path) 296 AUBIO_FREE(s->path); 297 if (s->scratch_data) 298 AUBIO_FREE(s->scratch_data); 304 299 AUBIO_FREE(s); 305 300 } -
src/io/source.c
rf87e191 r868c6b8 122 122 " (no source built-in)\n", uri, samplerate, hop_size); 123 123 #endif 124 AUBIO_FREE(s);124 del_aubio_source(s); 125 125 return NULL; 126 126 } … … 139 139 140 140 void del_aubio_source(aubio_source_t * s) { 141 if (!s) return; 142 s->s_del((void *)s->source); 141 AUBIO_ASSERT(s); 142 if (s->s_del && s->source) 143 s->s_del((void *)s->source); 143 144 AUBIO_FREE(s); 144 145 } -
src/io/source.h
rf87e191 r868c6b8 60 60 61 61 \example io/test-source.c 62 \example io/test-source_multi.c63 62 64 63 */ -
src/io/source_apple_audio.c
rf87e191 r868c6b8 34 34 #define RT_BYTE3( a ) ( ((a) >> 16) & 0xff ) 35 35 #define RT_BYTE4( a ) ( ((a) >> 24) & 0xff ) 36 37 #define SHORT_TO_FLOAT(x) (smpl_t)(x * 3.0517578125e-05)38 36 39 37 struct _aubio_source_apple_audio_t { … … 49 47 }; 50 48 51 extern int createAu bioBufferList(AudioBufferList *bufferList, int channels, int max_source_samples);49 extern int createAudioBufferList(AudioBufferList *bufferList, int channels, int max_source_samples); 52 50 extern void freeAudioBufferList(AudioBufferList *bufferList); 53 51 extern CFURLRef createURLFromPath(const char * path); … … 60 58 aubio_source_apple_audio_t * s = AUBIO_NEW(aubio_source_apple_audio_t); 61 59 62 if (path == NULL ) {60 if (path == NULL || strnlen(path, PATH_MAX) < 1) { 63 61 AUBIO_ERROR("source_apple_audio: Aborted opening null path\n"); 64 62 goto beach; … … 86 84 87 85 beach: 88 AUBIO_FREE(s);86 del_aubio_source_apple_audio(s); 89 87 return NULL; 90 88 } … … 95 93 UInt32 propSize; 96 94 97 if (s->path) AUBIO_FREE(s->path);98 95 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 99 96 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 140 137 141 138 AudioStreamBasicDescription clientFormat; 142 propSize = sizeof( clientFormat);139 propSize = sizeof(AudioStreamBasicDescription); 143 140 memset(&clientFormat, 0, sizeof(AudioStreamBasicDescription)); 144 141 clientFormat.mFormatID = kAudioFormatLinearPCM; 145 142 clientFormat.mSampleRate = (Float64)(s->samplerate); 146 clientFormat.mFormatFlags = kAudioFormatFlagIs SignedInteger | kAudioFormatFlagIsPacked;143 clientFormat.mFormatFlags = kAudioFormatFlagIsFloat; 147 144 clientFormat.mChannelsPerFrame = s->channels; 148 clientFormat.mBitsPerChannel = sizeof(s hort) * 8;145 clientFormat.mBitsPerChannel = sizeof(smpl_t) * 8; 149 146 clientFormat.mFramesPerPacket = 1; 150 147 clientFormat.mBytesPerFrame = clientFormat.mBitsPerChannel * clientFormat.mChannelsPerFrame / 8; 151 148 clientFormat.mBytesPerPacket = clientFormat.mFramesPerPacket * clientFormat.mBytesPerFrame; 152 clientFormat.mReserved = 0;153 149 154 150 // set the client format description … … 188 184 // allocate the AudioBufferList 189 185 freeAudioBufferList(&s->bufferList); 190 if (createAu bioBufferList(&s->bufferList, s->channels, s->block_size * s->channels)) {186 if (createAudioBufferList(&s->bufferList, s->channels, s->block_size * s->channels)) { 191 187 AUBIO_ERR("source_apple_audio: failed creating bufferList\n"); 192 188 goto beach; … … 197 193 } 198 194 199 void aubio_source_apple_audio_do(aubio_source_apple_audio_t *s, fvec_t * read_to, uint_t * read) { 200 UInt32 c, v, loadedPackets = s->block_size; 195 static UInt32 aubio_source_apple_audio_read_frame(aubio_source_apple_audio_t *s) 196 { 197 UInt32 loadedPackets = s->block_size; 201 198 OSStatus err = ExtAudioFileRead(s->audioFile, &loadedPackets, &s->bufferList); 202 199 if (err) { … … 205 202 "with ExtAudioFileRead (%s)\n", s->path, 206 203 getPrintableOSStatusError(errorstr, err)); 207 goto beach; 208 } 209 210 short *data = (short*)s->bufferList.mBuffers[0].mData; 211 212 smpl_t *buf = read_to->data; 204 } 205 return loadedPackets; 206 } 207 208 void aubio_source_apple_audio_do(aubio_source_apple_audio_t *s, fvec_t * read_to, 209 uint_t * read) { 210 uint_t c, v; 211 UInt32 loadedPackets = aubio_source_apple_audio_read_frame(s); 212 smpl_t *data = (smpl_t*)s->bufferList.mBuffers[0].mData; 213 213 214 214 for (v = 0; v < loadedPackets; v++) { 215 buf[v] = 0.;215 read_to->data[v] = 0.; 216 216 for (c = 0; c < s->channels; c++) { 217 buf[v] += SHORT_TO_FLOAT(data[ v * s->channels + c]);218 } 219 buf[v] /= (smpl_t)s->channels;217 read_to->data[v] += data[ v * s->channels + c]; 218 } 219 read_to->data[v] /= (smpl_t)s->channels; 220 220 } 221 221 // short read, fill with zeros 222 222 if (loadedPackets < s->block_size) { 223 223 for (v = loadedPackets; v < s->block_size; v++) { 224 buf[v] = 0.;224 read_to->data[v] = 0.; 225 225 } 226 226 } … … 228 228 *read = (uint_t)loadedPackets; 229 229 return; 230 beach:231 *read = 0;232 return;233 230 } 234 231 235 232 void aubio_source_apple_audio_do_multi(aubio_source_apple_audio_t *s, fmat_t * read_to, uint_t * read) { 236 UInt32 c, v, loadedPackets = s->block_size; 237 OSStatus err = ExtAudioFileRead(s->audioFile, &loadedPackets, &s->bufferList); 238 if (err) { 239 char_t errorstr[20]; 240 AUBIO_ERROR("source_apple_audio: error while reading %s " 241 "with ExtAudioFileRead (%s)\n", s->path, 242 getPrintableOSStatusError(errorstr, err)); 243 goto beach; 244 } 245 246 short *data = (short*)s->bufferList.mBuffers[0].mData; 247 248 smpl_t **buf = read_to->data; 233 uint_t c, v; 234 UInt32 loadedPackets = aubio_source_apple_audio_read_frame(s); 235 smpl_t *data = (smpl_t*)s->bufferList.mBuffers[0].mData; 249 236 250 237 for (v = 0; v < loadedPackets; v++) { 251 238 for (c = 0; c < read_to->height; c++) { 252 buf[c][v] = SHORT_TO_FLOAT(data[ v * s->channels + c]);239 read_to->data[c][v] = data[ v * s->channels + c]; 253 240 } 254 241 } … … 258 245 for (v = 0; v < loadedPackets; v++) { 259 246 for (c = s->channels; c < read_to->height; c++) { 260 buf[c][v] = SHORT_TO_FLOAT(data[ v * s->channels + (s->channels - 1)]);247 read_to->data[c][v] = data[ v * s->channels + (s->channels - 1)]; 261 248 } 262 249 } … … 266 253 for (v = loadedPackets; v < s->block_size; v++) { 267 254 for (c = 0; c < read_to->height; c++) { 268 buf[c][v] = 0.;255 read_to->data[c][v] = 0.; 269 256 } 270 257 } 271 258 } 259 272 260 *read = (uint_t)loadedPackets; 273 return;274 beach:275 *read = 0;276 261 return; 277 262 } … … 294 279 295 280 void del_aubio_source_apple_audio(aubio_source_apple_audio_t * s){ 281 AUBIO_ASSERT(s); 296 282 aubio_source_apple_audio_close (s); 297 283 if (s->path) AUBIO_FREE(s->path); 298 284 freeAudioBufferList(&s->bufferList); 299 285 AUBIO_FREE(s); 300 return;301 286 } 302 287 … … 324 309 // after a short read, the bufferList size needs to resetted to prepare for a full read 325 310 AudioBufferList *bufferList = &s->bufferList; 326 bufferList->mBuffers[0].mDataByteSize = s->block_size * s->channels * sizeof (s hort);311 bufferList->mBuffers[0].mDataByteSize = s->block_size * s->channels * sizeof (smpl_t); 327 312 // do the actual seek 328 313 err = ExtAudioFileSeek(s->audioFile, resampled_pos); -
src/io/source_avcodec.c
rf87e191 r868c6b8 45 45 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57,0,0) 46 46 #define HAVE_AUBIO_LIBAVCODEC_DEPRECATED 1 47 #endif 48 49 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58,3,102) 50 #define HAVE_AUBIO_LIBAVCODEC_TIMEBASE_FIX 1 47 51 #endif 48 52 … … 144 148 s->channels = 1; 145 149 146 if (s->path) AUBIO_FREE(s->path);147 150 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 148 151 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 240 243 goto beach; 241 244 } 245 #if HAVE_AUBIO_LIBAVCODEC_TIMEBASE_FIX 246 // avoids 'skipped frames warning' with avecodec < 58, deprecated after 247 av_codec_set_pkt_timebase(avCodecCtx, 248 avFormatCtx->streams[selected_stream]->time_base); 249 #endif 242 250 #endif 243 251 … … 631 639 632 640 void del_aubio_source_avcodec(aubio_source_avcodec_t * s){ 633 if (!s) return;641 AUBIO_ASSERT(s); 634 642 aubio_source_avcodec_close(s); 635 643 if (s->output != NULL) { -
src/io/source_sndfile.c
rf87e191 r868c6b8 87 87 s->channels = 1; 88 88 89 if (s->path) AUBIO_FREE(s->path);90 89 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 91 90 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 332 331 333 332 void del_aubio_source_sndfile(aubio_source_sndfile_t * s){ 334 if (!s) return;333 AUBIO_ASSERT(s); 335 334 aubio_source_sndfile_close(s); 336 335 #ifdef HAVE_SAMPLERATE -
src/io/source_wavread.c
rf87e191 r868c6b8 92 92 } 93 93 94 if (s->path) AUBIO_FREE(s->path);95 94 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 96 95 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 472 471 473 472 void del_aubio_source_wavread(aubio_source_wavread_t * s) { 474 if (!s) return;473 AUBIO_ASSERT(s); 475 474 aubio_source_wavread_close(s); 476 475 if (s->short_output) AUBIO_FREE(s->short_output); -
src/io/utils_apple_audio.c
rf87e191 r868c6b8 13 13 char_t *getPrintableOSStatusError(char_t *str, OSStatus error); 14 14 15 int createAubioBufferList(AudioBufferList * bufferList, int channels, int max_source_samples) { 15 int createAudioBufferList(AudioBufferList * bufferList, int channels, 16 int max_source_samples) { 16 17 bufferList->mNumberBuffers = 1; 17 18 bufferList->mBuffers[0].mNumberChannels = channels; 18 bufferList->mBuffers[0].mData = AUBIO_ARRAY(s hort, max_source_samples);19 bufferList->mBuffers[0].mDataByteSize = max_source_samples * sizeof(s hort);19 bufferList->mBuffers[0].mData = AUBIO_ARRAY(smpl_t, max_source_samples); 20 bufferList->mBuffers[0].mDataByteSize = max_source_samples * sizeof(smpl_t); 20 21 return 0; 21 22 } -
src/notes/notes.c
rf87e191 r868c6b8 84 84 85 85 o->onset = new_aubio_onset (onset_method, o->onset_buf_size, o->hop_size, o->samplerate); 86 if (o->onset == NULL) goto fail; 86 87 if (o->onset_threshold != 0.) aubio_onset_set_threshold (o->onset, o->onset_threshold); 87 88 o->onset_output = new_fvec (1); … … 99 100 o->note_buffer = new_fvec(o->median); 100 101 o->note_buffer2 = new_fvec(o->median); 102 103 if (!o->onset_output || !o->pitch_output || 104 !o->note_buffer || !o->note_buffer2) goto fail; 101 105 102 106 o->curnote = -1.; -
src/pitch/pitchmcomb.c
rf87e191 r868c6b8 38 38 * sort_pitchpeak(peaks, length); 39 39 */ 40 #if 0 40 41 /** spectral_peak comparison function (must return signed int) */ 41 42 static sint_t aubio_pitchmcomb_sort_peak_comp (const void *x, const void *y); … … 45 46 uint_t aubio_pitch_cands (aubio_pitchmcomb_t * p, const cvec_t * fftgrain, 46 47 smpl_t * cands); 48 #endif 47 49 48 50 /** sort spectral_candidate against their comb ene */ 49 51 void aubio_pitchmcomb_sort_cand_ene (aubio_spectralcandidate_t ** candidates, 50 52 uint_t nbins); 53 #if 0 51 54 /** sort spectral_candidate against their frequency */ 52 55 void aubio_pitchmcomb_sort_cand_freq (aubio_spectralcandidate_t ** candidates, 53 56 uint_t nbins); 57 #endif 54 58 55 59 struct _aubio_pitchmcomb_t … … 134 138 } 135 139 140 #if 0 136 141 uint_t 137 142 aubio_pitch_cands (aubio_pitchmcomb_t * p, const cvec_t * fftgrain, smpl_t * cands) … … 164 169 } 165 170 } 171 #endif 166 172 167 173 void … … 314 320 } 315 321 322 #if 0 316 323 void 317 324 aubio_pitchmcomb_sort_peak (aubio_spectralpeak_t * peaks, uint_t nbins) … … 343 350 } 344 351 345 346 352 void 347 353 aubio_pitchmcomb_sort_cand_freq (aubio_spectralcandidate_t ** candidates, … … 357 363 } 358 364 } 365 #endif 359 366 360 367 aubio_pitchmcomb_t * -
src/pitch/pitchspecacf.c
rf87e191 r868c6b8 93 93 del_fvec (p->sqrmag); 94 94 del_fvec (p->fftout); 95 del_fvec (p->acf); 95 96 AUBIO_FREE (p); 96 97 } -
src/pitch/pitchyin.c
rf87e191 r868c6b8 40 40 }; 41 41 42 #if 0 42 43 /** compute difference function 43 44 … … 61 62 */ 62 63 uint_t aubio_pitchyin_getpitch (const fvec_t * yinbuf); 64 #endif 63 65 64 66 aubio_pitchyin_t * … … 79 81 } 80 82 83 #if 0 81 84 /* outputs the difference function */ 82 85 void … … 128 131 return 0; 129 132 } 133 #endif 130 134 131 135 /* all the above in one */ -
src/pitch/pitchyinfast.c
rf87e191 r868c6b8 59 59 o->kernel_fft = new_fvec (bufsize); 60 60 o->fft = new_aubio_fft (bufsize); 61 if (!o->yin || !o->tmpdata || !o->tmpdata || !o->sqdiff 62 || !o->kernel || !o->samples_fft || !o->kernel || !o->fft) 63 { 64 del_aubio_pitchyinfast(o); 65 return NULL; 66 } 61 67 o->tol = 0.15; 62 68 o->peak_pos = 0; … … 67 73 del_aubio_pitchyinfast (aubio_pitchyinfast_t * o) 68 74 { 69 del_fvec (o->yin); 70 del_fvec (o->tmpdata); 71 del_fvec (o->sqdiff); 72 del_fvec (o->kernel); 73 del_fvec (o->samples_fft); 74 del_fvec (o->kernel_fft); 75 del_aubio_fft (o->fft); 75 if (o->yin) 76 del_fvec (o->yin); 77 if (o->tmpdata) 78 del_fvec (o->tmpdata); 79 if (o->sqdiff) 80 del_fvec (o->sqdiff); 81 if (o->kernel) 82 del_fvec (o->kernel); 83 if (o->samples_fft) 84 del_fvec (o->samples_fft); 85 if (o->kernel_fft) 86 del_fvec (o->kernel_fft); 87 if (o->fft) 88 del_aubio_fft (o->fft); 76 89 AUBIO_FREE (o); 77 90 } -
src/spectral/awhitening.c
rf87e191 r868c6b8 44 44 { 45 45 uint_t i = 0; 46 for (i = 0; i < o->peak_values->length; i++) { 46 uint_t length = MIN(fftgrain->length, o->peak_values->length); 47 for (i = 0; i < length; i++) { 47 48 smpl_t tmp = MAX(o->r_decay * o->peak_values->data[i], o->floor); 48 49 o->peak_values->data[i] = MAX(fftgrain->norm[i], tmp); -
src/spectral/filterbank.c
rf87e191 r868c6b8 131 131 aubio_filterbank_get_power (aubio_filterbank_t *f) 132 132 { 133 return f-> norm;133 return f->power; 134 134 } -
src/spectral/mfcc.c
rf87e191 r868c6b8 144 144 } 145 145 146 uint_t aubio_mfcc_get_power (aubio_mfcc_t *mf)146 smpl_t aubio_mfcc_get_power (aubio_mfcc_t *mf) 147 147 { 148 148 return aubio_filterbank_get_power(mf->fb); … … 155 155 } 156 156 157 uint_t aubio_mfcc_get_scale (aubio_mfcc_t *mf)157 smpl_t aubio_mfcc_get_scale (aubio_mfcc_t *mf) 158 158 { 159 159 return mf->scale; -
src/spectral/mfcc.h
rf87e191 r868c6b8 93 93 94 94 */ 95 uint_t aubio_mfcc_get_power (aubio_mfcc_t *mf);95 smpl_t aubio_mfcc_get_power (aubio_mfcc_t *mf); 96 96 97 97 /** set scaling parameter … … 112 112 113 113 */ 114 uint_t aubio_mfcc_get_scale (aubio_mfcc_t *mf);114 smpl_t aubio_mfcc_get_scale (aubio_mfcc_t *mf); 115 115 116 116 /** Mel filterbank initialization -
src/utils/hist.c
rf87e191 r868c6b8 44 44 smpl_t accum = step; 45 45 uint_t i; 46 if ((sint_t)nelems <= 0) { 47 AUBIO_FREE(s); 48 return NULL; 49 } 46 50 s->nelems = nelems; 47 51 s->hist = new_fvec(nelems); -
tests/src/io/test-sink.c
rf87e191 r868c6b8 2 2 #include "utils_tests.h" 3 3 4 int main (int argc, char **argv) 4 int test_wrong_params(void); 5 6 int main(int argc, char **argv) 5 7 { 6 sint_t err = 0;7 8 if (argc < 3) {9 err = 2;10 PRINT_ ERR("not enough arguments\n");11 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n",argv[0]);8 uint_t err = 0; 9 if (argc < 3 || argc >= 6) { 10 PRINT_ERR("wrong number of arguments, running tests\n"); 11 err = test_wrong_params(); 12 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", 13 argv[0]); 12 14 return err; 13 15 } … … 20 22 char_t *sink_path = argv[2]; 21 23 24 aubio_source_t *src = NULL; 25 aubio_sink_t *snk = NULL; 26 22 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 23 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 24 if ( argc >= 6 ) {25 err = 2;26 PRINT_ERR("too many arguments\n");27 return err;28 }29 29 30 30 fvec_t *vec = new_fvec(hop_size); 31 if (!vec) { err = 1; goto beach_fvec; }31 if (!vec) { err = 1; goto failure; } 32 32 33 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 34 if (!i) { err = 1; goto beach_source; } 33 src = new_aubio_source(source_path, samplerate, hop_size); 34 if (!src) { err = 1; goto failure; } 35 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(src); 35 36 36 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 37 38 aubio_sink_t *o = new_aubio_sink(sink_path, samplerate); 39 if (!o) { err = 1; goto beach_sink; } 37 snk = new_aubio_sink(sink_path, samplerate); 38 if (!snk) { err = 1; goto failure; } 40 39 41 40 do { 42 aubio_source_do( i, vec, &read);43 aubio_sink_do( o, vec, read);41 aubio_source_do(src, vec, &read); 42 aubio_sink_do(snk, vec, read); 44 43 n_frames += read; 45 44 } while ( read == hop_size ); 46 45 47 PRINT_MSG(" read %d frames at %dHz (%d blocks) from %swritten to %s\n",46 PRINT_MSG("%d frames read at %dHz (%d blocks) from %s and written to %s\n", 48 47 n_frames, samplerate, n_frames / hop_size, 49 48 source_path, sink_path); 50 49 51 del_aubio_sink(o); 52 beach_sink: 53 del_aubio_source(i); 54 beach_source: 55 del_fvec(vec); 56 beach_fvec: 50 // close sink now (optional) 51 aubio_sink_close(snk); 52 53 failure: 54 if (snk) 55 del_aubio_sink(snk); 56 if (src) 57 del_aubio_source(src); 58 if (vec) 59 del_fvec(vec); 60 57 61 return err; 58 62 } 63 64 int test_wrong_params(void) 65 { 66 fvec_t *vec; 67 fmat_t *mat; 68 aubio_sink_t *s; 69 char_t sink_path[PATH_MAX] = "tmp_aubio_XXXXXX"; 70 uint_t samplerate = 44100; 71 uint_t hop_size = 256; 72 uint_t oversized_hop_size = 4097; 73 uint_t oversized_samplerate = 192000 * 8 + 1; 74 uint_t channels = 3; 75 uint_t oversized_channels = 1025; 76 // create temp file 77 int fd = create_temp_sink(sink_path); 78 79 if (!fd) return 1; 80 81 if (new_aubio_sink( 0, samplerate)) return 1; 82 if (new_aubio_sink("\0", samplerate)) return 1; 83 if (new_aubio_sink(sink_path, -1)) return 1; 84 85 s = new_aubio_sink(sink_path, 0); 86 87 // check setting wrong parameters fails 88 if (!aubio_sink_preset_samplerate(s, oversized_samplerate)) return 1; 89 if (!aubio_sink_preset_channels(s, oversized_channels)) return 1; 90 if (!aubio_sink_preset_channels(s, -1)) return 1; 91 92 // check setting valid parameters passes 93 if (aubio_sink_preset_samplerate(s, samplerate)) return 1; 94 if (aubio_sink_preset_channels(s, 1)) return 1; 95 96 // check writing a vector with valid length 97 vec = new_fvec(hop_size); 98 aubio_sink_do(s, vec, hop_size); 99 // check writing more than in the input 100 aubio_sink_do(s, vec, hop_size+1); 101 // check write 0 frames 102 aubio_sink_do(s, vec, 0); 103 del_fvec(vec); 104 105 // check writing an oversized vector 106 vec = new_fvec(oversized_hop_size); 107 aubio_sink_do(s, vec, oversized_hop_size); 108 del_fvec(vec); 109 110 // test delete without closing 111 del_aubio_sink(s); 112 113 s = new_aubio_sink(sink_path, 0); 114 115 // preset channels first 116 if (aubio_sink_preset_channels(s, channels)) return 1; 117 if (aubio_sink_preset_samplerate(s, samplerate)) return 1; 118 119 if (aubio_sink_get_samplerate(s) != samplerate) return 1; 120 if (aubio_sink_get_channels(s) != channels) return 1; 121 122 mat = new_fmat(channels, hop_size); 123 // check writing a vector with valid length 124 aubio_sink_do_multi(s, mat, hop_size); 125 // check writing 0 frames 126 aubio_sink_do_multi(s, mat, 0); 127 // check writing more than in the input 128 aubio_sink_do_multi(s, mat, hop_size+1); 129 del_fmat(mat); 130 131 // check writing oversized input 132 mat = new_fmat(channels, oversized_hop_size); 133 aubio_sink_do_multi(s, mat, oversized_hop_size); 134 del_fmat(mat); 135 136 // check writing undersized input 137 mat = new_fmat(channels - 1, hop_size); 138 aubio_sink_do_multi(s, mat, hop_size); 139 del_fmat(mat); 140 141 aubio_sink_close(s); 142 // test closing twice 143 aubio_sink_close(s); 144 145 del_aubio_sink(s); 146 147 // delete temp file 148 close_temp_sink(sink_path, fd); 149 150 return run_on_default_source_and_sink(main); 151 } -
tests/src/io/test-sink_apple_audio.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "apple_audio" 6 7 #ifdef HAVE_SINK_APPLE_AUDIO 8 #define HAVE_AUBIO_SINK_CUSTOM 9 #define aubio_sink_custom_t aubio_sink_apple_audio_t 10 #define new_aubio_sink_custom new_aubio_sink_apple_audio 11 #define del_aubio_sink_custom del_aubio_sink_apple_audio 12 #define aubio_sink_custom_do aubio_sink_apple_audio_do 13 #define aubio_sink_custom_do_multi aubio_sink_apple_audio_do_multi 14 #define aubio_sink_custom_close aubio_sink_apple_audio_close 15 #define aubio_sink_custom_preset_samplerate aubio_sink_apple_audio_preset_samplerate 16 #define aubio_sink_custom_preset_channels aubio_sink_apple_audio_preset_channels 17 #define aubio_sink_custom_get_samplerate aubio_sink_apple_audio_get_samplerate 18 #define aubio_sink_custom_get_channels aubio_sink_apple_audio_get_channels 19 #endif /* HAVE_SINK_APPLE_AUDIO */ 20 21 #include "base-sink_custom.h" 4 22 5 23 // this file uses the unstable aubio api, please use aubio_sink instead … … 8 26 int main (int argc, char **argv) 9 27 { 10 sint_t err = 0; 11 12 if (argc < 3) { 13 err = 2; 14 PRINT_ERR("not enough arguments\n"); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_SINK_APPLE_AUDIO 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_apple_audio_t *o = new_aubio_sink_apple_audio(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_apple_audio_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_apple_audio(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else /* HAVE_SINK_APPLE_AUDIO */ 63 err = 3; 64 PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); 65 #endif /* HAVE_SINK_APPLE_AUDIO */ 66 return err; 28 return base_main(argc, argv); 67 29 } -
tests/src/io/test-sink_sndfile.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "sndfile" 6 7 #ifdef HAVE_SNDFILE 8 #define HAVE_AUBIO_SINK_CUSTOM 9 #define aubio_sink_custom_t aubio_sink_sndfile_t 10 #define new_aubio_sink_custom new_aubio_sink_sndfile 11 #define del_aubio_sink_custom del_aubio_sink_sndfile 12 #define aubio_sink_custom_do aubio_sink_sndfile_do 13 #define aubio_sink_custom_do_multi aubio_sink_sndfile_do_multi 14 #define aubio_sink_custom_close aubio_sink_sndfile_close 15 #define aubio_sink_custom_preset_samplerate aubio_sink_sndfile_preset_samplerate 16 #define aubio_sink_custom_preset_channels aubio_sink_sndfile_preset_channels 17 #define aubio_sink_custom_get_samplerate aubio_sink_sndfile_get_samplerate 18 #define aubio_sink_custom_get_channels aubio_sink_sndfile_get_channels 19 #endif /* HAVE_SNDFILE */ 20 21 #include "base-sink_custom.h" 4 22 5 23 // this file uses the unstable aubio api, please use aubio_sink instead … … 8 26 int main (int argc, char **argv) 9 27 { 10 sint_t err = 0; 11 12 if (argc < 3) { 13 err = 2; 14 PRINT_ERR("not enough arguments\n"); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_SNDFILE 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_sndfile_t *o = new_aubio_sink_sndfile(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_sndfile_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_sndfile(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else 63 err = 3; 64 PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); 65 #endif /* HAVE_SNDFILE */ 66 return err; 28 return base_main(argc, argv); 67 29 } -
tests/src/io/test-sink_wavwrite.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "wavwrite" 6 7 #ifdef HAVE_WAVWRITE 8 #define HAVE_AUBIO_SINK_CUSTOM 9 #define aubio_sink_custom_t aubio_sink_wavwrite_t 10 #define new_aubio_sink_custom new_aubio_sink_wavwrite 11 #define del_aubio_sink_custom del_aubio_sink_wavwrite 12 #define aubio_sink_custom_do aubio_sink_wavwrite_do 13 #define aubio_sink_custom_do_multi aubio_sink_wavwrite_do_multi 14 #define aubio_sink_custom_close aubio_sink_wavwrite_close 15 #define aubio_sink_custom_preset_samplerate aubio_sink_wavwrite_preset_samplerate 16 #define aubio_sink_custom_preset_channels aubio_sink_wavwrite_preset_channels 17 #define aubio_sink_custom_get_samplerate aubio_sink_wavwrite_get_samplerate 18 #define aubio_sink_custom_get_channels aubio_sink_wavwrite_get_channels 19 #endif /* HAVE_WAVWRITE */ 20 21 #include "base-sink_custom.h" 4 22 5 23 // this file uses the unstable aubio api, please use aubio_sink instead … … 8 26 int main (int argc, char **argv) 9 27 { 10 sint_t err = 0; 11 12 if (argc < 3) { 13 err = 2; 14 PRINT_ERR("not enough arguments\n"); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_WAVWRITE 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_wavwrite_t *o = new_aubio_sink_wavwrite(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_wavwrite_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_wavwrite(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else 63 err = 3; 64 PRINT_ERR("aubio was not compiled with aubio_sink_wavwrite\n"); 65 #endif /* HAVE_WAVWRITE */ 66 return err; 28 return base_main(argc, argv); 67 29 } -
tests/src/io/test-source.c
rf87e191 r868c6b8 2 2 #include "utils_tests.h" 3 3 4 int main (int argc, char **argv) 4 int test_wrong_params(void); 5 6 int main(int argc, char **argv) 5 7 { 6 8 uint_t err = 0; 7 9 if (argc < 2) { 8 err = 2;9 PRINT_ERR("not enough arguments\n");10 PRINT_ERR("not enough arguments, running tests\n"); 11 err = test_wrong_params(); 10 12 PRINT_MSG("read a wave file as a mono vector\n"); 11 13 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); … … 23 25 uint_t hop_size = 256; 24 26 uint_t n_frames = 0, read = 0; 25 if ( argc == 3 ) samplerate = atoi(argv[2]);26 if ( argc == 4 ) hop_size = atoi(argv[3]);27 if ( argc >= 3 ) samplerate = atoi(argv[2]); 28 if ( argc >= 4 ) hop_size = atoi(argv[3]); 27 29 28 30 char_t *source_path = argv[1]; 29 31 30 31 32 aubio_source_t* s = 32 33 new_aubio_source(source_path, samplerate, hop_size); 33 if (!s) { err = 1; goto beach; }34 34 fvec_t *vec = new_fvec(hop_size); 35 if (!s || !vec) { err = 1; goto beach; } 35 36 36 37 uint_t n_frames_expected = aubio_source_get_duration(s); … … 50 51 // close the file (optional) 51 52 aubio_source_close(s); 53 54 beach: 55 if (vec) 56 del_fvec(vec); 57 if (s) 58 del_aubio_source(s); 59 return err; 60 } 61 62 int test_wrong_params(void) 63 { 64 char_t *uri = DEFINEDSTRING(AUBIO_TESTS_SOURCE); 65 uint_t samplerate = 44100; 66 uint_t hop_size = 512; 67 uint_t channels, read = 0; 68 fvec_t *vec; 69 fmat_t *mat; 70 aubio_source_t *s; 71 72 if (new_aubio_source(0, samplerate, hop_size)) return 1; 73 if (new_aubio_source("\0", samplerate, hop_size)) return 1; 74 if (new_aubio_source(uri, -1, hop_size)) return 1; 75 if (new_aubio_source(uri, 0, 0)) return 1; 76 77 s = new_aubio_source(uri, samplerate, hop_size); 78 if (!s) return 1; 79 channels = aubio_source_get_channels(s); 80 81 // vector to read downmixed samples 82 vec = new_fvec(hop_size); 83 // matrix to read individual channels 84 mat = new_fmat(channels, hop_size); 85 86 if (aubio_source_get_samplerate(s) != samplerate) return 1; 87 88 // read first hop_size frames 89 aubio_source_do(s, vec, &read); 90 if (read != hop_size) return 1; 91 92 // seek to 0 93 if(aubio_source_seek(s, 0)) return 1; 94 95 // read again as multiple channels 96 aubio_source_do_multi(s, mat, &read); 97 if (read != hop_size) return 1; 98 99 // close the file (optional) 100 aubio_source_close(s); 52 101 // test closing the file a second time 53 102 aubio_source_close(s); 54 103 55 del_fvec (vec); 56 del_aubio_source (s); 57 beach: 58 return err; 104 del_aubio_source(s); 105 del_fmat(mat); 106 del_fvec(vec); 107 108 return run_on_default_source(main); 59 109 } -
tests/src/io/test-source_apple_audio.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "apple_audio" 6 7 #ifdef HAVE_SOURCE_APPLE_AUDIO 8 #define HAVE_AUBIO_SOURCE_CUSTOM 9 #define aubio_source_custom_t aubio_source_apple_audio_t 10 #define new_aubio_source_custom new_aubio_source_apple_audio 11 #define del_aubio_source_custom del_aubio_source_apple_audio 12 #define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate 13 #define aubio_source_custom_get_duration aubio_source_apple_audio_get_duration 14 #define aubio_source_custom_do aubio_source_apple_audio_do 15 #define aubio_source_custom_do_multi aubio_source_apple_audio_do_multi 16 #define aubio_source_custom_seek aubio_source_apple_audio_seek 17 #define aubio_source_custom_close aubio_source_apple_audio_close 18 #define aubio_source_custom_get_channels aubio_source_apple_audio_get_channels 19 #define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate 20 #endif /* HAVE_SOURCE_APPLE_AUDIO */ 21 22 #include "base-source_custom.h" 4 23 5 24 // this file uses the unstable aubio api, please use aubio_source instead … … 8 27 int main (int argc, char **argv) 9 28 { 10 uint_t err = 0; 11 if (argc < 2) { 12 err = 2; 13 PRINT_ERR("not enough arguments\n"); 14 PRINT_MSG("read a wave file as a mono vector\n"); 15 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 16 PRINT_MSG("examples:\n"); 17 PRINT_MSG(" - read file.wav at original samplerate\n"); 18 PRINT_MSG(" %s file.wav\n", argv[0]); 19 PRINT_MSG(" - read file.aif at 32000Hz\n"); 20 PRINT_MSG(" %s file.aif 32000\n", argv[0]); 21 PRINT_MSG(" - read file.mp3 at original samplerate with 4096 blocks\n"); 22 PRINT_MSG(" %s file.mp3 0 4096 \n", argv[0]); 23 return err; 24 } 25 26 #if HAVE_SOURCE_APPLE_AUDIO 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc == 3 ) samplerate = atoi(argv[2]); 31 if ( argc == 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_apple_audio_t * s = 37 new_aubio_source_apple_audio(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_apple_audio_get_duration(s); 42 43 samplerate = aubio_source_apple_audio_get_samplerate(s); 44 45 do { 46 aubio_source_apple_audio_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_apple_audio (s); 57 beach: 58 #else /* HAVE_SOURCE_APPLE_AUDIO */ 59 err = 3; 60 PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); 61 #endif /* HAVE_SOURCE_APPLE_AUDIO */ 62 return err; 29 return base_main(argc, argv); 63 30 } -
tests/src/io/test-source_avcodec.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "avcodec" 6 7 #ifdef HAVE_LIBAV 8 #define HAVE_AUBIO_SOURCE_CUSTOM 9 #define aubio_source_custom_t aubio_source_avcodec_t 10 #define new_aubio_source_custom new_aubio_source_avcodec 11 #define del_aubio_source_custom del_aubio_source_avcodec 12 #define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate 13 #define aubio_source_custom_get_duration aubio_source_avcodec_get_duration 14 #define aubio_source_custom_do aubio_source_avcodec_do 15 #define aubio_source_custom_do_multi aubio_source_avcodec_do_multi 16 #define aubio_source_custom_seek aubio_source_avcodec_seek 17 #define aubio_source_custom_close aubio_source_avcodec_close 18 #define aubio_source_custom_get_channels aubio_source_avcodec_get_channels 19 #define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate 20 #endif /* HAVE_LIBAV */ 21 22 #include "base-source_custom.h" 4 23 5 24 // this file uses the unstable aubio api, please use aubio_source instead … … 8 27 int main (int argc, char **argv) 9 28 { 10 uint_t err = 0; 11 if (argc < 2) { 12 err = 2; 13 PRINT_ERR("not enough arguments\n"); 14 PRINT_MSG("read a wave file as a mono vector\n"); 15 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 16 PRINT_MSG("examples:\n"); 17 PRINT_MSG(" - read file.wav at original samplerate\n"); 18 PRINT_MSG(" %s file.wav\n", argv[0]); 19 PRINT_MSG(" - read file.wav at 32000Hz\n"); 20 PRINT_MSG(" %s file.aif 32000\n", argv[0]); 21 PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); 22 PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); 23 return err; 24 } 25 26 #ifdef HAVE_LIBAV 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc == 3 ) samplerate = atoi(argv[2]); 31 if ( argc == 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_avcodec_t * s = 37 new_aubio_source_avcodec(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_avcodec_get_duration(s); 42 43 samplerate = aubio_source_avcodec_get_samplerate(s); 44 45 do { 46 aubio_source_avcodec_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_avcodec (s); 57 beach: 58 #else /* HAVE_LIBAV */ 59 err = 3; 60 PRINT_ERR("aubio was not compiled with aubio_source_avcodec\n"); 61 #endif /* HAVE_LIBAV */ 62 return err; 29 return base_main(argc, argv); 63 30 } -
tests/src/io/test-source_sndfile.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "sndfile" 6 7 #ifdef HAVE_SNDFILE 8 #define HAVE_AUBIO_SOURCE_CUSTOM 9 #define aubio_source_custom_t aubio_source_sndfile_t 10 #define new_aubio_source_custom new_aubio_source_sndfile 11 #define del_aubio_source_custom del_aubio_source_sndfile 12 #define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate 13 #define aubio_source_custom_get_duration aubio_source_sndfile_get_duration 14 #define aubio_source_custom_do aubio_source_sndfile_do 15 #define aubio_source_custom_do_multi aubio_source_sndfile_do_multi 16 #define aubio_source_custom_seek aubio_source_sndfile_seek 17 #define aubio_source_custom_close aubio_source_sndfile_close 18 #define aubio_source_custom_get_channels aubio_source_sndfile_get_channels 19 #define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate 20 #endif /* HAVE_LIBAV */ 21 22 #include "base-source_custom.h" 4 23 5 24 // this file uses the unstable aubio api, please use aubio_source instead … … 8 27 int main (int argc, char **argv) 9 28 { 10 uint_t err = 0; 11 if (argc < 2) { 12 err = 2; 13 PRINT_ERR("not enough arguments\n"); 14 PRINT_MSG("read a wave file as a mono vector\n"); 15 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 16 PRINT_MSG("examples:\n"); 17 PRINT_MSG(" - read file.wav at original samplerate\n"); 18 PRINT_MSG(" %s file.wav\n", argv[0]); 19 PRINT_MSG(" - read file.wav at 32000Hz\n"); 20 PRINT_MSG(" %s file.aif 32000\n", argv[0]); 21 PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); 22 PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); 23 return err; 24 } 25 26 #ifdef HAVE_SNDFILE 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc == 3 ) samplerate = atoi(argv[2]); 31 if ( argc == 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_sndfile_t * s = 37 new_aubio_source_sndfile(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_sndfile_get_duration(s); 42 43 samplerate = aubio_source_sndfile_get_samplerate(s); 44 45 do { 46 aubio_source_sndfile_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_sndfile (s); 57 beach: 58 #else 59 err = 3; 60 PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); 61 #endif /* HAVE_SNDFILE */ 62 return err; 29 return base_main(argc, argv); 63 30 } -
tests/src/io/test-source_wavread.c
rf87e191 r868c6b8 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "wavread" 6 7 #ifdef HAVE_WAVREAD 8 #define HAVE_AUBIO_SOURCE_CUSTOM 9 #define aubio_source_custom_t aubio_source_wavread_t 10 #define new_aubio_source_custom new_aubio_source_wavread 11 #define del_aubio_source_custom del_aubio_source_wavread 12 #define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate 13 #define aubio_source_custom_get_duration aubio_source_wavread_get_duration 14 #define aubio_source_custom_do aubio_source_wavread_do 15 #define aubio_source_custom_do_multi aubio_source_wavread_do_multi 16 #define aubio_source_custom_seek aubio_source_wavread_seek 17 #define aubio_source_custom_close aubio_source_wavread_close 18 #define aubio_source_custom_get_channels aubio_source_wavread_get_channels 19 #define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate 20 #endif /* HAVE_WAVREAD */ 21 22 #include "base-source_custom.h" 4 23 5 24 // this file uses the unstable aubio api, please use aubio_source instead … … 8 27 int main (int argc, char **argv) 9 28 { 10 uint_t err = 0; 11 if (argc < 2) { 12 err = 2; 13 PRINT_ERR("not enough arguments\n"); 14 PRINT_MSG("read a wave file as a mono vector\n"); 15 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 16 PRINT_MSG("examples:\n"); 17 PRINT_MSG(" - read file.wav at original samplerate\n"); 18 PRINT_MSG(" %s file.wav\n", argv[0]); 19 PRINT_MSG(" - read file.wav at 32000Hz\n"); 20 PRINT_MSG(" %s file.aif 32000\n", argv[0]); 21 PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); 22 PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); 23 return err; 24 } 25 26 #ifdef HAVE_WAVREAD 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc == 3 ) samplerate = atoi(argv[2]); 31 if ( argc == 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_wavread_t * s = 37 new_aubio_source_wavread(source_path, samplerate, hop_size); 38 39 if (!s) { err = 1; goto beach; } 40 fvec_t *vec = new_fvec(hop_size); 41 42 uint_t n_frames_expected = aubio_source_wavread_get_duration(s); 43 44 samplerate = aubio_source_wavread_get_samplerate(s); 45 46 do { 47 aubio_source_wavread_do(s, vec, &read); 48 fvec_print (vec); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 53 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 54 source_path); 55 56 del_fvec (vec); 57 del_aubio_source_wavread (s); 58 beach: 59 #else 60 err = 3; 61 PRINT_ERR("aubio was not compiled with aubio_source_wavread\n"); 62 #endif /* HAVE_WAVREAD */ 63 return err; 29 return base_main(argc, argv); 64 30 } -
tests/src/onset/test-onset.c
rf87e191 r868c6b8 10 10 err = 2; 11 11 PRINT_WRN("no arguments, running tests\n"); 12 if (test_wrong_params() != 0) { 13 PRINT_ERR("tests failed!\n"); 14 err = 1; 15 } else { 16 err = 0; 17 } 12 err = test_wrong_params(); 18 13 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 19 14 return err; … … 23 18 uint_t hop_size = win_s / 4; 24 19 uint_t n_frames = 0, read = 0; 25 if ( argc == 3 ) samplerate = atoi(argv[2]);26 if ( argc == 4 ) hop_size = atoi(argv[3]);20 if ( argc >= 3 ) samplerate = atoi(argv[2]); 21 if ( argc >= 4 ) hop_size = atoi(argv[3]); 27 22 28 23 char_t *source_path = argv[1]; … … 75 70 uint_t samplerate = 44100; 76 71 // hop_size < 1 77 if (new_aubio_onset("default", 5, 0, samplerate)) 78 return 1; 72 if (new_aubio_onset("default", 5, 0, samplerate)) return 1; 73 79 74 // buf_size < 2 80 if (new_aubio_onset("default", 1, 1, samplerate)) 81 return 1; 75 if (new_aubio_onset("default", 1, 1, samplerate)) return 1; 76 82 77 // buf_size < hop_size 83 if (new_aubio_onset("default", hop_size, win_size, samplerate)) 84 return 1; 78 if (new_aubio_onset("default", hop_size, win_size, samplerate)) return 1; 79 85 80 // samplerate < 1 86 if (new_aubio_onset("default", 1024, 512, 0)) 87 return 1; 81 if (new_aubio_onset("default", 1024, 512, 0)) return 1; 88 82 89 83 // specdesc creation failed 90 if (new_aubio_onset("abcd", win_size, win_size/2, samplerate)) 91 return 1; 92 // pv creation failed 93 if (new_aubio_onset("default", 5, 2, samplerate)) 94 return 1; 84 if (new_aubio_onset("abcd", win_size, win_size/2, samplerate)) return 1; 95 85 96 86 aubio_onset_t *o; 87 88 // pv creation might fail 89 o = new_aubio_onset("default", 5, 2, samplerate); 90 if (o) del_aubio_onset(o); 91 97 92 o = new_aubio_onset("default", win_size, hop_size, samplerate); 98 if (!aubio_onset_set_default_parameters(o, "wrong_type")) 99 return 1; 93 if (!aubio_onset_set_default_parameters(o, "wrong_type")) return 1; 100 94 del_aubio_onset(o); 101 95 102 return 0;96 return run_on_default_source(main); 103 97 } -
tests/src/pitch/test-pitch.c
rf87e191 r868c6b8 31 31 aubio_cleanup (); 32 32 33 if (new_aubio_pitch(0, win_s, hop_s, samplerate)) return 1; 34 if (new_aubio_pitch("unknown", win_s, hop_s, samplerate)) return 1; 35 if (new_aubio_pitch("default", win_s, 0, samplerate)) return 1; 36 if (new_aubio_pitch("default", 0, hop_s, samplerate)) return 1; 37 if (new_aubio_pitch("default", hop_s, win_s, samplerate)) return 1; 38 if (new_aubio_pitch("default", win_s, hop_s, 0)) return 1; 39 40 o = new_aubio_pitch("default", win_s, hop_s, samplerate); 41 42 if (aubio_pitch_set_unit(o, "freq")) return 1; 43 if (aubio_pitch_set_unit(o, "hertz")) return 1; 44 if (aubio_pitch_set_unit(o, "Hertz")) return 1; 45 if (aubio_pitch_set_unit(o, "Hz")) return 1; 46 if (aubio_pitch_set_unit(o, "f0")) return 1; 47 if (aubio_pitch_set_unit(o, "midi")) return 1; 48 if (aubio_pitch_set_unit(o, "cent")) return 1; 49 if (aubio_pitch_set_unit(o, "bin")) return 1; 50 if (!aubio_pitch_set_unit(o, "unknown")) return 1; 51 52 if (aubio_pitch_set_tolerance(o, 0.3)) return 1; 53 if (aubio_pitch_set_silence(o, 0)) return 1; 54 if (aubio_pitch_set_silence(o, -200)) return 1; 55 if (!aubio_pitch_set_silence(o, -300)) return 1; 56 del_aubio_pitch(o); 57 58 // fft based might fail with non power of 2 59 o = new_aubio_pitch("yinfft", win_s + 1, hop_s, samplerate); 60 if (o) del_aubio_pitch(o); 61 o = new_aubio_pitch("yinfast", win_s + 1, hop_s, samplerate); 62 if (o) del_aubio_pitch(o); 63 o = new_aubio_pitch("fcomb", win_s + 1, hop_s, samplerate); 64 if (o) del_aubio_pitch(o); 65 o = new_aubio_pitch("mcomb", win_s + 1, hop_s, samplerate); 66 if (o) del_aubio_pitch(o); 67 o = new_aubio_pitch("specacf", win_s + 1, hop_s, samplerate); 68 if (o) del_aubio_pitch(o); 69 33 70 return 0; 34 71 } -
tests/src/spectral/test-awhitening.c
rf87e191 r868c6b8 11 11 err = 2; 12 12 PRINT_WRN("no arguments, running tests\n"); 13 if (test_wrong_params() != 0) { 14 PRINT_ERR("tests failed!\n"); 15 err = 1; 16 } else { 17 err = 0; 18 } 13 err = test_wrong_params(); 19 14 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 20 15 return err; … … 31 26 if ( argc >= 4 ) samplerate = atoi(argv[3]); 32 27 if ( argc >= 5 ) hop_size = atoi(argv[4]); 33 if ( argc >= 6 ) {34 err = 2;35 PRINT_ERR("too many arguments\n");36 return err;37 }38 28 39 29 fvec_t *vec = new_fvec(hop_size); … … 52 42 53 43 aubio_pvoc_t *pv = new_aubio_pvoc(win_size, hop_size); 44 if (!pv) { err = 1; goto beach_pvoc; } 54 45 55 46 aubio_spectral_whitening_t *awhitening = 56 47 new_aubio_spectral_whitening (win_size, hop_size, samplerate); 48 if (!awhitening) { err = 1; goto beach_awhitening; } 57 49 58 50 aubio_spectral_whitening_set_relax_time(awhitening, 20.); … … 82 74 source_path, sink_path); 83 75 76 del_aubio_spectral_whitening(awhitening); 77 beach_awhitening: 78 del_aubio_pvoc(pv); 79 beach_pvoc: 84 80 del_aubio_sink(o); 85 81 beach_sink: … … 87 83 beach_source: 88 84 del_fvec(vec); 85 del_fvec(out); 86 del_fvec(scale); 87 del_cvec(fftgrain); 89 88 beach_fvec: 90 89 return err; … … 109 108 del_aubio_spectral_whitening(o); 110 109 111 return 0;110 return run_on_default_source_and_sink(main); 112 111 } -
tests/src/spectral/test-dct.c
rf87e191 r868c6b8 33 33 aubio_dct_rdo (dct, dctout, out); 34 34 for (j = 0; j < in->length; j++) { 35 if (fabsf(in->data[j] - out->data[j]) > 10.e-4) { 36 fprintf(stderr, "dct reconstruction failed\n"); 37 } 35 return_code += (fabsf(in->data[j] - out->data[j]) > 10.e-4); 38 36 } 39 37 } -
tests/src/spectral/test-mfcc.c
rf87e191 r868c6b8 1 1 #include <aubio.h> 2 #include "utils_tests.h" 2 3 3 int main (void) 4 int test_wrong_params(void); 5 6 int main (int argc, char** argv) 7 { 8 sint_t err = 0; 9 10 if (argc < 2) { 11 err = 2; 12 PRINT_WRN("no arguments, running tests\n"); 13 err = test_wrong_params(); 14 PRINT_MSG("usage: %s <input_path> [samplerate] [hop_size]\n", argv[0]); 15 return err; 16 } 17 18 uint_t win_s; // fft size 19 uint_t hop_s = 256; // block size 20 uint_t samplerate = 0; // samplerate 21 uint_t n_filters = 40; // number of filters 22 uint_t n_coeffs = 13; // number of coefficients 23 uint_t read = 0; 24 25 char_t *source_path = argv[1]; 26 27 if ( argc >= 3 ) samplerate = atoi(argv[2]); 28 if ( argc >= 4 ) hop_s = atoi(argv[3]); 29 30 win_s = 2 * hop_s; 31 32 aubio_source_t *source = 0; 33 aubio_pvoc_t *pv = 0; 34 aubio_mfcc_t *mfcc = 0; 35 36 fvec_t *in = new_fvec (win_s); // input buffer 37 cvec_t *fftgrain = new_cvec (win_s); // input buffer 38 fvec_t *out = new_fvec (n_coeffs); // output coefficients 39 40 if (!in || !fftgrain || !out) { err = 1; goto failure; } 41 42 // source 43 source = new_aubio_source(source_path, samplerate, hop_s); 44 if (!source) { err = 1; goto failure; } 45 if (samplerate == 0) samplerate = aubio_source_get_samplerate(source); 46 47 // phase vocoder 48 pv = new_aubio_pvoc(win_s, hop_s); 49 if (!pv) { err = 1; goto failure; } 50 51 // mfcc object 52 mfcc = new_aubio_mfcc (win_s, n_filters, n_coeffs, samplerate); 53 if (!mfcc) { err = 1; goto failure; } 54 55 // processing loop 56 do { 57 aubio_source_do(source, in, &read); 58 aubio_pvoc_do(pv, in, fftgrain); 59 aubio_mfcc_do(mfcc, fftgrain, out); 60 fvec_print(out); 61 } while (read == hop_s); 62 63 failure: 64 65 if (mfcc) 66 del_aubio_mfcc(mfcc); 67 if (pv) 68 del_aubio_pvoc(pv); 69 if (source) 70 del_aubio_source(source); 71 if (in) 72 del_fvec(in); 73 if (fftgrain) 74 del_cvec(fftgrain); 75 if (out) 76 del_fvec(out); 77 aubio_cleanup(); 78 return err; 79 } 80 81 int test_wrong_params() 4 82 { 5 83 uint_t win_s = 512; // fft size … … 7 85 uint_t n_coeffs = 13; // number of coefficients 8 86 smpl_t samplerate = 16000.; // samplerate 9 cvec_t *in = new_cvec (win_s); // input buffer10 fvec_t *out = new_fvec (n_coeffs); // output coefficients11 87 12 88 if (new_aubio_mfcc( 0, n_filters, n_coeffs, samplerate)) return 1; … … 15 91 if (new_aubio_mfcc(win_s, n_filters, n_coeffs, 0)) return 1; 16 92 17 // create mfcc object 18 aubio_mfcc_t *o = new_aubio_mfcc (win_s, n_filters, n_coeffs, samplerate); 19 20 cvec_norm_set_all (in, 1.); 21 aubio_mfcc_do (o, in, out); 22 fvec_print (out); 23 24 cvec_norm_set_all (in, .5); 25 aubio_mfcc_do (o, in, out); 26 fvec_print (out); 27 28 // clean up 29 del_aubio_mfcc (o); 30 del_cvec (in); 31 del_fvec (out); 32 aubio_cleanup (); 33 34 return 0; 93 return run_on_default_source(main); 35 94 } -
tests/src/synth/test-sampler.c
rf87e191 r868c6b8 1 #include <string.h> // strncpy 2 #include <limits.h> // PATH_MAX 1 3 #include <aubio.h> 2 4 #include "utils_tests.h" … … 6 8 sint_t err = 0; 7 9 8 if (argc < 4) {9 err = 2;10 PRINT_ERR("not enough arguments\n");10 if (argc < 3) { 11 PRINT_ERR("not enough arguments, running tests\n"); 12 err = run_on_default_source_and_sink(main); 11 13 PRINT_MSG("usage: %s <input_path> <output_path> <sample_path> [samplerate]\n", argv[0]); 12 14 return err; … … 19 21 char_t *source_path = argv[1]; 20 22 char_t *sink_path = argv[2]; 21 char_t *sample_path = argv[3]; 22 if ( argc == 5 ) samplerate = atoi(argv[4]); 23 char_t sample_path[PATH_MAX]; 24 if ( argc >= 4 ) { 25 strncpy(sample_path, argv[3], PATH_MAX - 1); 26 } else { 27 // use input_path as sample 28 strncpy(sample_path, source_path, PATH_MAX - 1); 29 } 30 sample_path[PATH_MAX - 1] = '\0'; 31 if ( argc >= 5 ) samplerate = atoi(argv[4]); 23 32 24 33 fvec_t *vec = new_fvec(hop_size); -
tests/src/synth/test-wavetable.c
rf87e191 r868c6b8 7 7 8 8 if (argc < 2) { 9 err = 2;10 PRINT_ERR("not enough arguments\n");9 PRINT_ERR("not enough arguments, running tests\n"); 10 err = run_on_default_sink(main); 11 11 PRINT_MSG("usage: %s <output_path> [freq] [samplerate]\n", argv[0]); 12 12 return err; … … 18 18 19 19 char_t *sink_path = argv[1]; 20 if ( argc == 4 ) samplerate = atoi(argv[3]);21 if ( argc == 3 ) freq = atof(argv[2]);20 if ( argc >= 4 ) samplerate = atoi(argv[3]); 21 if ( argc >= 3 ) freq = atof(argv[2]); 22 22 23 23 fvec_t *vec = new_fvec(hop_size); -
tests/src/tempo/test-tempo.c
rf87e191 r868c6b8 8 8 uint_t err = 0; 9 9 if (argc < 2) { 10 err = 2;11 10 PRINT_WRN("no arguments, running tests\n"); 12 if (test_wrong_params() != 0) { 13 PRINT_ERR("tests failed!\n"); 14 err = 1; 15 } else { 16 err = 0; 17 } 11 err = test_wrong_params(); 18 12 PRINT_MSG("usage: %s <source_path> [samplerate] [win_size] [hop_size]\n", 19 13 argv[0]); … … 88 82 89 83 // test wrong method fails 90 if (new_aubio_tempo("unexisting_method", win_size, hop_size, samplerate)) 91 return 1; 84 if (new_aubio_tempo("undefined", win_size, hop_size, samplerate)) return 1; 92 85 93 86 // test hop > win fails 94 if (new_aubio_tempo("default", hop_size, win_size, samplerate)) 95 return 1; 87 if (new_aubio_tempo("default", hop_size, win_size, samplerate)) return 1; 96 88 97 89 // test null hop_size fails 98 if (new_aubio_tempo("default", win_size, 0, samplerate)) 99 return 1; 90 if (new_aubio_tempo("default", win_size, 0, samplerate)) return 1; 100 91 101 92 // test 1 buf_size fails 102 if (new_aubio_tempo("default", 1, 1, samplerate)) 103 return 1; 93 if (new_aubio_tempo("default", 1, 1, samplerate)) return 1; 104 94 105 95 // test null samplerate fails 106 if (new_aubio_tempo("default", win_size, hop_size, 0)) 107 return 1; 96 if (new_aubio_tempo("default", win_size, hop_size, 0)) return 1; 108 97 109 98 // test short sizes workaround 110 99 t = new_aubio_tempo("default", 2048, 2048, 500); 111 if (!t) 112 return 1; 100 if (!t) return 1; 113 101 114 102 del_aubio_tempo(t); 115 103 116 104 t = new_aubio_tempo("default", win_size, hop_size, samplerate); 117 if (!t) 118 return 1; 105 if (!t) return 1; 119 106 120 107 in = new_fvec(hop_size); … … 136 123 del_fvec(out); 137 124 138 return 0;125 return run_on_default_source(main); 139 126 } -
tests/src/temporal/test-filter.c
rf87e191 r868c6b8 10 10 aubio_filter_t *o = new_aubio_filter_c_weighting (44100); 11 11 12 if (new_aubio_filter(0)) 13 return 1; 12 if (new_aubio_filter(0)) return 1; 14 13 15 if (aubio_filter_get_samplerate(o) != 44100) 16 return 1; 14 if (aubio_filter_get_samplerate(o) != 44100) return 1; 17 15 18 if (aubio_filter_set_c_weighting (o, -1) == 0) 19 return 1; 16 if (aubio_filter_set_c_weighting (o, -1) == 0) return 1; 20 17 21 if (aubio_filter_set_c_weighting (0, 32000) == 0) 22 return 1; 18 if (aubio_filter_set_c_weighting (0, 32000) == 0) return 1; 23 19 24 20 in->data[impulse_at] = 0.5; … … 30 26 o = new_aubio_filter_a_weighting (32000); 31 27 32 if (aubio_filter_set_a_weighting (o, -1) == 0) 33 return 1; 34 if (aubio_filter_set_a_weighting (0, 32000) == 0) 35 return 1; 28 if (aubio_filter_set_a_weighting (o, -1) == 0) return 1; 29 30 if (aubio_filter_set_a_weighting (0, 32000) == 0) return 1; 36 31 37 32 in->data[impulse_at] = 0.5; -
tests/src/test-mathutils.c
rf87e191 r868c6b8 101 101 fvec_set_window(window, "rectangle"); 102 102 fvec_print(window); 103 del_fvec(window); 103 104 104 105 window_size /= 2.; 105 window = new_aubio_window(" triangle", window_size);106 window = new_aubio_window("parzen", window_size); 106 107 fvec_print(window); 107 108 del_fvec(window); … … 117 118 test_miditofreq(); 118 119 test_freqtomidi(); 120 test_aubio_window(); 119 121 return 0; 120 122 } -
tests/src/utils/test-hist.c
rf87e191 r868c6b8 26 26 del_fvec(t); 27 27 } 28 if (new_aubio_hist(0, 1, 0)) return 1; 28 29 return 0; 29 30 } -
tests/utils_tests.h
rf87e191 r868c6b8 5 5 #include <assert.h> 6 6 #include "config.h" 7 8 #ifdef HAVE_STRING_H 9 #include <string.h> 10 #endif 11 12 #ifdef HAVE_UNISTD_H 13 #include <unistd.h> // unlink, close 14 #endif 15 16 #ifdef HAVE_LIMITS_H 17 #include <limits.h> // PATH_MAX 18 #endif /* HAVE_LIMITS_H */ 19 #ifndef PATH_MAX 20 #define PATH_MAX 1024 21 #endif 22 23 #if defined(HAVE_WIN_HACKS) && !defined(__GNUC__) 24 #include <io.h> // _access 25 #endif 26 27 // This macro is used to pass a string to msvc compiler: since msvc's -D flag 28 // strips the quotes, we define the string without quotes and re-add them with 29 // this macro. 30 31 #define REDEFINESTRING(x) #x 32 #define DEFINEDSTRING(x) REDEFINESTRING(x) 33 34 #ifndef AUBIO_TESTS_SOURCE 35 #error "AUBIO_TESTS_SOURCE is not defined" 36 #endif 7 37 8 38 #ifdef HAVE_C99_VARARGS_MACROS … … 26 56 #endif 27 57 28 // are we on windows ? or are we using -std=c99 ? 29 #if defined(HAVE_WIN_HACKS) || defined(__STRICT_ANSI__) 30 // http://en.wikipedia.org/wiki/Linear_congruential_generator 31 // no srandom/random on win32 58 #if defined(HAVE_WIN_HACKS) 32 59 33 uint_t srandom_seed = 1029; 60 // use srand/rand on windows 61 #define srandom srand 62 #define random rand 34 63 35 void srandom(uint_t new_seed) { 36 srandom_seed = new_seed; 37 } 64 #elif defined(__STRICT_ANSI__) 38 65 39 uint_t random(void) { 40 srandom_seed = 1664525 * srandom_seed + 1013904223; 41 return srandom_seed; 42 } 66 // workaround to build with -std=c99 (for instance with older cygwin), 67 // assuming libbc is recent enough to supports these functions. 68 extern void srandom(unsigned); 69 extern int random(void); 70 extern char mkstemp(const char *pat); 71 43 72 #endif 44 73 … … 48 77 time_t now = time(0); 49 78 struct tm *tm_struct = localtime(&now); 50 int seed = tm_struct->tm_sec; 79 size_t **tm_address = (void*)&tm_struct; 80 int seed = tm_struct->tm_sec + (size_t)tm_address; 51 81 //PRINT_WRN("current seed: %d\n", seed); 52 srandom ( seed);82 srandom ((unsigned int)seed); 53 83 } 84 85 // create_temp_sink / close_temp_sink 86 #if defined(__GNUC__) // mkstemp 87 88 int check_source(char *source_path) 89 { 90 return access(source_path, R_OK); 91 } 92 93 int create_temp_sink(char *sink_path) 94 { 95 return mkstemp(sink_path); 96 } 97 98 int close_temp_sink(char *sink_path, int sink_fildes) 99 { 100 int err; 101 if ((err = close(sink_fildes)) != 0) return err; 102 if ((err = unlink(sink_path)) != 0) return err; 103 return err; 104 } 105 106 #elif defined(HAVE_WIN_HACKS) //&& !defined(__GNUC__) 107 // windows workaround, where mkstemp does not exist... 108 109 int check_source(char *source_path) 110 { 111 return _access(source_path, 04); 112 } 113 114 int create_temp_sink(char *templ) 115 { 116 int i = 0; 117 static const char letters[] = "abcdefg0123456789"; 118 int letters_len = strlen(letters); 119 int templ_len = strlen(templ); 120 if (templ_len == 0) return 0; 121 utils_init_random(); 122 for (i = 0; i < 6; i++) 123 { 124 templ[templ_len - i] = letters[rand() % letters_len]; 125 } 126 return 1; 127 } 128 129 int close_temp_sink(char* sink_path, int sink_fildes) { 130 // the file should be closed when not using mkstemp, no need to open it 131 if (sink_fildes == 0) return 1; 132 return _unlink(sink_path); 133 } 134 135 #else // windows workaround 136 // otherwise, we don't really know what to do yet 137 #error "mkstemp undefined, but not on windows. additional workaround required." 138 #endif 139 140 // pass progname / default 141 int run_on_default_source( int main(int, char**) ) 142 { 143 const int argc = 2; 144 int err = 0; 145 char** argv = (char**)calloc(argc, sizeof(char*)); 146 argv[0] = __FILE__; 147 argv[1] = DEFINEDSTRING(AUBIO_TESTS_SOURCE); 148 // check if the file can be read 149 if ( check_source(argv[1]) ) return 1; 150 err = main(argc, argv); 151 if (argv) free(argv); 152 return err; 153 } 154 155 int run_on_default_sink( int main(int, char**) ) 156 { 157 const int argc = 2; 158 int err = 0; 159 char** argv = (char**)calloc(argc, sizeof(char*)); 160 char sink_path[PATH_MAX] = "tmp_aubio_XXXXXX"; 161 int fd = create_temp_sink(sink_path); 162 if (!fd) return 1; 163 argv[0] = __FILE__; 164 argv[1] = sink_path; 165 err = main(argc, argv); 166 close_temp_sink(sink_path, fd); 167 if (argv) free(argv); 168 return err; 169 } 170 171 int run_on_default_source_and_sink( int main(int, char**) ) 172 { 173 const int argc = 3; 174 int err = 0; 175 char** argv = (char**)calloc(argc, sizeof(char*)); 176 char sink_path[PATH_MAX] = "tmp_aubio_XXXXXX"; 177 int fd = create_temp_sink(sink_path); 178 if (!fd) return 1; 179 argv[0] = __FILE__; 180 argv[1] = DEFINEDSTRING(AUBIO_TESTS_SOURCE); 181 argv[2] = sink_path; 182 // check if the file can be read 183 if ( check_source(argv[1]) ) return 1; 184 err = main(argc, argv); 185 close_temp_sink(sink_path, fd); 186 if (argv) free(argv); 187 return err; 188 } -
tests/wscript_build
rf87e191 r868c6b8 8 8 programs_sources = ctx.path.ant_glob('src/**/*.c') 9 9 10 test_sound_target = '44100Hz_44100f_sine441_stereo.wav' 11 test_sound_abspath = bld.path.get_bld().make_node(test_sound_target) 12 # workaround to double escape backslash characters on windows 13 test_sound_abspath = str(test_sound_abspath).replace('\\', '\\\\') 14 15 b = bld(name='create_tests_source', 16 rule='python ${SRC} ${TGT}', 17 source='create_tests_source.py', 18 target=test_sound_target) 19 # use post() to create the task, keep a reference to it 20 b.post() 21 create_tests_source = b.tasks[0] 22 10 23 for source_file in programs_sources: 11 24 target = os.path.basename(os.path.splitext(str(source_file))[0]) 12 bld(features = 'c cprogram test',25 a = bld(features = 'c cprogram test', 13 26 source = source_file, 14 27 target = target, … … 16 29 use = uselib, 17 30 install_path = None, 18 defines = 'AUBIO_UNSTABLE_API=1', 31 defines = ['AUBIO_UNSTABLE_API=1', 32 'AUBIO_TESTS_SOURCE={}'.format(test_sound_abspath)] 19 33 ) 34 a.post() 35 # make sure the unit_test task runs *after* the source is created 36 a.tasks[-1].set_run_after(create_tests_source) -
wscript
rf87e191 r868c6b8 518 518 sphinx(bld) 519 519 520 from waflib.Tools import waf_unit_test 521 bld.add_post_fun(waf_unit_test.summary) 522 bld.add_post_fun(waf_unit_test.set_exit_code) 523 520 524 def txt2man(bld): 521 525 # build manpages from txt files using txt2man … … 543 547 if bld.env['DOXYGEN']: 544 548 bld.env.VERSION = VERSION 545 rule = '( cat ${SRC} && echo PROJECT_NUMBER=${VERSION}; )' 549 rule = '( cat ${SRC[0]} && echo PROJECT_NUMBER=${VERSION}' 550 rule += ' && echo OUTPUT_DIRECTORY=%s && echo HTML_OUTPUT=%s )' 546 551 rule += ' | doxygen - > /dev/null' 552 rule %= (os.path.abspath(out), 'api') 547 553 bld( name = 'doxygen', rule = rule, 548 source = 'doc/web.cfg', 549 target = '../doc/web/html/index.html', 550 cwd = 'doc') 551 bld.install_files( '${DATAROOTDIR}' + '/doc/libaubio-doc', 552 bld.path.ant_glob('doc/web/html/**'), 553 cwd = bld.path.find_dir ('doc/web'), 554 relative_trick = True) 554 source = ['doc/web.cfg'] 555 + bld.path.find_dir('src').ant_glob('**/*.h'), 556 target = bld.path.find_or_declare('api/index.html'), 557 cwd = bld.path.find_dir('doc')) 558 # evaluate nodes lazily to prevent build directory traversal warnings 559 bld.install_files('${DATAROOTDIR}/doc/libaubio-doc/api', 560 bld.path.find_or_declare('api').ant_glob('**/*', 561 generator=True), cwd=bld.path.find_or_declare('api'), 562 relative_trick=True) 555 563 556 564 def sphinx(bld): 557 # build documentation from source files using sphinx-build note: build in 558 # ../doc/_build/html, otherwise waf wont install unsigned files 559 if bld.env['SPHINX']: 565 # build documentation from source files using sphinx-build 566 try: 567 import aubio 568 has_aubio = True 569 except ImportError: 570 from waflib import Logs 571 Logs.pprint('YELLOW', "Sphinx manual: install aubio first") 572 has_aubio = False 573 if bld.env['SPHINX'] and has_aubio: 560 574 bld.env.VERSION = VERSION 561 bld( name = 'sphinx', 562 rule = '${SPHINX} -b html -D release=${VERSION}' \ 563 ' -D version=${VERSION} -a -q' \ 564 ' `dirname ${SRC}` `dirname ${TGT}`', 565 source = 'doc/conf.py', 566 target = '../doc/_build/html/index.html') 567 bld.install_files( '${DATAROOTDIR}' + '/doc/libaubio-doc/sphinx', 568 bld.path.ant_glob('doc/_build/html/**'), 569 cwd = bld.path.find_dir('doc/_build/html'), 570 relative_trick = True) 575 rule = '${SPHINX} -b html -D release=${VERSION}' \ 576 ' -D version=${VERSION} -W -a -q' \ 577 ' -d %s ' % os.path.join(os.path.abspath(out), 'doctrees') 578 rule += ' . %s' % os.path.join(os.path.abspath(out), 'manual') 579 bld( name = 'sphinx', rule = rule, 580 cwd = bld.path.find_dir('doc'), 581 source = bld.path.find_dir('doc').ant_glob('*.rst'), 582 target = bld.path.find_or_declare('manual/index.html')) 583 # evaluate nodes lazily to prevent build directory traversal warnings 584 bld.install_files('${DATAROOTDIR}/doc/libaubio-doc/manual', 585 bld.path.find_or_declare('manual').ant_glob('**/*', 586 generator=True), cwd=bld.path.find_or_declare('manual'), 587 relative_trick=True) 571 588 572 589 # register the previous rules as build rules
Note: See TracChangeset
for help on using the changeset viewer.