2018-12-19 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.9 * library: improve stability, fixing potential crashes and memory leaks on invalid arguments; improve library messages and reporting of system errors * tests/: major clean-up, check return codes, increase code coverage * python/tests/: switch to pytest (closes gh-163), check emitted warnings * python/: add pages to manual with brief descriptions of classes [ Fixes ] * security: improve arguments validation in new_aubio_filterbank (prevent possible null-pointer dereference on invalid n_filters, CVE-2018-19801), new_aubio-tempo (prevent possible buffer overflow, CVE-2018-19800), and new_aubio_onset (prevent null-pointer dereference, CVE-2018-19802). Thanks to Guoxiang Niu (@niugx), from the EaglEye Team for reporting these issues. * tempo: fix delay_ms methods * filterbank: fix aubio_filterbank_get_power (thanks to @romanbsd who also noticed this issue) * dct: creation fail on negative sizes or invalid accelerate radix, fix typo in error and warning messages, prevent possible memory leak * pitch: prevent null pointer dereference in yinfast, comment out unused functions in mcomb and yin, prevent possible leak in specacf * mfcc: always use dct module, strengthen input validation, change get_{scale,power} to return smpl_t * specdesc: improve error message * notes: prevent null pointer dereference * hist: add validation for size argument, prevent possible leak * awhitening: use shortest length available (closes gh-216) * io: add macros to display system errors, add helpers to validate input arguments of source and sink methods, always clean-up after failure * source: validate input sizes to prevent invalid reads * apple_audio: use native format conversions in source and sink, prevent possible apple_audio crash on empty string, get_duration returns 0 on failure * ffmpeg/avcodec: prevent deprecation warnings, read after close, and skipped samples warnings, improve warning messages, only show a warning when swr_convert failed, prevent possible memory leak when closing swr context * wavwrite: copy to all channels if needed, check fseek and fwrite return values, call fflush in open to return failure on full disk-system * source_sndfile: fix reading sizes when resampling, set error message when reading after close * aubio_priv.h: include blas first (see gh-225), add STRERROR macros [ Python ] * documentation: add pages to manual, add minimal docstrings for fft, digital_filter, and generated objects, improve specdesc documentation * filterbank: add get_norm/power documentation * source: take a copy of the last frame before resizing it, raise an exception when read failed, fix compilation warning * fixes: remove unneeded check convert with PyFloat_FromDouble or PyFloat_FromDouble, check if sink, digital_filter, were created before deleting [ Tests ] * python/tests/: switch to pytest (slightly slower than nose2 but better at capturing warnings and parametrization), improve coding style and coverage. Tests should now be run with `pytest`. * tests/: Each test program in C must now return 0, otherwise the test will fail. Examples have been modified to run themselves on a test audio file, but can still be run with arguments. Tests for `source` and `sink` have been factorised, and some code cleaning. A python script is used to create a test sound file. Tested on linux, macos, and windows, improvements to test-mfcc (closes gh-219). [ Build system ] * waf: upgrade to 2.0.14, check the return code of each test program, update rules to build manual and api documentation into build/, check for errno.h * osx: use -Os in scripts/build_apple_frameworks * Makefile: improve coverage reports * appveyor, travis, circleci: switch to pytest, set one travis config to use sndfile only * travis: add py3.6, drop py3.4, use py3.5 to test debug mode * azure: add basic configuration 2018-11-21 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.8 * notes: new option release_drop (gh-203) * spectral: new parameters added to filterbank and mfcc (gh-206) * python: start documenting module (gh-73, debian #480018), improve build for win-amd64 (gh-154, gh-199, gh-208) * fixes: prevent crash when using fft sizes unsupported by vDSP (gh-207), prevent saturation when down-mixing a multi-channel source (avcodec/ffmpeg) [ Fixes ] * avcodec: prevent saturation when down-mixing a multi-channel source, emit a warning if compiling against avutil < 53 (gh-137), wrap long lines * examples/: avoid hiding global and unreachable code * fft: limit to r*2*n sizes, with r in [1, 3, 5, 15] (vDSP only) (gh-207) * fft: fix reconstruction for odd sizes (fftw only) * pvoc: add missing implementations for aubio_pvoc_get_hop/win * mathutils: increase ln(2) precision of in freqtomidi/miditofreq * wavetable: stop sets playing to 0, add dummy implementation for _load [ New features ] * src/musicutils.h: new aubio_meltohz, aubio_hztomel, with _htk versions * src/spectral/filterbank.h: new set_mel_coeffs, set_mel_coeffs_htk, set_power, and set_norm methods, improved set_triangle_bands * src/spectral/mfcc.h: new set_scale, set_power, set_norm, set_mel_coeffs, set_mel_coeffs_htk, set_mel_coeffs_slaney * src/mathutils.h: new fvec_mul * src/notes: new option release_drop to prevent missing note-offs (gh-203) [ Python module ] * fix: rounding to nearest integer in midi2note and freq2note * general: supports code generation of setters with none or multiple parameters * documentation: add docstrings do fvec, cvec, source, sink, pvoc, frequency conversion and level detection routines (gh-73, debian #480018) * slicing: improve and document slice_source_at_stamps * module: new note2freq function, recover error log when raising exceptions on failed set_ methods, prevent cyclic import, coding style improvements * demos: improve coding style, fix bpm_extract arguments * MANIFEST.in: exclude *.pyc, improve patterns [ Documentation ] * doc/: use sphinx autodoc to load docstrings from aubio module, reorganize python module documentation, add a note about double precision, use https when possible * src/spectral/: update Auditory Toolbox url, update copyright year [ Tools ] * aubionotes: add --release-drop option * aubio: add --release-drop and --silence options to `aubio notes`, workaround for -V to really show version (py2) * aubiocut: add option --create-first to always create first slice [ Tests ] * tests/, python/tests: add tests for new methods, check source channel down-mix, improve coverage [ Build system ] * Makefile: disable docs when measuring coverage, add branch coverage option, add coverage_zero_counters target, improve html report * waf: update to 2.0.12, improve wscript style, prevent shipping some generated files * python: always show compiler warnings when pre-processing headers, workaround to fix code generation for win-amd64 (gh-154, gh-199, gh-208). * continuous integration: add azure pipelines, update and improve configurations for appveyor, circleci, and travis. 2018-09-22 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.7 * src/spectral/dct.h: add dct type II object with optimised versions * src/io/, src/notes/, src/pitch: prevent crashes on corrupted files * examples/: fix jack midi output, improve messages when jack disabled * python/: add dct support, minor bug fixes tests and demos * wscript: improve support for BLAS/ATLAS [ Library fixes ] * src/pitch/pitchyinfft.c: fix out of bound read when samplerate > 50kHz thanks to @fCorleone (closes #189, CVE-2018-14523, debian #904906) * src/notes/notes.c: bail out if pitch creation failed (see #188) * src/io/source_wavread.c: - also exit if samplerate is negative (closes #188, CVE-2018-14522, debian #904907) - add some input validation (closes #148 and #158, CVE-2017-17054, debian #883355) * src/io/source_avcodec.c: - give up if resampling context failed opening (see #137, closes #187, CVE-2018-14521, debian #904908) - give up reading file if number of channel changes during stream (closes #137, CVE-2017-17554, debian #884237) - make sure libavutil > 52 before checking avFrame->channels (see #137) - fix build with ffmpeg 4.0, thanks to @jcowgill (closes #168, #173) - avoid deprecated call for ffmpeg >= 4.0 * src/onset/onset.c: add dummy default parameters for wphase (closes #150) [ Tools ] * examples/parse_args.h: hide jack options if not available, improve error message (closes #182) * examples/utils.h: process_block returns void * examples/utils.c: fix examples failing to send more than one JACK midi event per frame, thanks to @cyclopsian (closes #201) [ New features ] * src/spectral/dct.h: add dct type II object with implementation factory * src/spectral/dct_plain.c: add plain dct implementation * src/spectral/dct_ooura.c: add ooura implementation * src/spectral/dct_fftw.c: add fftw implementation * src/spectral/dct_ipp.c: add ipp version * src/spectral/dct_accelerate.c: add vdsp/accelerate dct * tests/src/spectral/test-dct.c: check reconstruction works * src/spectral/mfcc.c: use new dct to compute mfcc [ Library internals ] * src/aubio_priv.h: avoid hard-coded undefs, split BLAS and ATLAS support, add vdsp scalar add and multiply [ Build system ] * wscript: - add options to disable examples and tests - detect includes for openblas/libblas/atlas * scripts/get_waf.sh: bump to 2.0.11, verify signature if gpg available * python/lib/gen_external.py: pass '-x c' to emcc only [ Python ] * python/lib/gen_code.py: add support for rdo methods * python/tests/test_dct.py: add tests for new dct * python/demos/demo_pitch_sinusoid.py: use // to yield an integer, fixing demo on py3, thanks to @ancorcruz (closes #176) * python/ext/py-musicutils.*: add shift(fvec) and ishift(fvec) * python/tests/test_fvec_shift.py: add tests for shift() and ishift() * python/lib/aubio/cmd.py: fix typo in comment [ Documentation ] * README.md, doc/statuslinks.rst: use latest for commits-since * examples/parse_args.h: add yinfast to pitch algorithms * doc/requirements.rst: add some blas documentation * doc/requirements.rst: split media/optimisation libraries * doc/develop.rst: fixed spelling error, thanks to Jon Williams (closes #161) * doc/aubio{pitch,notes}.txt: add yinfast to list of pitch methods [ Continuous integration ] * .travis.yml: remove xcode8.2 builds, group osx, add alias pip=pip2 * .appveyor.yml: upgrade pip first, always use python -m pip 2017-10-02 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.6 * src/spectral/fft.c, src/*.c: add support for Intel IPP (many thanks to Eduard Mueller) * wscript: add support for emscripten (thanks to Martin Hermant) * src/pitch/pitchyinfast.h: new fast method to compute YIN algorithm * src/pitch/pitchyin*.c: improve confidence measure, making sure its value corresponds to the selected period (thanks to Eduard Mueller) * python/lib/aubio/cmd.py: add `quiet`, `cut`, and `help` subcommands [ Library ] * src/aubio_priv.h: add missing aubio_vDSP_vclr (Eduard Mueller) * src/io/source_avcodec.c: improve error message, prevent un-opened bracket, no declaration after statements for older compilers, avoid unused variable * src/mathutils.c: prevent segfault with Accelerate.framework (closes #58, closes #102) * src/spectral/phasevoc.h: add aubio_pvoc_set_window to change the windowing function * src/mathutils.c: add window type `ones` (no windowing) [ Python ] * python/demos/demo_tapthebeat.py: add a real-time example to play beats using pyaudio * python/lib/gen_external.py: improve parsing and syntax, use results in emscripten build (Martin Hermant) * python/lib/aubio/cmd.py: add option `-u` to `aubio pitch`, improve error messages, add `quiet` subcommand (closes #124), improve syntax, add some documentation, add `cut` and `help` subcommand, add silence and time format options * python/lib/aubio/cut.py: upgrade to argparse, set samplerate as needed * python/demos/demo_yin_compare.py: add comparison of yin implementations * python/demos/demo_wav2midi.py: add an example to create a midi from a sound file using mido (closes: #134) * python/demos/demo_bpm_extract.py: use argparse, use beats_to_bpm function * python/ext/py-cvec.c: fix support for pypy by changing setters to return a negative value on error (closes #17) [ Documentation ] * src/tempo/beattracking.h: fix typo (thanks to Hannes Fritz) * doc/requirements.rst: fix broken link (thanks to @ssj71, closes #99) * doc/aubiomfcc.txt: fix typo in 'coefficients' [ Tests ] * python/tests/tests_aubio_{cmd,cut}.py: add basic tests * python/tests/test_filterbank*.py: ignore UserWarnings, clean-up, improve get_coeff tests [ Build system ] * wscript: add support for emscripten, see scripts/build_emscripten * scripts/get_waf.sh: update waf to 2.0.1, build waf from source tarball * scripts/build_emscripten: update to build aubio.js * Makefile: add coverage and coverage_report targets, run tests once [ Continuous integration ] * .travis.yml: add coverage report on osx * .appveyor.yml: use msvc 14.0 (VS 2015) and scripts/get_waf.sh * .coveragerc: add minimal python coverage configuration 2017-04-10 Paul Brossier <piem@aubio.org> [Overview] * VERSION: bump to 0.4.5 * src/io/source_avcodec.c: add support for libswresample * aubio: new python command line tool to extract information * src/onset/onset.c: add spectral whitening and compression, improve default parameters * this_version.py: use centralized script to get current version, adding git sha when building from git repo (thanks to MartinHN) [Interface] * src/spectral/awhithening.h: add adaptive whitening * src/{cvec,mathutils,musicutils}.h: add cvec_logmag, fvec_logmag, and fvec_push * src/onset/onset.h: add aubio_onset_set_default_parameters to load optimal parameters of each novelty function, _{set,get}_compression and _{set,get}_awhitening to turn on/off compression and adaptive whitening * src/spectral/specdesc.h: add weighted phase [Library] * src/onset/onset.c: improve default onset parameters (thanks to @superbock for access to his evaluation database), see commit dccfad2 for more details * src/pitch/pitch.c: avoid segfault when using invalid parameters * src/temporal/biquad.c: fix biquad parameters initialization (thanks to @jurlhardt) [Tools] * examples/aubio{onset,track}.c: add options --miditap-note and --miditap-velo to set which midi note is triggered at onset/beat (thanks to @tseaver) * examples/aubioonset.c: show actual parameters in verbose mode * examples/utils.c: improve memory usage to emit midi notes [Python] * python/ext/py-source.c: add with (PEP 343) and iter (PEP 234) interface * python/ext/py-sink.c: add with interface (PEP 343) * python/lib/aubio/cmd.py: new `aubio` command line tool * python/lib/aubio/cut.py: moved from python/scripts/aubiocut [Documentation] * doc/*.rst: reorganize and improve sphinx manual * doc/*.txt: update manpages, add simple manpage for aubio command line * doc/full.cfg: derive from doc/web.cfg * README.md: simplify and add contribute information [Build system] * wscript: prefer libswresample over libavsamplerate when available, use current version in manpages, doxygen, and sphinx, update to newest waf * setup.py: use entry_points console_scripts to generate scripts, use centralized version from this_version.py, clean up * python/lib/moresetuptools.py: detect if libswresample is available 2017-01-08 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.4 * src/utils/log.h: new function to redirect log, error, and warnings * python/: AUBIO_ERR raises python exception, AUBIO_WRN to emit py warning * doc/: add some documentation, fix errors in manpages * wscript: new rules to build 'manpages', 'doxygen', and 'sphinx', new --build-type=<release|debug> option (thanks to Eduard Mueller) * src/notes/notes.h: add minioi and silence methods * examples/: add --minioi (minimum inter-onset interval) option * src/pitch/pitchyin.c: improve msvc compiler optimisations (thanks to Eduard Mueller) * python/, src/: improve error messages, fix minor memory leaks * src/io/source_avcodec.c: improve compatibility with latest ffmpeg and with older libav/ffmpeg versions * python/demos/: new demos to capture microphone in real time [ Interface] * src/aubio.h: include utils/log.h * src/utils/log.h: add new aubio_log_set_function to redirect log messages * src/notes/notes.h: add aubio_notes_{get,set}_minioi_ms, add _{get,set}_silence methods [ Library ] * src/aubio_priv.h: add AUBIO_INF to print to stdout with header, use new logging function, add ATAN alias, add stdarg.h, move #include "config.h" * src/{fmat,fvec}.c: avoid integer division * src/pitch/pitchyin.c: [msvc] help compiler to optimize aubio_pitchyin_do by giving it addresses for all arrays which are referenced in inner loops, thanks to Eduard Mueller. * src/pitch/pitch.c: declare internal functions as static, fail on wrong method, warn on wrong unit, improve error messages, fix error string * src/spectral/specdesc.c: return NULL if wrong mode asked, remove trailing spaces * src/onset/onset.c: return null and clean-up if new_aubio_specdesc failed, fix error message * src/notes/notes.c: use midi note to store pitch candidate, round to nearest note, add a variable to define precision, fix out-of-bound write, fix unset silence_threshold, fix error message * src/spectral/ooura_fft8g.c: add cast to avoid conversion warnings, prefix public function with aubio_ooura_ to avoid with other apps using ooura (e.g. puredata), make internal functions static, * src/spectral/fft.c: add message about fftw3 being able to do non-power of two sizes, make calls to fftw_destroy_plan thread-safe, use prefixed aubio_ooura_rdft * src/spectral/phasevoc.c: fix error string * src/temporal/resampler.c: throw an error when using libsamplerate with doubles * src/io/ioutils.h: add functions to check samplerate and channels, use in sink_*.c * src/io/source.c: add error message when aubio was compiled with no source, only show error message from last child source_ * src/io/source_avcodec.c: call avformat_free_context after avformat_close_input, keep a reference to packet to remove it when closing file, avoid deprecation warnings with ffmpeg 3.2, add backward compatibility for libavcodec55, fix for old libavcodec54, use AV_SAMPLE_FMT_DBL when compiling with HAVE_AUBIO_DOUBLE, fix missing samples in eof block, avoid function calls before declarations, improve error messages, replace with new context before closing old one, make sure s->path is set to null * src/io/{source_wavread,sink_wavwrite}.c: declare internal functions as static * src/io/source_wavread.c: fix bytes_read for JUNK headers, improve error messages, initialize buffer, skip chunks until data is found, or abort, skip junk chunk * src/io/source_sndfile.c: add support for multi-channel resampling, set handle to null after sucessful close, add missing floor in ratio comparison, improve formatting * src/io/sink.c: only show error message from last child sink_ * src/io/sink_apple_audio.c: avoid crash on empty file name * src/io/sink_sndfile.c: improve error message * src/io/sink_{sndfile,wavwrite}.c: use AUBIO_MAX_CHANNELS, fix error message [ Documentation ] * README.md: update copyright dates, use https * src/aubio.h: add some links to examples, use https * src/pitch/pitch.h: add aubio_pitch_get_tolerance, add basic description of unit modes * src/notes/notes.h: add doxygen header * src/spectral/fft.h: strip example path * doc/*.rst: improve sphinx documentation * doc/android.rst: add reference to it scripts/build_android * doc/debian_packages.rst: added page on debian packages * doc/python_module.rst: add demo_source_simple.py, add note on pip, add `print(aubio.version)` * doc/cli.rst: include command line manpages * doc/cli_features.rst: add matrix of command line features * doc/requirements.rst: add a note about --notests (closes #77), document --msvc options, improve description of options * doc/download.rst: added page on download * doc/installing.rst: update * doc/xcode_frameworks.rst: added page on xcode frameworks * doc/**: use https://aubio.org * doc/conf.py: use pyramid theme, update copyright, remove hardcoded path * doc/web.cfg: exclude ioutils from doc * doc/aubionotes.txt: document -M option (see #18), * doc/aubioonset.txt: add documentation for -M, --minioi, improve threshold description (thanks to Peter Parker), fix typo (onset, not pitch) * doc/aubio*.txt: document -T/--timeformat option [ Build ] * Makefile: add a brief intro, avoid offline operations, add html and dist targets, add rules for documentation, simplify listing, avoid offline operations, bump waf to 1.9.6, check for waf before clean, chmod go-w waflib, improve clean, use pip to install, factorise pip options, generate more test sounds, improve test_python and test_pure_python, pass build_ext in test_pure_python{,_wheel}, quieten uninstall_python if already uninstalled, improve test targets, use bdist_wheel in test_pure_python, build_ext only for --enable-double, verbose waf rules, add cleanwaf * wscript: added debug/release build type configurations release (default) enables optimizations, debug symbols are enabled in both configurations, thanks to Eduard Mueller. * wscript: add options to disable source_wavread/sink_wavwrite, add check for stdarg.h, new rules 'manpages', 'sphinx', and 'doxygen' to build documentation, add version to sphinx and manpages, disable libsamplerate if double precision enabled (libsamplerate only supports float), fix typos, remove trailing spaces, improve tarball creation (./waf dist), remove full.cfg from tarball, prepend to CFLAGS to honor user cflags * wscript, src/wscript_build: improve install locations using DATAROOTDIR, MANDIR, INCLUDEDIR * wscript: default to no atlas for now * src/wscript_build: always build static library * scripts/build_android: add an example script to build aubio on android, [ Tools ] * examples/aubionotes.c: use new notes, set minioi, send last note off when needed, add warning for missing options * examples/aubioonset.c: add minioi option, in secondsLines 1–500 of 1191. Load more
2018-12-19 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.9 * library: improve stability, fixing potential crashes and memory leaks on invalid arguments; improve library messages and reporting of system errors * tests/: major clean-up, check return codes, increase code coverage * python/tests/: switch to pytest (closes gh-163), check emitted warnings * python/: add pages to manual with brief descriptions of classes [ Fixes ] * security: improve arguments validation in new_aubio_filterbank (prevent possible null-pointer dereference on invalid n_filters, CVE-2018-19801), new_aubio-tempo (prevent possible buffer overflow, CVE-2018-19800), and new_aubio_onset (prevent null-pointer dereference, CVE-2018-19802). Thanks to Guoxiang Niu (@niugx), from the EaglEye Team for reporting these issues. * tempo: fix delay_ms methods * filterbank: fix aubio_filterbank_get_power (thanks to @romanbsd who also noticed this issue) * dct: creation fail on negative sizes or invalid accelerate radix, fix typo in error and warning messages, prevent possible memory leak * pitch: prevent null pointer dereference in yinfast, comment out unused functions in mcomb and yin, prevent possible leak in specacf * mfcc: always use dct module, strengthen input validation, change get_{scale,power} to return smpl_t * specdesc: improve error message * notes: prevent null pointer dereference * hist: add validation for size argument, prevent possible leak * awhitening: use shortest length available (closes gh-216) * io: add macros to display system errors, add helpers to validate input arguments of source and sink methods, always clean-up after failure * source: validate input sizes to prevent invalid reads * apple_audio: use native format conversions in source and sink, prevent possible apple_audio crash on empty string, get_duration returns 0 on failure * ffmpeg/avcodec: prevent deprecation warnings, read after close, and skipped samples warnings, improve warning messages, only show a warning when swr_convert failed, prevent possible memory leak when closing swr context * wavwrite: copy to all channels if needed, check fseek and fwrite return values, call fflush in open to return failure on full disk-system * source_sndfile: fix reading sizes when resampling, set error message when reading after close * aubio_priv.h: include blas first (see gh-225), add STRERROR macros [ Python ] * documentation: add pages to manual, add minimal docstrings for fft, digital_filter, and generated objects, improve specdesc documentation * filterbank: add get_norm/power documentation * source: take a copy of the last frame before resizing it, raise an exception when read failed, fix compilation warning * fixes: remove unneeded check convert with PyFloat_FromDouble or PyFloat_FromDouble, check if sink, digital_filter, were created before deleting [ Tests ] * python/tests/: switch to pytest (slightly slower than nose2 but better at capturing warnings and parametrization), improve coding style and coverage. Tests should now be run with `pytest`. * tests/: Each test program in C must now return 0, otherwise the test will fail. Examples have been modified to run themselves on a test audio file, but can still be run with arguments. Tests for `source` and `sink` have been factorised, and some code cleaning. A python script is used to create a test sound file. Tested on linux, macos, and windows, improvements to test-mfcc (closes gh-219). [ Build system ] * waf: upgrade to 2.0.14, check the return code of each test program, update rules to build manual and api documentation into build/, check for errno.h * osx: use -Os in scripts/build_apple_frameworks * Makefile: improve coverage reports * appveyor, travis, circleci: switch to pytest, set one travis config to use sndfile only * travis: add py3.6, drop py3.4, use py3.5 to test debug mode * azure: add basic configuration 2018-11-21 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.8 * notes: new option release_drop (gh-203) * spectral: new parameters added to filterbank and mfcc (gh-206) * python: start documenting module (gh-73, debian #480018), improve build for win-amd64 (gh-154, gh-199, gh-208) * fixes: prevent crash when using fft sizes unsupported by vDSP (gh-207), prevent saturation when down-mixing a multi-channel source (avcodec/ffmpeg) [ Fixes ] * avcodec: prevent saturation when down-mixing a multi-channel source, emit a warning if compiling against avutil < 53 (gh-137), wrap long lines * examples/: avoid hiding global and unreachable code * fft: limit to r*2*n sizes, with r in [1, 3, 5, 15] (vDSP only) (gh-207) * fft: fix reconstruction for odd sizes (fftw only) * pvoc: add missing implementations for aubio_pvoc_get_hop/win * mathutils: increase ln(2) precision of in freqtomidi/miditofreq * wavetable: stop sets playing to 0, add dummy implementation for _load [ New features ] * src/musicutils.h: new aubio_meltohz, aubio_hztomel, with _htk versions * src/spectral/filterbank.h: new set_mel_coeffs, set_mel_coeffs_htk, set_power, and set_norm methods, improved set_triangle_bands * src/spectral/mfcc.h: new set_scale, set_power, set_norm, set_mel_coeffs, set_mel_coeffs_htk, set_mel_coeffs_slaney * src/mathutils.h: new fvec_mul * src/notes: new option release_drop to prevent missing note-offs (gh-203) [ Python module ] * fix: rounding to nearest integer in midi2note and freq2note * general: supports code generation of setters with none or multiple parameters * documentation: add docstrings do fvec, cvec, source, sink, pvoc, frequency conversion and level detection routines (gh-73, debian #480018) * slicing: improve and document slice_source_at_stamps * module: new note2freq function, recover error log when raising exceptions on failed set_ methods, prevent cyclic import, coding style improvements * demos: improve coding style, fix bpm_extract arguments * MANIFEST.in: exclude *.pyc, improve patterns [ Documentation ] * doc/: use sphinx autodoc to load docstrings from aubio module, reorganize python module documentation, add a note about double precision, use https when possible * src/spectral/: update Auditory Toolbox url, update copyright year [ Tools ] * aubionotes: add --release-drop option * aubio: add --release-drop and --silence options to `aubio notes`, workaround for -V to really show version (py2) * aubiocut: add option --create-first to always create first slice [ Tests ] * tests/, python/tests: add tests for new methods, check source channel down-mix, improve coverage [ Build system ] * Makefile: disable docs when measuring coverage, add branch coverage option, add coverage_zero_counters target, improve html report * waf: update to 2.0.12, improve wscript style, prevent shipping some generated files * python: always show compiler warnings when pre-processing headers, workaround to fix code generation for win-amd64 (gh-154, gh-199, gh-208). * continuous integration: add azure pipelines, update and improve configurations for appveyor, circleci, and travis. 2018-09-22 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.7 * src/spectral/dct.h: add dct type II object with optimised versions * src/io/, src/notes/, src/pitch: prevent crashes on corrupted files * examples/: fix jack midi output, improve messages when jack disabled * python/: add dct support, minor bug fixes tests and demos * wscript: improve support for BLAS/ATLAS [ Library fixes ] * src/pitch/pitchyinfft.c: fix out of bound read when samplerate > 50kHz thanks to @fCorleone (closes #189, CVE-2018-14523, debian #904906) * src/notes/notes.c: bail out if pitch creation failed (see #188) * src/io/source_wavread.c: - also exit if samplerate is negative (closes #188, CVE-2018-14522, debian #904907) - add some input validation (closes #148 and #158, CVE-2017-17054, debian #883355) * src/io/source_avcodec.c: - give up if resampling context failed opening (see #137, closes #187, CVE-2018-14521, debian #904908) - give up reading file if number of channel changes during stream (closes #137, CVE-2017-17554, debian #884237) - make sure libavutil > 52 before checking avFrame->channels (see #137) - fix build with ffmpeg 4.0, thanks to @jcowgill (closes #168, #173) - avoid deprecated call for ffmpeg >= 4.0 * src/onset/onset.c: add dummy default parameters for wphase (closes #150) [ Tools ] * examples/parse_args.h: hide jack options if not available, improve error message (closes #182) * examples/utils.h: process_block returns void * examples/utils.c: fix examples failing to send more than one JACK midi event per frame, thanks to @cyclopsian (closes #201) [ New features ] * src/spectral/dct.h: add dct type II object with implementation factory * src/spectral/dct_plain.c: add plain dct implementation * src/spectral/dct_ooura.c: add ooura implementation * src/spectral/dct_fftw.c: add fftw implementation * src/spectral/dct_ipp.c: add ipp version * src/spectral/dct_accelerate.c: add vdsp/accelerate dct * tests/src/spectral/test-dct.c: check reconstruction works * src/spectral/mfcc.c: use new dct to compute mfcc [ Library internals ] * src/aubio_priv.h: avoid hard-coded undefs, split BLAS and ATLAS support, add vdsp scalar add and multiply [ Build system ] * wscript: - add options to disable examples and tests - detect includes for openblas/libblas/atlas * scripts/get_waf.sh: bump to 2.0.11, verify signature if gpg available * python/lib/gen_external.py: pass '-x c' to emcc only [ Python ] * python/lib/gen_code.py: add support for rdo methods * python/tests/test_dct.py: add tests for new dct * python/demos/demo_pitch_sinusoid.py: use // to yield an integer, fixing demo on py3, thanks to @ancorcruz (closes #176) * python/ext/py-musicutils.*: add shift(fvec) and ishift(fvec) * python/tests/test_fvec_shift.py: add tests for shift() and ishift() * python/lib/aubio/cmd.py: fix typo in comment [ Documentation ] * README.md, doc/statuslinks.rst: use latest for commits-since * examples/parse_args.h: add yinfast to pitch algorithms * doc/requirements.rst: add some blas documentation * doc/requirements.rst: split media/optimisation libraries * doc/develop.rst: fixed spelling error, thanks to Jon Williams (closes #161) * doc/aubio{pitch,notes}.txt: add yinfast to list of pitch methods [ Continuous integration ] * .travis.yml: remove xcode8.2 builds, group osx, add alias pip=pip2 * .appveyor.yml: upgrade pip first, always use python -m pip 2017-10-02 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.6 * src/spectral/fft.c, src/*.c: add support for Intel IPP (many thanks to Eduard Mueller) * wscript: add support for emscripten (thanks to Martin Hermant) * src/pitch/pitchyinfast.h: new fast method to compute YIN algorithm * src/pitch/pitchyin*.c: improve confidence measure, making sure its value corresponds to the selected period (thanks to Eduard Mueller) * python/lib/aubio/cmd.py: add `quiet`, `cut`, and `help` subcommands [ Library ] * src/aubio_priv.h: add missing aubio_vDSP_vclr (Eduard Mueller) * src/io/source_avcodec.c: improve error message, prevent un-opened bracket, no declaration after statements for older compilers, avoid unused variable * src/mathutils.c: prevent segfault with Accelerate.framework (closes #58, closes #102) * src/spectral/phasevoc.h: add aubio_pvoc_set_window to change the windowing function * src/mathutils.c: add window type `ones` (no windowing) [ Python ] * python/demos/demo_tapthebeat.py: add a real-time example to play beats using pyaudio * python/lib/gen_external.py: improve parsing and syntax, use results in emscripten build (Martin Hermant) * python/lib/aubio/cmd.py: add option `-u` to `aubio pitch`, improve error messages, add `quiet` subcommand (closes #124), improve syntax, add some documentation, add `cut` and `help` subcommand, add silence and time format options * python/lib/aubio/cut.py: upgrade to argparse, set samplerate as needed * python/demos/demo_yin_compare.py: add comparison of yin implementations * python/demos/demo_wav2midi.py: add an example to create a midi from a sound file using mido (closes: #134) * python/demos/demo_bpm_extract.py: use argparse, use beats_to_bpm function * python/ext/py-cvec.c: fix support for pypy by changing setters to return a negative value on error (closes #17) [ Documentation ] * src/tempo/beattracking.h: fix typo (thanks to Hannes Fritz) * doc/requirements.rst: fix broken link (thanks to @ssj71, closes #99) * doc/aubiomfcc.txt: fix typo in 'coefficients' [ Tests ] * python/tests/tests_aubio_{cmd,cut}.py: add basic tests * python/tests/test_filterbank*.py: ignore UserWarnings, clean-up, improve get_coeff tests [ Build system ] * wscript: add support for emscripten, see scripts/build_emscripten * scripts/get_waf.sh: update waf to 2.0.1, build waf from source tarball * scripts/build_emscripten: update to build aubio.js * Makefile: add coverage and coverage_report targets, run tests once [ Continuous integration ] * .travis.yml: add coverage report on osx * .appveyor.yml: use msvc 14.0 (VS 2015) and scripts/get_waf.sh * .coveragerc: add minimal python coverage configuration 2017-04-10 Paul Brossier <piem@aubio.org> [Overview] * VERSION: bump to 0.4.5 * src/io/source_avcodec.c: add support for libswresample * aubio: new python command line tool to extract information * src/onset/onset.c: add spectral whitening and compression, improve default parameters * this_version.py: use centralized script to get current version, adding git sha when building from git repo (thanks to MartinHN) [Interface] * src/spectral/awhithening.h: add adaptive whitening * src/{cvec,mathutils,musicutils}.h: add cvec_logmag, fvec_logmag, and fvec_push * src/onset/onset.h: add aubio_onset_set_default_parameters to load optimal parameters of each novelty function, _{set,get}_compression and _{set,get}_awhitening to turn on/off compression and adaptive whitening * src/spectral/specdesc.h: add weighted phase [Library] * src/onset/onset.c: improve default onset parameters (thanks to @superbock for access to his evaluation database), see commit dccfad2 for more details * src/pitch/pitch.c: avoid segfault when using invalid parameters * src/temporal/biquad.c: fix biquad parameters initialization (thanks to @jurlhardt) [Tools] * examples/aubio{onset,track}.c: add options --miditap-note and --miditap-velo to set which midi note is triggered at onset/beat (thanks to @tseaver) * examples/aubioonset.c: show actual parameters in verbose mode * examples/utils.c: improve memory usage to emit midi notes [Python] * python/ext/py-source.c: add with (PEP 343) and iter (PEP 234) interface * python/ext/py-sink.c: add with interface (PEP 343) * python/lib/aubio/cmd.py: new `aubio` command line tool * python/lib/aubio/cut.py: moved from python/scripts/aubiocut [Documentation] * doc/*.rst: reorganize and improve sphinx manual * doc/*.txt: update manpages, add simple manpage for aubio command line * doc/full.cfg: derive from doc/web.cfg * README.md: simplify and add contribute information [Build system] * wscript: prefer libswresample over libavsamplerate when available, use current version in manpages, doxygen, and sphinx, update to newest waf * setup.py: use entry_points console_scripts to generate scripts, use centralized version from this_version.py, clean up * python/lib/moresetuptools.py: detect if libswresample is available 2017-01-08 Paul Brossier <piem@aubio.org> [ Overview ] * VERSION: bump to 0.4.4 * src/utils/log.h: new function to redirect log, error, and warnings * python/: AUBIO_ERR raises python exception, AUBIO_WRN to emit py warning * doc/: add some documentation, fix errors in manpages * wscript: new rules to build 'manpages', 'doxygen', and 'sphinx', new --build-type=<release|debug> option (thanks to Eduard Mueller) * src/notes/notes.h: add minioi and silence methods * examples/: add --minioi (minimum inter-onset interval) option * src/pitch/pitchyin.c: improve msvc compiler optimisations (thanks to Eduard Mueller) * python/, src/: improve error messages, fix minor memory leaks * src/io/source_avcodec.c: improve compatibility with latest ffmpeg and with older libav/ffmpeg versions * python/demos/: new demos to capture microphone in real time [ Interface] * src/aubio.h: include utils/log.h * src/utils/log.h: add new aubio_log_set_function to redirect log messages * src/notes/notes.h: add aubio_notes_{get,set}_minioi_ms, add _{get,set}_silence methods [ Library ] * src/aubio_priv.h: add AUBIO_INF to print to stdout with header, use new logging function, add ATAN alias, add stdarg.h, move #include "config.h" * src/{fmat,fvec}.c: avoid integer division * src/pitch/pitchyin.c: [msvc] help compiler to optimize aubio_pitchyin_do by giving it addresses for all arrays which are referenced in inner loops, thanks to Eduard Mueller. * src/pitch/pitch.c: declare internal functions as static, fail on wrong method, warn on wrong unit, improve error messages, fix error string * src/spectral/specdesc.c: return NULL if wrong mode asked, remove trailing spaces * src/onset/onset.c: return null and clean-up if new_aubio_specdesc failed, fix error message * src/notes/notes.c: use midi note to store pitch candidate, round to nearest note, add a variable to define precision, fix out-of-bound write, fix unset silence_threshold, fix error message * src/spectral/ooura_fft8g.c: add cast to avoid conversion warnings, prefix public function with aubio_ooura_ to avoid with other apps using ooura (e.g. puredata), make internal functions static, * src/spectral/fft.c: add message about fftw3 being able to do non-power of two sizes, make calls to fftw_destroy_plan thread-safe, use prefixed aubio_ooura_rdft * src/spectral/phasevoc.c: fix error string * src/temporal/resampler.c: throw an error when using libsamplerate with doubles * src/io/ioutils.h: add functions to check samplerate and channels, use in sink_*.c * src/io/source.c: add error message when aubio was compiled with no source, only show error message from last child source_ * src/io/source_avcodec.c: call avformat_free_context after avformat_close_input, keep a reference to packet to remove it when closing file, avoid deprecation warnings with ffmpeg 3.2, add backward compatibility for libavcodec55, fix for old libavcodec54, use AV_SAMPLE_FMT_DBL when compiling with HAVE_AUBIO_DOUBLE, fix missing samples in eof block, avoid function calls before declarations, improve error messages, replace with new context before closing old one, make sure s->path is set to null * src/io/{source_wavread,sink_wavwrite}.c: declare internal functions as static * src/io/source_wavread.c: fix bytes_read for JUNK headers, improve error messages, initialize buffer, skip chunks until data is found, or abort, skip junk chunk * src/io/source_sndfile.c: add support for multi-channel resampling, set handle to null after sucessful close, add missing floor in ratio comparison, improve formatting * src/io/sink.c: only show error message from last child sink_ * src/io/sink_apple_audio.c: avoid crash on empty file name * src/io/sink_sndfile.c: improve error message * src/io/sink_{sndfile,wavwrite}.c: use AUBIO_MAX_CHANNELS, fix error message [ Documentation ] * README.md: update copyright dates, use https * src/aubio.h: add some links to examples, use https * src/pitch/pitch.h: add aubio_pitch_get_tolerance, add basic description of unit modes * src/notes/notes.h: add doxygen header * src/spectral/fft.h: strip example path * doc/*.rst: improve sphinx documentation * doc/android.rst: add reference to it scripts/build_android * doc/debian_packages.rst: added page on debian packages * doc/python_module.rst: add demo_source_simple.py, add note on pip, add `print(aubio.version)` * doc/cli.rst: include command line manpages * doc/cli_features.rst: add matrix of command line features * doc/requirements.rst: add a note about --notests (closes #77), document --msvc options, improve description of options * doc/download.rst: added page on download * doc/installing.rst: update * doc/xcode_frameworks.rst: added page on xcode frameworks * doc/**: use https://aubio.org * doc/conf.py: use pyramid theme, update copyright, remove hardcoded path * doc/web.cfg: exclude ioutils from doc * doc/aubionotes.txt: document -M option (see #18), * doc/aubioonset.txt: add documentation for -M, --minioi, improve threshold description (thanks to Peter Parker), fix typo (onset, not pitch) * doc/aubio*.txt: document -T/--timeformat option [ Build ] * Makefile: add a brief intro, avoid offline operations, add html and dist targets, add rules for documentation, simplify listing, avoid offline operations, bump waf to 1.9.6, check for waf before clean, chmod go-w waflib, improve clean, use pip to install, factorise pip options, generate more test sounds, improve test_python and test_pure_python, pass build_ext in test_pure_python{,_wheel}, quieten uninstall_python if already uninstalled, improve test targets, use bdist_wheel in test_pure_python, build_ext only for --enable-double, verbose waf rules, add cleanwaf * wscript: added debug/release build type configurations release (default) enables optimizations, debug symbols are enabled in both configurations, thanks to Eduard Mueller. * wscript: add options to disable source_wavread/sink_wavwrite, add check for stdarg.h, new rules 'manpages', 'sphinx', and 'doxygen' to build documentation, add version to sphinx and manpages, disable libsamplerate if double precision enabled (libsamplerate only supports float), fix typos, remove trailing spaces, improve tarball creation (./waf dist), remove full.cfg from tarball, prepend to CFLAGS to honor user cflags * wscript, src/wscript_build: improve install locations using DATAROOTDIR, MANDIR, INCLUDEDIR * wscript: default to no atlas for now * src/wscript_build: always build static library * scripts/build_android: add an example script to build aubio on android, [ Tools ] * examples/aubionotes.c: use new notes, set minioi, send last note off when needed, add warning for missing options * examples/aubioonset.c: add minioi option, in seconds