Changeset f87e191
- Timestamp:
- Nov 26, 2018, 10:33:30 PM (6 years ago)
- Branches:
- feature/constantq
- Children:
- 868c6b8
- Parents:
- d1d4ad4 (diff), db3eb5c (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:
-
- 1 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
.travis.yml
rd1d4ad4 rf87e191 63 63 - sox 64 64 - lcov 65 homebrew: 66 packages: 67 - sox 68 - ffmpeg 69 - libsndfile 70 - lcov 71 #update: true 65 72 66 73 before_install: 67 74 - | 68 75 if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then 69 brew update70 brew install sox71 brew install ffmpeg72 brew install libsndfile73 brew install lcov74 76 export PATH="$HOME/Library/Python/2.7/bin/:$PATH" 75 77 fi; … … 84 86 - which pip 85 87 - pip --version 86 - pip install python-coveralls87 - gem install coveralls-lcov88 88 89 89 script: … … 100 100 - | 101 101 if [[ -z "$AUBIO_NOTESTS" ]]; then 102 # upload lcov coverage to coveralls.io103 coveralls-lcov build/coverage.info104 # upload python coverage105 #coveralls106 102 # upload to codecov 107 103 bash <(curl -s https://codecov.io/bash) -
ChangeLog
rd1d4ad4 rf87e191 1 2018-11-21 Paul Brossier <piem@aubio.org> 2 3 [ Overview ] 4 5 * VERSION: bump to 0.4.8 6 * notes: new option release_drop (gh-203) 7 * spectral: new parameters added to filterbank and mfcc (gh-206) 8 * python: start documenting module (gh-73, debian #480018), improve build for 9 win-amd64 (gh-154, gh-199, gh-208) 10 * fixes: prevent crash when using fft sizes unsupported by vDSP (gh-207), 11 prevent saturation when down-mixing a multi-channel source (avcodec/ffmpeg) 12 13 [ Fixes ] 14 15 * avcodec: prevent saturation when down-mixing a multi-channel source, emit 16 a warning if compiling against avutil < 53 (gh-137), wrap long lines 17 * examples/: avoid hiding global and unreachable code 18 * fft: limit to r*2*n sizes, with r in [1, 3, 5, 15] (vDSP only) (gh-207) 19 * fft: fix reconstruction for odd sizes (fftw only) 20 * pvoc: add missing implementations for aubio_pvoc_get_hop/win 21 * mathutils: increase ln(2) precision of in freqtomidi/miditofreq 22 * wavetable: stop sets playing to 0, add dummy implementation for _load 23 24 [ New features ] 25 26 * src/musicutils.h: new aubio_meltohz, aubio_hztomel, with _htk versions 27 * src/spectral/filterbank.h: new set_mel_coeffs, set_mel_coeffs_htk, 28 set_power, and set_norm methods, improved set_triangle_bands 29 * src/spectral/mfcc.h: new set_scale, set_power, set_norm, set_mel_coeffs, 30 set_mel_coeffs_htk, set_mel_coeffs_slaney 31 * src/mathutils.h: new fvec_mul 32 * src/notes: new option release_drop to prevent missing note-offs (gh-203) 33 34 [ Python module ] 35 36 * fix: rounding to nearest integer in midi2note and freq2note 37 * general: supports code generation of setters with none or multiple 38 parameters 39 * documentation: add docstrings do fvec, cvec, source, sink, pvoc, frequency 40 conversion and level detection routines (gh-73, debian #480018) 41 * slicing: improve and document slice_source_at_stamps 42 * module: new note2freq function, recover error log when raising exceptions 43 on failed set_ methods, prevent cyclic import, coding style improvements 44 * demos: improve coding style, fix bpm_extract arguments 45 * MANIFEST.in: exclude *.pyc, improve patterns 46 47 [ Documentation ] 48 49 * doc/: use sphinx autodoc to load docstrings from aubio module, reorganize 50 python module documentation, add a note about double precision, use https 51 when possible 52 * src/spectral/: update Auditory Toolbox url, update copyright year 53 54 [ Tools ] 55 56 * aubionotes: add --release-drop option 57 * aubio: add --release-drop and --silence options to `aubio notes`, 58 workaround for -V to really show version (py2) 59 * aubiocut: add option --create-first to always create first slice 60 61 [ Tests ] 62 63 * tests/, python/tests: add tests for new methods, check source channel 64 down-mix, improve coverage 65 66 [ Build system ] 67 68 * Makefile: disable docs when measuring coverage, add branch coverage 69 option, add coverage_zero_counters target, improve html report 70 * waf: update to 2.0.12, improve wscript style, prevent shipping some 71 generated files 72 * python: always show compiler warnings when pre-processing headers, 73 workaround to fix code generation for win-amd64 (gh-154, gh-199, gh-208). 74 * continuous integration: add azure pipelines, update and improve 75 configurations for appveyor, circleci, and travis. 76 1 77 2018-09-22 Paul Brossier <piem@aubio.org> 2 78 -
MANIFEST.in
rd1d4ad4 rf87e191 2 2 include python/README.md 3 3 include this_version.py 4 include waf_gensyms.py 4 5 include waf 5 6 recursive-include waflib *.py -
Makefile
rd1d4ad4 rf87e191 43 43 TESTSOUNDS := python/tests/sounds 44 44 45 LCOVOPTS += --rc lcov_branch_coverage=1 46 45 47 all: build 46 48 … … 246 248 coverage: force_uninstall_python deps_python \ 247 249 clean_python clean distclean build local_dylib 248 lcov --capture --no-external --directory . --output-file build/coverage_lib.info 250 # capture coverage after running c tests 251 lcov $(LCOVOPTS) --capture --no-external --directory . \ 252 --output-file build/coverage_lib.info 253 # build and test python 249 254 pip install -v -e . 255 # run tests, with python coverage 250 256 coverage run `which nose2` 251 lcov --capture --no-external --directory . --output-file build/coverage_python.info 252 lcov -a build/coverage_python.info -a build/coverage_lib.info -o build/coverage.info 257 # capture coverage again 258 lcov $(LCOVOPTS) --capture --no-external --directory . \ 259 --output-file build/coverage_python.info 260 # merge both coverage info files 261 lcov $(LCOVOPTS) -a build/coverage_python.info -a build/coverage_lib.info \ 262 --output-file build/coverage.info 263 # remove tests 264 lcov $(LCOVOPTS) --remove build/coverage.info '*/tests/*' '*/ooura_fft8g*' \ 265 --output-file build/coverage_lib.info 253 266 254 267 # make sure we don't build the doc, which builds a temporary python module 255 268 coverage_report: export WAFOPTS += --disable-docs 256 269 coverage_report: coverage 257 genhtml build/coverage.info --output-directory lcov_html 258 mkdir -p gcovr_html/ 259 gcovr -r . --html --html-details \ 260 --output gcovr_html/index.html \ 261 --exclude ".*tests/.*" --exclude ".*examples/.*" 270 # create coverage report dir 271 mkdir -p build/coverage/ 272 # generate report with lcov's genhtml 273 genhtml build/coverage_lib.info --output-directory build/coverage/lcov \ 274 --branch-coverage --highlight --legend 275 # generate python report with coverage python package 262 276 coverage report 263 coverage html 277 coverage html -d build/coverage/coverage 278 # show links to generated reports 279 for i in $$(ls build/coverage/*/index.html); do echo file://$(PWD)/$$i; done 264 280 265 281 sphinx: configure -
VERSION
rd1d4ad4 rf87e191 1 1 AUBIO_MAJOR_VERSION=0 2 2 AUBIO_MINOR_VERSION=4 3 AUBIO_PATCH_VERSION= 83 AUBIO_PATCH_VERSION=9 4 4 AUBIO_VERSION_STATUS='~alpha' 5 5 LIBAUBIO_LT_CUR=5 6 LIBAUBIO_LT_REV= 37 LIBAUBIO_LT_AGE= 76 LIBAUBIO_LT_REV=4 7 LIBAUBIO_LT_AGE=8 -
doc/aubiocut.txt
rd1d4ad4 rf87e191 51 51 each slice (default 0). 52 52 53 --create-first Alway create first slice. 54 53 55 -h, --help Print a short help message and exit. 54 56 -
doc/python_module.rst
rd1d4ad4 rf87e191 4 4 =========================== 5 5 6 The aubio extension for Python is available for Python 2.7 and Python 3. 6 aubio is available as a package for Python 2.7 and Python 3. The aubio 7 extension is written C using the `Python/C`_ and the `Numpy/C`_ APIs. 8 9 .. _Python/C: https://docs.python.org/c-api/index.html 10 .. _Numpy/C: https://docs.scipy.org/doc/numpy/reference/c-api.html 11 12 For general documentation on how to install Python packages, see `Installing 13 Packages`_. 7 14 8 15 Installing aubio with pip 9 16 ------------------------- 10 17 11 aubio can now be installedusing ``pip``:18 aubio can be installed from `PyPI`_ using ``pip``: 12 19 13 20 .. code-block:: console … … 15 22 $ pip install aubio 16 23 17 Building the module 18 ------------------- 24 See also `Installing from PyPI`_ for general documentation. 19 25 20 From ``aubio`` source directory, run the following: 26 .. note:: 27 28 aubio is currently a `source only`_ package, so you will need a compiler to 29 install it from `PyPI`_. See also `Installing aubio with conda`_ for 30 pre-compiled binaries. 31 32 .. _PyPI: https://pypi.python.org/pypi/aubio 33 .. _Installing Packages: https://packaging.python.org/tutorials/installing-packages/ 34 .. _Installing from PyPI: https://packaging.python.org/tutorials/installing-packages/#installing-from-pypi 35 .. _source only: https://packaging.python.org/tutorials/installing-packages/#source-distributions-vs-wheels 36 37 Installing aubio with conda 38 --------------------------- 39 40 `Conda packages`_ are available through the `conda-forge`_ channel for Linux, 41 macOS, and Windows: 21 42 22 43 .. code-block:: console 23 44 24 $ ./setup.py clean 25 $ ./setup.py build 26 $ sudo ./setup.py install 45 $ conda config --add channels conda-forge 46 $ conda install -c conda-forge aubio 27 47 48 .. _Conda packages: https://anaconda.org/conda-forge/aubio 49 .. _conda-forge: https://conda-forge.org/ 28 50 29 51 .. _py-doubleprecision: … … 68 90 ------------ 69 91 70 A number of `python tests`_ are provided. To run them, use 71 ``python/tests/run_all_tests``. 92 A number of Python tests are provided in the `python tests`_. To run them, 93 install `nose2`_ and run the script ``python/tests/run_all_tests``: 94 95 .. code-block:: console 96 97 $ pip install nose2 98 $ ./python/tests/run_all_tests 72 99 73 100 .. _demo_filter.py: https://github.com/aubio/aubio/blob/master/python/demos/demo_filter.py 74 101 .. _python tests: https://github.com/aubio/aubio/blob/master/python/tests 102 .. _nose2: https://github.com/nose-devs/nose2 -
doc/requirements.rst
rd1d4ad4 rf87e191 303 303 ................ 304 304 305 The datatype used to store real numbers in aubio is named `smpl_t`. By default, 306 `smpl_t` is defined as `float`, a `single-precision format 307 <https://en.wikipedia.org/wiki/Single-precision_floating-point_format>`_ 308 (32-bit). Some algorithms require a floating point representation with a 309 higher precision, for instance to prevent arithmetic underflow in recursive 310 filters. In aubio, these special samples are named `lsmp_t` and defined as 311 `double` by default (64-bit). 312 313 Sometimes it may be useful to compile aubio in `double-precision`, for instance 314 to reproduce numerical results obtained with 64-bit routines. In this case, 315 `smpl_t` will be defined as `double`. 316 317 The following table shows how `smpl_t` and `lsmp_t` are defined in single- and 318 double-precision modes: 319 320 .. list-table:: Single and double-precision modes 321 :align: center 322 323 * - 324 - single 325 - double 326 * - `smpl_t` 327 - ``float`` 328 - ``double`` 329 * - `lsmp_t` 330 - ``double`` 331 - ``long double`` 332 305 333 To compile aubio in double precision mode, configure with ``--enable-double``. 306 334 307 To compile aubio in single precision mode, use ``--disable-double`` (default,308 recommended).335 To compile in single-precision mode (default), use ``--disable-double`` (or 336 simply none of these two options). 309 337 310 338 Disabling the tests -
python/README.md
rd1d4ad4 rf87e191 1 Python aubio module 2 ===== ==============1 aubio 2 ===== 3 3 4 This module wraps the aubio library for Python using the numpy module.4 aubio is a collection of tools for music and audio analysis. 5 5 6 Using the Python aubio module 7 ----------------------------- 6 This package integrates the aubio library with [NumPy] to provide a set of 7 efficient tools to process and analyse audio signals, including: 8 8 9 After installing python-aubio, you will be able to import the aubio module: 9 - read audio from any media file, including videos and remote streams 10 - high quality phase vocoder, spectral filterbanks, and linear filters 11 - Mel-Frequency Cepstrum Coefficients and standard spectral descriptors 12 - detection of note attacks (onset) 13 - pitch tracking (fundamental frequency estimation) 14 - beat detection and tempo tracking 10 15 11 $ python 12 [...] 13 >>> import aubio 14 >>> help(aubio.miditofreq) 16 aubio works with both Python 2 and Python 3. 15 17 16 Finding some inspiration 17 ----- -------------------18 Links 19 ----- 18 20 19 Some examples are available in the `python/demos` directory. These scripts are 20 small programs written in python and using python-aubio. 21 - [module documentation][doc_python] 22 - [installation instructions][doc_python_install] 23 - [aubio manual][manual] 24 - [aubio homepage][homepage] 25 - [issue tracker][bugtracker] 21 26 22 For instance, `demo_source.py` reads a media file. 27 Demos 28 ----- 23 29 24 $ ./python/demos/demo_source.py /path/to/sound/sample.wav 30 Some examples are available in the [`python/demos`][demos_dir] folder. Each 31 script is a command line program which accepts one ore more argument. 25 32 26 and `demo_timestretch_online.py` stretches the original file into a new one: 33 **Notes**: installing additional modules is required to run some of the demos. 27 34 28 $ ./python/demo/demo_timestretch_online.py loop.wav stretched_loop.wav 0.92` 35 ### Analysis 29 36 30 Note: you might need to install additional modules to run some of the demos. 31 Some demos use [matplotlib](http://matplotlib.org/) to draw plots, others use 32 [PySoundCard](https://github.com/bastibe/PySoundCard) to play and record 33 sounds. 37 - `demo_source.py` uses aubio to read audio samples from media files 38 - `demo_onset_plot.py` detects attacks in a sound file and plots the results 39 using [matplotlib] 40 - `demo_pitch.py` looks for fundamental frequency in a sound file and plots the 41 results using [matplotlib] 42 - `demo_spectrogram.py`, `demo_specdesc.py`, `demo_mfcc.py` for spectral 43 analysis. 34 44 35 Testing the Python module 36 ------------------------- 45 ### Real-time 37 46 38 Python tests are in `python/tests` and use the [nose2 python package][nose2]. 47 - `demo_pyaudio.py` and `demo_tapthebeat.py` use [pyaudio] 48 - `demo_pysoundcard_play.py`, `demo_pysoundcard.py` use [PySoundCard] 49 - `demo_alsa.py` uses [pyalsaaudio] 39 50 40 To run the all the python tests, use the script: 51 ### Others 41 52 42 $ ./python/tests/run_all_tests 53 - `demo_timestretch.py` can change the duration of an input file and write the 54 new sound to disk, 55 - `demo_wav2midi.py` detects the notes in a file and uses [mido] to write the 56 results into a MIDI file 43 57 44 Each test script can also be called one at a time. For instance: 58 ### Example 45 59 46 $ ./python/tests/test_note2midi.py -v 60 Use `demo_timestretch_online.py` to slow down `loop.wav`, write the results in 61 `stretched_loop.wav`: 47 62 48 [nose2]: https://github.com/nose-devs/nose263 $ python demo_timestretch_online.py loop.wav stretched_loop.wav 0.92 49 64 50 Install in a virtualenv 51 ----------------------- 52 53 You should be able to install python-aubio directly from the top source 54 directory of aubio. 55 56 First, create a virtualenv to hold the required python module: 57 58 $ virtualenv pyaubio 59 $ source pyaubio/bin/activate 60 61 Now install and build the python extension using: 62 63 $ pip install . 64 65 Install requirements 66 -------------------- 67 68 Before compiling this module, you must have compiled libaubio. 69 70 A simple way to do this is with pip: 71 72 $ pip install -r requirements.txt 73 74 For more information about how this module works, please refer to the [Python/C 75 API Reference Manual] (http://docs.python.org/c-api/index.html) and the 76 [Numpy/C API Reference](http://docs.scipy.org/doc/numpy/reference/c-api.html). 77 78 Compiling python aubio 79 ---------------------- 80 81 To build the aubio Python module, run the following command from the top source 82 directory of aubio: 83 84 $ ./setup.py build 85 86 Note: if libaubio was previously built using waf, the script will use it. 87 Otherwise, the entire library will be built inside the python extension. 88 89 To find out more about `setup.py` options: 90 91 $ ./setup.py --help 92 93 Installing 65 Built with 94 66 ---------- 95 67 96 To install the Python module: 68 The core of aubio is written in C for portability and speed. In addition to 69 [NumPy], aubio can be optionally built to use one or more of the following 70 libraries: 97 71 98 $ ./setup.py install 72 - media file reading: 99 73 100 Alternatively, you may want to use the Python module without installing it by 101 setting your PYTHONPATH, for instance as follows: 74 - [ffmpeg] / [avcodec] to decode and read audio from almost any format, 75 - [libsndfile] to read audio from uncompressed sound files, 76 - [libsamplerate] to re-sample audio signals, 77 - [CoreAudio] to read all media formats supported by macOS, iOS, and tvOS. 102 78 103 $ export PYTHONPATH=$PYTHONPATH:$PWD/`ls -rtd build/lib.* | head -1`:$PWD/tests 79 - hardware acceleration: 104 80 81 - [Atlas] and [Blas], for accelerated vector and matrix computations, 82 - [fftw3], to compute fast Fourier Transforms of any size, 83 - [Accelerate] for accelerated FFT and matrix computations (macOS/iOS), 84 - [Intel IPP], accelerated vector computation and FFT implementation. 85 86 [ffmpeg]: https://ffmpeg.org 87 [avcodec]: https://libav.org 88 [libsndfile]: http://www.mega-nerd.com/libsndfile/ 89 [libsamplerate]: http://www.mega-nerd.com/SRC/ 90 [CoreAudio]: https://developer.apple.com/reference/coreaudio 91 [Atlas]: http://math-atlas.sourceforge.net/ 92 [Blas]: https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms 93 [fftw3]: http://fftw.org 94 [Accelerate]: https://developer.apple.com/reference/accelerate 95 [Intel IPP]: https://software.intel.com/en-us/intel-ipp 96 97 [demos_dir]:https://github.com/aubio/aubio/tree/master/python/demos 98 [pyaudio]:https://people.csail.mit.edu/hubert/pyaudio/ 99 [PySoundCard]:https://github.com/bastibe/PySoundCard 100 [pyalsaaudio]:https://larsimmisch.github.io/pyalsaaudio/ 101 [mido]:https://mido.readthedocs.io 102 103 [manual]: https://aubio.org/manual/latest/ 104 [doc_python]: https://aubio.org/manual/latest/python.html 105 [doc_python_install]: https://aubio.org/manual/latest/python_module.html 106 [homepage]: https://aubio.org 107 [NumPy]: https://www.numpy.org 108 [bugtracker]: https://github.com/aubio/aubio/issues 109 [matplotlib]:https://matplotlib.org/ -
python/tests/test_phasevoc.py
rd1d4ad4 rf87e191 56 56 + 'This is expected when using fftw3 on powerpc.') 57 57 assert_equal ( r, 0.) 58 59 def test_no_overlap(self): 60 win_s, hop_s = 1024, 1024 61 f = pvoc (win_s, hop_s) 62 t = fvec (hop_s) 63 for _ in range(4): 64 s = f(t) 65 r = f.rdo(s) 66 assert_equal ( t, 0.) 58 67 59 68 @params( -
python/tests/test_source_channels.py
rd1d4ad4 rf87e191 9 9 import numpy as np 10 10 from numpy.testing import assert_equal 11 from utils import get_tmp_sink_path11 from .utils import get_tmp_sink_path 12 12 13 13 class aubio_source_test_case(unittest.TestCase): -
setup.py
rd1d4ad4 rf87e191 63 63 ] 64 64 65 thisdir = os.path.abspath(os.path.dirname(__file__)) 66 py_readme_file = os.path.join(thisdir, 'python', 'README.md') 67 with open(py_readme_file, 'r') as fp: 68 long_description = ''.join(fp.readlines()[3:]) 69 65 70 distrib = setup(name='aubio', 66 71 version = __version__, … … 69 74 ext_modules = [aubio_extension], 70 75 description = 'a collection of tools for music analysis', 71 long_description = 'a collection of tools for music analysis', 76 long_description = long_description, 77 long_description_content_type = 'text/markdown', 72 78 license = 'GNU/GPL version 3', 73 79 author = 'Paul Brossier', -
src/onset/onset.c
rd1d4ad4 rf87e191 257 257 o->pp = new_aubio_peakpicker(); 258 258 o->od = new_aubio_specdesc(onset_mode,buf_size); 259 if (o->od == NULL) goto beach_specdesc;260 259 o->fftgrain = new_cvec(buf_size); 261 260 o->desc = new_fvec(1); 262 261 o->spectral_whitening = new_aubio_spectral_whitening(buf_size, hop_size, samplerate); 263 262 263 if (!o->pv || !o->pp || !o->od || !o->fftgrain 264 || !o->desc || !o->spectral_whitening) 265 goto beach; 266 264 267 /* initialize internal variables */ 265 268 aubio_onset_set_default_parameters (o, onset_mode); … … 268 271 return o; 269 272 270 beach_specdesc:271 del_aubio_peakpicker(o->pp);272 del_aubio_pvoc(o->pv);273 273 beach: 274 AUBIO_FREE(o);274 del_aubio_onset(o); 275 275 return NULL; 276 276 } … … 340 340 void del_aubio_onset (aubio_onset_t *o) 341 341 { 342 del_aubio_spectral_whitening(o->spectral_whitening); 343 del_aubio_specdesc(o->od); 344 del_aubio_peakpicker(o->pp); 345 del_aubio_pvoc(o->pv); 346 del_fvec(o->desc); 347 del_cvec(o->fftgrain); 342 if (o->spectral_whitening) 343 del_aubio_spectral_whitening(o->spectral_whitening); 344 if (o->od) 345 del_aubio_specdesc(o->od); 346 if (o->pp) 347 del_aubio_peakpicker(o->pp); 348 if (o->pv) 349 del_aubio_pvoc(o->pv); 350 if (o->desc) 351 del_fvec(o->desc); 352 if (o->fftgrain) 353 del_cvec(o->fftgrain); 348 354 AUBIO_FREE(o); 349 355 } -
src/spectral/dct.c
rd1d4ad4 rf87e191 82 82 aubio_dct_t* new_aubio_dct (uint_t size) { 83 83 aubio_dct_t * s = AUBIO_NEW(aubio_dct_t); 84 if ((sint_t)size <= 0) goto beach;85 84 #if defined(HAVE_ACCELERATE) 86 85 // vDSP supports sizes = f * 2 ** n, where n >= 4 and f in [1, 3, 5, 15] … … 89 88 uint_t radix = size; 90 89 uint_t order = 0; 91 while ((radix / 2) * 2 == radix) {90 while ((radix >= 1) && ((radix / 2) * 2 == radix)) { 92 91 radix /= 2; 93 92 order++; … … 113 112 return s; 114 113 } else { 115 AUBIO_WRN("dct: unex cepected error while creating dct_fftw with size %d",114 AUBIO_WRN("dct: unexpected error while creating dct_fftw with size %d\n", 116 115 size); 117 116 goto plain; … … 126 125 return s; 127 126 } else { 128 AUBIO_WRN("dct: unex cepected error while creating dct_ipp with size %d",127 AUBIO_WRN("dct: unexpected error while creating dct_ipp with size %d\n", 129 128 size); 130 129 goto plain; … … 144 143 #endif 145 144 // falling back to plain mode 146 AUBIO_WRN("dct: d no optimised implementation could be created for size %d",145 AUBIO_WRN("dct: no optimised implementation could be created for size %d\n", 147 146 size); 148 147 plain: … … 157 156 } 158 157 beach: 159 AUBIO_ERROR("dct: failed creating with size %d, should be > 0 ", size);160 AUBIO_FREE(s);158 AUBIO_ERROR("dct: failed creating with size %d, should be > 0\n", size); 159 del_aubio_dct(s); 161 160 return NULL; 162 161 } -
src/spectral/dct_fftw.c
rd1d4ad4 rf87e191 64 64 aubio_dct_fftw_t * new_aubio_dct_fftw (uint_t size) { 65 65 aubio_dct_fftw_t * s = AUBIO_NEW(aubio_dct_fftw_t); 66 if (!s) { 66 if ((sint_t)size <= 0) { 67 AUBIO_ERR("dct_fftw: can only create with size > 0, requested %d\n", 68 size); 67 69 goto beach; 68 70 } -
src/spectral/dct_ooura.c
rd1d4ad4 rf87e191 39 39 aubio_dct_ooura_t * new_aubio_dct_ooura (uint_t size) { 40 40 aubio_dct_ooura_t * s = AUBIO_NEW(aubio_dct_ooura_t); 41 if (aubio_is_power_of_two(size) != 1 ) {42 AUBIO_ERR("dct : can only create with sizes power of two, requested %d\n",41 if (aubio_is_power_of_two(size) != 1 || (sint_t)size <= 0) { 42 AUBIO_ERR("dct_ooura: can only create with sizes power of two, requested %d\n", 43 43 size); 44 44 goto beach; -
src/spectral/dct_plain.c
rd1d4ad4 rf87e191 32 32 }; 33 33 34 void del_aubio_dct_plain (aubio_dct_plain_t *s); 35 34 36 aubio_dct_plain_t * new_aubio_dct_plain (uint_t size) { 35 37 aubio_dct_plain_t * s = AUBIO_NEW(aubio_dct_plain_t); … … 38 40 if (aubio_is_power_of_two (size) == 1 && size > 16) { 39 41 AUBIO_WRN("dct_plain: using plain dct but size %d is a power of two\n", size); 42 } 43 if ((sint_t)size <= 0) { 44 AUBIO_ERR("dct_plain: can only create with size > 0, requested %d\n", 45 size); 46 goto failure; 40 47 } 41 48 … … 69 76 } 70 77 return s; 78 failure: 79 del_aubio_dct_plain(s); 80 return NULL; 71 81 } 72 82 73 83 void del_aubio_dct_plain (aubio_dct_plain_t *s) { 74 del_fmat(s->dct_coeffs); 75 del_fmat(s->idct_coeffs); 84 if (s->dct_coeffs) 85 del_fmat(s->dct_coeffs); 86 if (s->idct_coeffs) 87 del_fmat(s->idct_coeffs); 76 88 AUBIO_FREE(s); 77 89 } … … 79 91 void aubio_dct_plain_do(aubio_dct_plain_t *s, const fvec_t *input, fvec_t *output) { 80 92 if (input->length != output->length || input->length != s->size) { 81 AUBIO_WRN("dct_plain: using input length %d, but output length = %d and size = %d ",93 AUBIO_WRN("dct_plain: using input length %d, but output length = %d and size = %d\n", 82 94 input->length, output->length, s->size); 83 95 } … … 87 99 void aubio_dct_plain_rdo(aubio_dct_plain_t *s, const fvec_t *input, fvec_t *output) { 88 100 if (input->length != output->length || input->length != s->size) { 89 AUBIO_WRN("dct_plain: using input length %d, but output length = %d and size = %d ",101 AUBIO_WRN("dct_plain: using input length %d, but output length = %d and size = %d\n", 90 102 input->length, output->length, s->size); 91 103 } -
src/spectral/filterbank.c
rd1d4ad4 rf87e191 43 43 /* allocate space for filterbank object */ 44 44 aubio_filterbank_t *fb = AUBIO_NEW (aubio_filterbank_t); 45 46 if ((sint_t)n_filters <= 0) { 47 AUBIO_ERR("filterbank: n_filters should be > 0, got %d\n", n_filters); 48 goto fail; 49 } 50 if ((sint_t)win_s <= 0) { 51 AUBIO_ERR("filterbank: win_s should be > 0, got %d\n", win_s); 52 goto fail; 53 } 45 54 fb->win_s = win_s; 46 55 fb->n_filters = n_filters; … … 54 63 55 64 return fb; 65 fail: 66 AUBIO_FREE (fb); 67 return NULL; 56 68 } 57 69 -
src/spectral/mfcc.c
rd1d4ad4 rf87e191 32 32 #include "spectral/mfcc.h" 33 33 34 #ifdef HAVE_NOOPT35 #define HAVE_SLOW_DCT 136 #endif37 38 34 /** Internal structure for mfcc object */ 39 35 … … 46 42 aubio_filterbank_t *fb; /** filter bank */ 47 43 fvec_t *in_dct; /** input buffer for dct * [fb->n_filters] */ 48 #if defined(HAVE_SLOW_DCT) 49 fmat_t *dct_coeffs; /** DCT transform n_filters * n_coeffs */ 50 #else 51 aubio_dct_t *dct; 52 fvec_t *output; 53 #endif 44 aubio_dct_t *dct; /** dct object */ 45 fvec_t *output; /** dct output */ 54 46 smpl_t scale; 55 47 }; … … 63 55 /* allocate space for mfcc object */ 64 56 aubio_mfcc_t *mfcc = AUBIO_NEW (aubio_mfcc_t); 65 #if defined(HAVE_SLOW_DCT)66 smpl_t scaling;67 57 68 uint_t i, j; 69 #endif 58 if ((sint_t)n_coefs <= 0) { 59 AUBIO_ERR("mfcc: n_coefs should be > 0, got %d\n", n_coefs); 60 goto failure; 61 } 62 if ((sint_t)samplerate <= 0) { 63 AUBIO_ERR("mfcc: samplerate should be > 0, got %d\n", samplerate); 64 goto failure; 65 } 70 66 71 67 mfcc->win_s = win_s; … … 76 72 /* filterbank allocation */ 77 73 mfcc->fb = new_aubio_filterbank (n_filters, mfcc->win_s); 74 75 if (!mfcc->fb) 76 goto failure; 77 78 78 if (n_filters == 40) 79 79 aubio_filterbank_set_mel_coeffs_slaney (mfcc->fb, samplerate); … … 85 85 mfcc->in_dct = new_fvec (n_filters); 86 86 87 #if defined(HAVE_SLOW_DCT)88 mfcc->dct_coeffs = new_fmat (n_coefs, n_filters);89 90 /* compute DCT transform dct_coeffs[j][i] as91 cos ( j * (i+.5) * PI / n_filters ) */92 scaling = 1. / SQRT (n_filters / 2.);93 for (i = 0; i < n_filters; i++) {94 for (j = 0; j < n_coefs; j++) {95 mfcc->dct_coeffs->data[j][i] =96 scaling * COS (j * (i + 0.5) * PI / n_filters);97 }98 mfcc->dct_coeffs->data[0][i] *= SQRT (2.) / 2.;99 }100 #else101 87 mfcc->dct = new_aubio_dct (n_filters); 102 88 mfcc->output = new_fvec (n_filters); 103 #endif 89 90 if (!mfcc->in_dct || !mfcc->dct || !mfcc->output) 91 goto failure; 104 92 105 93 mfcc->scale = 1.; 106 94 107 95 return mfcc; 96 97 failure: 98 del_aubio_mfcc(mfcc); 99 return NULL; 108 100 } 109 101 … … 111 103 del_aubio_mfcc (aubio_mfcc_t * mf) 112 104 { 113 114 /* delete filterbank */ 115 del_aubio_filterbank (mf->fb); 116 117 /* delete buffers */ 118 del_fvec (mf->in_dct); 119 #if defined(HAVE_SLOW_DCT) 120 del_fmat (mf->dct_coeffs); 121 #else 122 del_aubio_dct (mf->dct); 123 del_fvec (mf->output); 124 #endif 125 126 /* delete mfcc object */ 105 if (mf->fb) 106 del_aubio_filterbank (mf->fb); 107 if (mf->in_dct) 108 del_fvec (mf->in_dct); 109 if (mf->dct) 110 del_aubio_dct (mf->dct); 111 if (mf->output) 112 del_fvec (mf->output); 127 113 AUBIO_FREE (mf); 128 114 } … … 132 118 aubio_mfcc_do (aubio_mfcc_t * mf, const cvec_t * in, fvec_t * out) 133 119 { 134 #ifndef HAVE_SLOW_DCT135 120 fvec_t tmp; 136 #endif137 121 138 122 /* compute filterbank */ … … 145 129 146 130 /* compute mfccs */ 147 #if defined(HAVE_SLOW_DCT)148 fmat_vecmul(mf->dct_coeffs, mf->in_dct, out);149 #else150 131 aubio_dct_do(mf->dct, mf->in_dct, mf->output); 151 132 // copy only first n_coeffs elements … … 154 135 tmp.length = out->length; 155 136 fvec_copy(&tmp, out); 156 #endif157 137 158 138 return; -
src/spectral/mfcc.h
rd1d4ad4 rf87e191 153 153 154 154 \param mf mfcc object 155 \param samplerate audio sampling rate, in Hz156 155 157 156 The filter coefficients are built to match exactly Malcolm Slaney's Auditory -
src/spectral/specdesc.c
rd1d4ad4 rf87e191 297 297 onset_type = aubio_onset_default; 298 298 else { 299 AUBIO_ERR("unknown spectral descriptor type %s\n", onset_mode); 299 AUBIO_ERR("specdesc: unknown spectral descriptor type '%s'\n", 300 onset_mode); 300 301 AUBIO_FREE(o); 301 302 return NULL; -
src/synth/wavetable.c
rd1d4ad4 rf87e191 168 168 } 169 169 170 uint_t 171 aubio_wavetable_load ( aubio_wavetable_t *s UNUSED, const char_t *uri UNUSED) 172 { 173 AUBIO_ERR("wavetable: load method not implemented yet, see sampler\n"); 174 return AUBIO_FAIL; 175 } 176 170 177 uint_t aubio_wavetable_set_freq ( aubio_wavetable_t * s, smpl_t freq ) 171 178 { -
src/synth/wavetable.h
rd1d4ad4 rf87e191 51 51 */ 52 52 aubio_wavetable_t * new_aubio_wavetable(uint_t samplerate, uint_t hop_size); 53 54 /** load source in wavetable 55 56 TODO: This function is not implemented yet. See new_aubio_sampler() instead. 57 58 \param o wavetable, created by new_aubio_wavetable() 59 \param uri the uri of the source to load 60 61 \return 0 if successful, non-zero otherwise 62 63 */ 64 uint_t aubio_wavetable_load( aubio_wavetable_t * o, const char_t * uri ); 53 65 54 66 /** process wavetable function -
src/tempo/tempo.c
rd1d4ad4 rf87e191 129 129 130 130 uint_t aubio_tempo_set_delay_ms(aubio_tempo_t * o, smpl_t delay) { 131 o->delay = 1000. * delay * o->samplerate; 132 return AUBIO_OK; 131 return aubio_tempo_set_delay_s(o, delay / 1000.); 133 132 } 134 133 … … 142 141 143 142 smpl_t aubio_tempo_get_delay_ms(aubio_tempo_t * o) { 144 return o->delay / (smpl_t)(o->samplerate) /1000.;143 return aubio_tempo_get_delay_s(o) * 1000.; 145 144 } 146 145 … … 169 168 { 170 169 aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t); 171 char_t specdesc_func[ 20];170 char_t specdesc_func[PATH_MAX]; 172 171 o->samplerate = samplerate; 173 172 // check parameters are valid … … 204 203 aubio_peakpicker_set_threshold (o->pp, o->threshold); 205 204 if ( strcmp(tempo_mode, "default") == 0 ) { 206 str cpy(specdesc_func, "specflux");205 strncpy(specdesc_func, "specflux", PATH_MAX - 1); 207 206 } else { 208 strcpy(specdesc_func, tempo_mode); 207 strncpy(specdesc_func, tempo_mode, PATH_MAX - 1); 208 specdesc_func[PATH_MAX - 1] = '\0'; 209 209 } 210 210 o->od = new_aubio_specdesc(specdesc_func,buf_size); … … 216 216 onset2 = new_fvec(1); 217 217 }*/ 218 if (!o->dfframe || !o->fftgrain || !o->out || !o->pv || 219 !o->pp || !o->od || !o->of || !o->bt || !o->onset) { 220 AUBIO_ERR("tempo: failed creating tempo object\n"); 221 goto beach; 222 } 218 223 o->last_tatum = 0; 219 224 o->tatum_signature = 4; … … 221 226 222 227 beach: 223 AUBIO_FREE(o);228 del_aubio_tempo(o); 224 229 return NULL; 225 230 } … … 278 283 void del_aubio_tempo (aubio_tempo_t *o) 279 284 { 280 del_aubio_specdesc(o->od); 281 del_aubio_beattracking(o->bt); 282 del_aubio_peakpicker(o->pp); 283 del_aubio_pvoc(o->pv); 284 del_fvec(o->out); 285 del_fvec(o->of); 286 del_cvec(o->fftgrain); 287 del_fvec(o->dfframe); 288 del_fvec(o->onset); 285 if (o->od) 286 del_aubio_specdesc(o->od); 287 if (o->bt) 288 del_aubio_beattracking(o->bt); 289 if (o->pp) 290 del_aubio_peakpicker(o->pp); 291 if (o->pv) 292 del_aubio_pvoc(o->pv); 293 if (o->out) 294 del_fvec(o->out); 295 if (o->of) 296 del_fvec(o->of); 297 if (o->fftgrain) 298 del_cvec(o->fftgrain); 299 if (o->dfframe) 300 del_fvec(o->dfframe); 301 if (o->onset) 302 del_fvec(o->onset); 289 303 AUBIO_FREE(o); 290 return; 291 } 304 } -
tests/src/onset/test-onset.c
rd1d4ad4 rf87e191 1 1 #include <aubio.h> 2 2 #include "utils_tests.h" 3 4 int test_wrong_params(void); 3 5 4 6 int main (int argc, char **argv) … … 7 9 if (argc < 2) { 8 10 err = 2; 9 PRINT_ERR("not enough arguments\n"); 10 PRINT_MSG("read a wave file as a mono vector\n"); 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 } 11 18 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); 12 19 return err; … … 61 68 return err; 62 69 } 70 71 int test_wrong_params(void) 72 { 73 uint_t win_size = 1024; 74 uint_t hop_size = win_size / 2; 75 uint_t samplerate = 44100; 76 // hop_size < 1 77 if (new_aubio_onset("default", 5, 0, samplerate)) 78 return 1; 79 // buf_size < 2 80 if (new_aubio_onset("default", 1, 1, samplerate)) 81 return 1; 82 // buf_size < hop_size 83 if (new_aubio_onset("default", hop_size, win_size, samplerate)) 84 return 1; 85 // samplerate < 1 86 if (new_aubio_onset("default", 1024, 512, 0)) 87 return 1; 88 89 // 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; 95 96 aubio_onset_t *o; 97 o = new_aubio_onset("default", win_size, hop_size, samplerate); 98 if (!aubio_onset_set_default_parameters(o, "wrong_type")) 99 return 1; 100 del_aubio_onset(o); 101 102 return 0; 103 } -
tests/src/spectral/test-awhitening.c
rd1d4ad4 rf87e191 1 1 #include <aubio.h> 2 2 #include "utils_tests.h" 3 4 int test_wrong_params(void); 3 5 4 6 int main (int argc, char **argv) … … 8 10 if (argc < 3) { 9 11 err = 2; 10 PRINT_ERR("not enough arguments\n"); 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 } 11 19 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 12 20 return err; … … 83 91 } 84 92 93 int test_wrong_params(void) 94 { 95 uint_t buf_size = 512; 96 uint_t hop_size = 256; 97 uint_t samplerate = 44100; 98 aubio_spectral_whitening_t *o; 99 100 if (new_aubio_spectral_whitening( 0, hop_size, samplerate)) return 1; 101 if (new_aubio_spectral_whitening(buf_size, 0, samplerate)) return 1; 102 if (new_aubio_spectral_whitening(buf_size, hop_size, 0)) return 1; 103 104 o = new_aubio_spectral_whitening(buf_size, hop_size, samplerate); 105 106 aubio_spectral_whitening_get_relax_time(o); 107 aubio_spectral_whitening_get_floor(o); 108 109 del_aubio_spectral_whitening(o); 110 111 return 0; 112 } -
tests/src/spectral/test-dct.c
rd1d4ad4 rf87e191 10 10 // create dct object 11 11 aubio_dct_t * dct = new_aubio_dct(win_s); 12 aubio_dct_t * tmp; 13 14 if (new_aubio_dct(0)) return 1; 12 15 13 16 fvec_t * in = new_fvec (win_s); // input buffer 14 17 fvec_t * dctout = new_fvec (win_s); // output buffer 15 18 fvec_t * out = new_fvec (win_s); // input buffer 19 20 if ((tmp = new_aubio_dct(1)) == 0) return 1; 21 //aubio_dct_do(tmp, dctout, out); 22 //aubio_dct_rdo(tmp, dctout, out); 23 del_aubio_dct(tmp); 16 24 17 25 if (!dct || !in || !dctout) { -
tests/src/spectral/test-filterbank.c
rd1d4ad4 rf87e191 8 8 cvec_t *in_spec = new_cvec (win_s); // input vector of samples 9 9 fvec_t *out_filters = new_fvec (n_filters); // per-band outputs 10 11 if (new_aubio_filterbank(0, win_s)) return 1; 12 if (new_aubio_filterbank(n_filters, 0)) return 1; 10 13 11 14 // create filterbank object -
tests/src/spectral/test-mfcc.c
rd1d4ad4 rf87e191 5 5 uint_t win_s = 512; // fft size 6 6 uint_t n_filters = 40; // number of filters 7 uint_t n_coef s = 13; // number of coefficients7 uint_t n_coeffs = 13; // number of coefficients 8 8 smpl_t samplerate = 16000.; // samplerate 9 9 cvec_t *in = new_cvec (win_s); // input buffer 10 fvec_t *out = new_fvec (n_coefs); // output coefficients 10 fvec_t *out = new_fvec (n_coeffs); // output coefficients 11 12 if (new_aubio_mfcc( 0, n_filters, n_coeffs, samplerate)) return 1; 13 if (new_aubio_mfcc(win_s, 0, n_coeffs, samplerate)) return 1; 14 if (new_aubio_mfcc(win_s, n_filters, 0, samplerate)) return 1; 15 if (new_aubio_mfcc(win_s, n_filters, n_coeffs, 0)) return 1; 11 16 12 17 // create mfcc object 13 aubio_mfcc_t *o = new_aubio_mfcc (win_s, n_filters, n_coef s, samplerate);18 aubio_mfcc_t *o = new_aubio_mfcc (win_s, n_filters, n_coeffs, samplerate); 14 19 15 20 cvec_norm_set_all (in, 1.); -
tests/src/spectral/test-phasevoc.c
rd1d4ad4 rf87e191 13 13 // allocate fft and other memory space 14 14 aubio_pvoc_t * pv = new_aubio_pvoc(win_s,hop_s); 15 16 if (new_aubio_pvoc(win_s, 0)) return 1; 17 18 if (aubio_pvoc_get_win(pv) != win_s) return 1; 19 if (aubio_pvoc_get_hop(pv) != hop_s) return 1; 20 21 if (aubio_pvoc_set_window(pv, "hanningz") != 0) return 1; 15 22 16 23 // fill input with some data -
tests/src/spectral/test-tss.c
rd1d4ad4 rf87e191 35 35 } 36 36 37 aubio_tss_set_alpha(tss, 4.); 38 aubio_tss_set_beta(tss, 3.); 39 aubio_tss_set_threshold(tss, 3.); 40 37 41 del_aubio_pvoc(pv); 38 42 del_aubio_pvoc(pvt); -
tests/src/tempo/test-tempo.c
rd1d4ad4 rf87e191 1 1 #include <aubio.h> 2 2 #include "utils_tests.h" 3 4 int test_wrong_params(void); 3 5 4 6 int main (int argc, char **argv) … … 7 9 if (argc < 2) { 8 10 err = 2; 9 PRINT_ERR("not enough arguments\n"); 10 PRINT_MSG("read a wave file as a mono vector\n"); 11 PRINT_MSG("usage: %s <source_path> [samplerate] [win_size] [hop_size]\n", argv[0]); 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 } 18 PRINT_MSG("usage: %s <source_path> [samplerate] [win_size] [hop_size]\n", 19 argv[0]); 12 20 return err; 13 21 } … … 21 29 22 30 char_t *source_path = argv[1]; 23 aubio_source_t * source = new_aubio_source(source_path, samplerate, hop_size); 31 aubio_source_t * source = new_aubio_source(source_path, samplerate, 32 hop_size); 24 33 if (!source) { err = 1; goto beach; } 25 34 … … 31 40 32 41 // create tempo object 33 aubio_tempo_t * o = new_aubio_tempo("default", win_size, hop_size, samplerate); 42 aubio_tempo_t * o = new_aubio_tempo("default", win_size, hop_size, 43 samplerate); 44 45 if (!o) { err = 1; goto beach_tempo; } 34 46 35 47 do { … … 40 52 // do something with the beats 41 53 if (out->data[0] != 0) { 42 PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2fbpm with confidence %.2f\n", 54 PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2f bpm " 55 "with confidence %.2f\n", 43 56 aubio_tempo_get_last_ms(o), aubio_tempo_get_last_s(o), 44 aubio_tempo_get_last(o), aubio_tempo_get_bpm(o), aubio_tempo_get_confidence(o)); 57 aubio_tempo_get_last(o), aubio_tempo_get_bpm(o), 58 aubio_tempo_get_confidence(o)); 45 59 } 46 60 n_frames += read; … … 54 68 // clean up memory 55 69 del_aubio_tempo(o); 70 beach_tempo: 56 71 del_fvec(in); 57 72 del_fvec(out); … … 62 77 return err; 63 78 } 79 80 int test_wrong_params(void) 81 { 82 uint_t win_size = 1024; 83 uint_t hop_size = 256; 84 uint_t samplerate = 44100; 85 aubio_tempo_t *t; 86 fvec_t* in, *out; 87 uint_t i; 88 89 // test wrong method fails 90 if (new_aubio_tempo("unexisting_method", win_size, hop_size, samplerate)) 91 return 1; 92 93 // test hop > win fails 94 if (new_aubio_tempo("default", hop_size, win_size, samplerate)) 95 return 1; 96 97 // test null hop_size fails 98 if (new_aubio_tempo("default", win_size, 0, samplerate)) 99 return 1; 100 101 // test 1 buf_size fails 102 if (new_aubio_tempo("default", 1, 1, samplerate)) 103 return 1; 104 105 // test null samplerate fails 106 if (new_aubio_tempo("default", win_size, hop_size, 0)) 107 return 1; 108 109 // test short sizes workaround 110 t = new_aubio_tempo("default", 2048, 2048, 500); 111 if (!t) 112 return 1; 113 114 del_aubio_tempo(t); 115 116 t = new_aubio_tempo("default", win_size, hop_size, samplerate); 117 if (!t) 118 return 1; 119 120 in = new_fvec(hop_size); 121 out = new_fvec(1); 122 123 // up to step = (next_power_of_two(5.8 * samplerate / hop_size ) / 4 ) 124 for (i = 0; i < 256 + 1; i++) 125 { 126 aubio_tempo_do(t,in,out); 127 PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2f bpm " 128 "with confidence %.2f, was tatum %d\n", 129 aubio_tempo_get_last_ms(t), aubio_tempo_get_last_s(t), 130 aubio_tempo_get_last(t), aubio_tempo_get_bpm(t), 131 aubio_tempo_get_confidence(t), aubio_tempo_was_tatum(t)); 132 } 133 134 del_aubio_tempo(t); 135 del_fvec(in); 136 del_fvec(out); 137 138 return 0; 139 } -
wscript
rd1d4ad4 rf87e191 619 619 ctx.excl += ' **/python.old/*' 620 620 ctx.excl += ' **/python/*/*.old' 621 ctx.excl += ' **/python/lib/aubio/*.so' 621 622 ctx.excl += ' **/python/tests/sounds' 622 623 ctx.excl += ' **/**.asc' … … 628 629 ctx.excl += ' **/.circleci/*' 629 630 ctx.excl += ' **/azure-pipelines.yml' 630 ctx.excl += ' **/.coverage rc'631 ctx.excl += ' **/.coverage*'
Note: See TracChangeset
for help on using the changeset viewer.