Changeset 1dfe409
- Timestamp:
- Mar 31, 2019, 11:12:40 PM (6 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/crepe, fix/ffmpeg5, master
- Children:
- 76b6dd3
- Parents:
- 08246ee (diff), f55630c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 1 deleted
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
.travis.yml
r08246ee r1dfe409 9 9 os: linux 10 10 compiler: gcc 11 env: WAFOPTS="--build-type=debug" 11 12 - python: 2.7 12 13 os: linux -
ChangeLog
r08246ee r1dfe409 1 2018-12-19 Paul Brossier <piem@aubio.org> 2 3 [ Overview ] 4 5 * VERSION: bump to 0.4.9 6 * library: improve stability, fixing potential crashes and memory leaks on 7 invalid arguments; improve library messages and reporting of system errors 8 * tests/: major clean-up, check return codes, increase code coverage 9 * python/tests/: switch to pytest (closes gh-163), check emitted warnings 10 * python/: add pages to manual with brief descriptions of classes 11 12 [ Fixes ] 13 14 * security: improve arguments validation in new_aubio_filterbank (prevent 15 possible null-pointer dereference on invalid n_filters, CVE-2018-19801), 16 new_aubio-tempo (prevent possible buffer overflow, CVE-2018-19800), and 17 new_aubio_onset (prevent null-pointer dereference, CVE-2018-19802). Thanks 18 to Guoxiang Niu (@niugx), from the EaglEye Team for reporting these issues. 19 * tempo: fix delay_ms methods 20 * filterbank: fix aubio_filterbank_get_power (thanks to @romanbsd who 21 also noticed this issue) 22 * dct: creation fail on negative sizes or invalid accelerate radix, 23 fix typo in error and warning messages, prevent possible memory leak 24 * pitch: prevent null pointer dereference in yinfast, comment out unused 25 functions in mcomb and yin, prevent possible leak in specacf 26 * mfcc: always use dct module, strengthen input validation, change 27 get_{scale,power} to return smpl_t 28 * specdesc: improve error message 29 * notes: prevent null pointer dereference 30 * hist: add validation for size argument, prevent possible leak 31 * awhitening: use shortest length available (closes gh-216) 32 * io: add macros to display system errors, add helpers to validate input 33 arguments of source and sink methods, always clean-up after failure 34 * source: validate input sizes to prevent invalid reads 35 * apple_audio: use native format conversions in source and sink, prevent 36 possible apple_audio crash on empty string, get_duration returns 0 on failure 37 * ffmpeg/avcodec: prevent deprecation warnings, read after close, and skipped 38 samples warnings, improve warning messages, only show a warning when 39 swr_convert failed, prevent possible memory leak when closing swr context 40 * wavwrite: copy to all channels if needed, check fseek and fwrite return 41 values, call fflush in open to return failure on full disk-system 42 * source_sndfile: fix reading sizes when resampling, set error message when 43 reading after close 44 * aubio_priv.h: include blas first (see gh-225), add STRERROR macros 45 46 [ Python ] 47 48 * documentation: add pages to manual, add minimal docstrings for fft, 49 digital_filter, and generated objects, improve specdesc documentation 50 * filterbank: add get_norm/power documentation 51 * source: take a copy of the last frame before resizing it, raise an 52 exception when read failed, fix compilation warning 53 * fixes: remove unneeded check convert with PyFloat_FromDouble or 54 PyFloat_FromDouble, check if sink, digital_filter, were created before 55 deleting 56 57 [ Tests ] 58 59 * python/tests/: switch to pytest (slightly slower than nose2 but better at 60 capturing warnings and parametrization), improve coding style and coverage. 61 Tests should now be run with `pytest`. 62 * tests/: Each test program in C must now return 0, otherwise the test will 63 fail. Examples have been modified to run themselves on a test audio file, 64 but can still be run with arguments. Tests for `source` and `sink` have been 65 factorised, and some code cleaning. A python script is used to create a 66 test sound file. Tested on linux, macos, and windows, improvements to 67 test-mfcc (closes gh-219). 68 69 [ Build system ] 70 71 * waf: upgrade to 2.0.14, check the return code of each test program, 72 update rules to build manual and api documentation into build/, check 73 for errno.h 74 * osx: use -Os in scripts/build_apple_frameworks 75 * Makefile: improve coverage reports 76 * appveyor, travis, circleci: switch to pytest, set one travis config to use 77 sndfile only 78 * travis: add py3.6, drop py3.4, use py3.5 to test debug mode 79 * azure: add basic configuration 80 1 81 2018-11-21 Paul Brossier <piem@aubio.org> 2 82 -
README.md
r08246ee r1dfe409 4 4 [![Travis build status](https://travis-ci.org/aubio/aubio.svg?branch=master)](https://travis-ci.org/aubio/aubio "Travis build status") 5 5 [![Appveyor build status](https://img.shields.io/appveyor/ci/piem/aubio/master.svg)](https://ci.appveyor.com/project/piem/aubio "Appveyor build status") 6 [![Landscape code health](https://landscape.io/github/aubio/aubio/master/landscape.svg?style=flat)](https://landscape.io/github/aubio/aubio/master "Landscape code health")7 6 [![Commits since last release](https://img.shields.io/github/commits-since/aubio/aubio/latest.svg)](https://github.com/aubio/aubio "Commits since last release") 8 7 -
VERSION
r08246ee r1dfe409 1 1 AUBIO_MAJOR_VERSION=0 2 AUBIO_MINOR_VERSION= 43 AUBIO_PATCH_VERSION= 92 AUBIO_MINOR_VERSION=5 3 AUBIO_PATCH_VERSION=0 4 4 AUBIO_VERSION_STATUS='~alpha' 5 5 LIBAUBIO_LT_CUR=5 -
azure-pipelines.yml
r08246ee r1dfe409 4 4 - job: linux 5 5 pool: 6 vmImage: ' Ubuntu16.04'6 vmImage: 'ubuntu-16.04' 7 7 steps: 8 8 - script: | … … 14 14 - job: windows 15 15 pool: 16 vmI Mage: 'VS2017-Win2016'16 vmImage: 'vs2017-win2016' 17 17 steps: 18 18 - script: | … … 25 25 - job: macos 26 26 pool: 27 vmI Mage: macOS-10.1327 vmImage: 'macos-10.13' 28 28 steps: 29 29 - script: | -
doc/statuslinks.rst
r08246ee r1dfe409 10 10 :alt: Appveyor build status 11 11 12 .. image:: https://landscape.io/github/aubio/aubio/master/landscape.svg?style=flat13 :target: https://landscape.io/github/aubio/aubio/master14 :alt: Landscape code health15 16 12 .. image:: https://readthedocs.org/projects/aubio/badge/?version=latest 17 13 :target: https://aubio.readthedocs.io/en/latest/?badge=latest -
python/demos/demo_wav2midi.py
r08246ee r1dfe409 64 64 if new_note[2] > 0: 65 65 track.append(Message('note_off', note=int(new_note[2]), 66 velocity=127, time= 0)66 velocity=127, time=delta) 67 67 ) 68 68 track.append(Message('note_on', -
python/ext/py-source.c
r08246ee r1dfe409 582 582 } else if (PyLong_AsLong(size) > 0) { 583 583 // short read, return a shorter array 584 PyArrayObject *shortread = (PyArrayObject*)PyTuple_GetItem(done, 0); 584 PyObject *vec = PyTuple_GetItem(done, 0); 585 // take a copy to prevent resizing internal arrays 586 PyArrayObject *shortread = (PyArrayObject*)PyArray_FROM_OTF(vec, 587 NPY_NOTYPE, NPY_ARRAY_ENSURECOPY); 585 588 PyArray_Dims newdims; 586 589 PyObject *reshaped; … … 595 598 reshaped = PyArray_Newshape(shortread, &newdims, NPY_CORDER); 596 599 Py_DECREF(shortread); 600 Py_DECREF(vec); 597 601 return reshaped; 598 602 } else { -
python/lib/moresetuptools.py
r08246ee r1dfe409 69 69 for define_macro in ['HAVE_STDLIB_H', 'HAVE_STDIO_H', 70 70 'HAVE_MATH_H', 'HAVE_STRING_H', 71 'HAVE_ C99_VARARGS_MACROS',71 'HAVE_ERRNO_H', 'HAVE_C99_VARARGS_MACROS', 72 72 'HAVE_LIMITS_H', 'HAVE_STDARG_H', 73 73 'HAVE_MEMCPY_HACKS']: -
python/tests/test_sink.py
r08246ee r1dfe409 4 4 from aubio import fvec, source, sink 5 5 from utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path 6 from _tools import parametrize, skipTest, assert_raises 6 from utils import parse_file_samplerate 7 from _tools import parametrize, skipTest, assert_raises, assert_warns 7 8 8 9 list_of_sounds = list_all_sounds('sounds') … … 61 62 @parametrize('hop_size, samplerate, path', all_params) 62 63 def test_read_and_write(self, hop_size, samplerate, path): 64 orig_samplerate = parse_file_samplerate(soundfile) 63 65 try: 64 f = source(path, samplerate, hop_size) 66 if orig_samplerate is not None and orig_samplerate < samplerate: 67 # upsampling should emit a warning 68 with assert_warns(UserWarning): 69 f = source(soundfile, samplerate, hop_size) 70 else: 71 f = source(soundfile, samplerate, hop_size) 65 72 except RuntimeError as e: 66 73 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' … … 79 86 @parametrize('hop_size, samplerate, path', all_params) 80 87 def test_read_and_write_multi(self, hop_size, samplerate, path): 88 orig_samplerate = parse_file_samplerate(soundfile) 81 89 try: 82 f = source(path, samplerate, hop_size) 90 if orig_samplerate is not None and orig_samplerate < samplerate: 91 # upsampling should emit a warning 92 with assert_warns(UserWarning): 93 f = source(soundfile, samplerate, hop_size) 94 else: 95 f = source(soundfile, samplerate, hop_size) 83 96 except RuntimeError as e: 84 97 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})' -
python/tests/test_source.py
r08246ee r1dfe409 4 4 from numpy.testing import TestCase, assert_equal 5 5 from aubio import source 6 from utils import list_all_sounds 6 from utils import list_all_sounds, parse_file_samplerate 7 7 import unittest 8 from _tools import parametrize, assert_raises, assert_equal, skipTest 8 from _tools import assert_raises, assert_equal, assert_warns 9 from _tools import parametrize, skipTest 9 10 10 11 list_of_sounds = list_all_sounds('sounds') … … 23 24 24 25 _debug = False 26 25 27 26 28 class Test_aubio_source_test_case(TestCase): … … 75 77 @parametrize('hop_size, samplerate, soundfile', all_params) 76 78 def test_samplerate_hopsize(self, hop_size, samplerate, soundfile): 79 orig_samplerate = parse_file_samplerate(soundfile) 77 80 try: 78 f = source(soundfile, samplerate, hop_size) 81 if orig_samplerate is not None and orig_samplerate < samplerate: 82 # upsampling should emit a warning 83 with assert_warns(UserWarning): 84 f = source(soundfile, samplerate, hop_size) 85 else: 86 f = source(soundfile, samplerate, hop_size) 79 87 except RuntimeError as e: 80 88 err_msg = 'failed opening with hop_s={:d}, samplerate={:d} ({:s})' -
python/tests/utils.py
r08246ee r1dfe409 2 2 3 3 import os 4 import re 4 5 import glob 5 6 import numpy as np … … 78 79 total_files += 1 79 80 return total_files 81 82 def parse_file_samplerate(soundfile): 83 samplerate = None 84 # parse samplerate 85 re_sr = re.compile(r'/([0-9]{4,})Hz_.*') 86 match_samplerate = re_sr.findall(soundfile) 87 if match_samplerate: 88 samplerate = int(match_samplerate[0]) 89 else: 90 import warnings 91 warnings.warn(UserWarning("could not parse samplerate for {:s}" 92 .format(soundfile))) 93 return samplerate -
scripts/get_waf.sh
r08246ee r1dfe409 4 4 #set -x 5 5 6 WAFVERSION=2.0.1 36 WAFVERSION=2.0.14 7 7 WAFTARBALL=waf-$WAFVERSION.tar.bz2 8 8 WAFURL=https://waf.io/$WAFTARBALL -
src/aubio_priv.h
r08246ee r1dfe409 63 63 #endif 64 64 65 #ifdef HAVE_ERRNO_H 66 #include <errno.h> 67 #endif 68 65 69 #ifdef HAVE_LIMITS_H 66 70 #include <limits.h> // for CHAR_BIT, in C99 standard … … 71 75 #endif 72 76 73 #if defined(HAVE_ACCELERATE) 74 #define HAVE_ATLAS 1 75 #define HAVE_BLAS 1 76 #include <Accelerate/Accelerate.h> 77 #elif defined(HAVE_ATLAS_CBLAS_H) 78 #elif defined(HAVE_BLAS) 77 #if defined(HAVE_BLAS) // --enable-blas=true 78 // check which cblas header we found 79 79 #if defined(HAVE_ATLAS_CBLAS_H) 80 80 #define HAVE_ATLAS 1 … … 84 84 #elif defined(HAVE_CBLAS_H) 85 85 #include <cblas.h> 86 #endif 87 #endif 88 89 #ifdef HAVE_ACCELERATE 86 #elif !defined(HAVE_ACCELERATE) 87 #error "HAVE_BLAS was defined, but no blas header was found" 88 #endif /* end of cblas includes */ 89 #endif 90 91 #if defined(HAVE_ACCELERATE) 92 // include accelerate framework after blas 93 #define HAVE_ATLAS 1 94 #define HAVE_BLAS 1 90 95 #include <Accelerate/Accelerate.h> 96 91 97 #ifndef HAVE_AUBIO_DOUBLE 92 98 #define aubio_vDSP_mmov vDSP_mmov … … 331 337 #endif 332 338 339 #ifdef HAVE_C99_VARARGS_MACROS 340 #define AUBIO_STRERR(...) \ 341 char errorstr[256]; \ 342 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); \ 343 AUBIO_ERR(__VA_ARGS__) 344 #else 345 #define AUBIO_STRERR(format, args...) \ 346 char errorstr[256]; \ 347 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); \ 348 AUBIO_ERR(format, ##args) 349 #endif 350 333 351 /* handy shortcuts */ 334 352 #define DB2LIN(g) (POW(10.0,(g)*0.05f)) -
src/io/sink.c
r08246ee r1dfe409 216 216 217 217 void del_aubio_sink(aubio_sink_t * s) { 218 AUBIO_ASSERT(s);218 //AUBIO_ASSERT(s); 219 219 if (s && s->s_del && s->sink) 220 220 s->s_del((void *)s->sink); -
src/io/sink_wavwrite.c
r08246ee r1dfe409 28 28 #include "io/sink_wavwrite.h" 29 29 #include "io/ioutils.h" 30 31 #include <errno.h>32 30 33 31 #define MAX_SIZE 4096 … … 168 166 s->fid = fopen((const char *)s->path, "wb"); 169 167 if (!s->fid) { 170 char errorstr[256]; 171 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); 172 AUBIO_ERR("sink_wavwrite: could not open %s (%s)\n", s->path, errorstr); 168 AUBIO_STRERR("sink_wavwrite: could not open %s (%s)\n", s->path, errorstr); 173 169 goto beach; 174 170 } … … 216 212 217 213 // fwrite(*, *, 1, s->fid) was called 13 times, check success 218 if (written != 13 ) {219 char errorstr[256];220 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr));221 AUBIO_WRN("sink_wavwrite: writing header to %s failed, expected %d"222 " write but got only %d (%s)\n", s->path, 13, written, errorstr);214 if (written != 13 || fflush(s->fid)) { 215 AUBIO_STRERR("sink_wavwrite: writing header to %s failed" 216 " (wrote %d/%d, %s)\n", s->path, written, 13, errorstr); 217 fclose(s->fid); 218 s->fid = NULL; 223 219 return AUBIO_FAIL; 224 220 } … … 247 243 248 244 if (written_frames != write) { 249 char errorstr[256]; 250 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); 251 AUBIO_WRN("sink_wavwrite: trying to write %d frames to %s, but only %d" 245 AUBIO_STRERR("sink_wavwrite: trying to write %d frames to %s, but only %d" 252 246 " could be written (%s)\n", write, s->path, written_frames, errorstr); 253 247 } … … 298 292 written += fwrite(write_little_endian(data_size, buf, 4), 4, 1, s->fid); 299 293 if (written != 2 || err != 0) { 300 char errorstr[256]; 301 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); 302 AUBIO_WRN("sink_wavwrite: updating header of %s failed, expected %d" 294 AUBIO_STRERR("sink_wavwrite: updating header of %s failed, expected %d" 303 295 " write but got only %d (%s)\n", s->path, 2, written, errorstr); 304 296 } 305 297 // close file 306 298 if (fclose(s->fid)) { 307 char errorstr[256]; 308 AUBIO_STRERROR(errno, errorstr, sizeof(errorstr)); 309 AUBIO_ERR("sink_wavwrite: Error closing file %s (%s)\n", s->path, errorstr); 299 AUBIO_STRERR("sink_wavwrite: Error closing file %s (%s)\n", s->path, errorstr); 310 300 } 311 301 s->fid = NULL; -
src/io/source.c
r08246ee r1dfe409 139 139 140 140 void del_aubio_source(aubio_source_t * s) { 141 AUBIO_ASSERT(s);141 //AUBIO_ASSERT(s); 142 142 if (s && s->s_del && s->source) 143 143 s->s_del((void *)s->source); -
src/io/source_avcodec.c
r08246ee r1dfe409 31 31 #endif 32 32 #include <libavutil/opt.h> 33 #include <stdlib.h>34 33 35 34 // determine whether we use libavformat from ffmpeg or from libav … … 121 120 uint_t samplerate, uint_t hop_size) { 122 121 aubio_source_avcodec_t * s = AUBIO_NEW(aubio_source_avcodec_t); 123 AVFormatContext *avFormatCtx = s->avFormatCtx;124 AVCodecContext *avCodecCtx = s->avCodecCtx;125 AVFrame *avFrame = s->avFrame;122 AVFormatContext *avFormatCtx = NULL; 123 AVCodecContext *avCodecCtx = NULL; 124 AVFrame *avFrame = NULL; 126 125 sint_t selected_stream = -1; 127 126 #if FF_API_LAVF_AVCTX … … 465 464 (const uint8_t **)avFrame->data, in_samples); 466 465 #endif /* HAVE_AVRESAMPLE || HAVE_SWRESAMPLE */ 467 if (out_samples < =0) {468 AUBIO_WRN("source_avcodec: no sample found while converting frame (%s)\n",469 s->path );466 if (out_samples < 0) { 467 AUBIO_WRN("source_avcodec: error while resampling %s (%d)\n", 468 s->path, out_samples); 470 469 goto beach; 471 470 } … … 474 473 475 474 beach: 476 s->avFormatCtx = avFormatCtx;477 s->avCodecCtx = avCodecCtx;478 s->avFrame = avFrame;479 #if defined(HAVE_AVRESAMPLE) || defined(HAVE_SWRESAMPLE)480 s->avr = avr;481 #endif /* HAVE_AVRESAMPLE || HAVE_SWRESAMPLE */482 s->output = output;483 484 475 av_packet_unref(&avPacket); 485 476 } … … 629 620 #ifdef HAVE_AVRESAMPLE 630 621 avresample_close( s->avr ); 622 av_free ( s->avr ); 631 623 #elif defined(HAVE_SWRESAMPLE) 632 624 swr_close ( s->avr ); 633 #endif 634 av_free ( s->avr ); 625 swr_free ( &s->avr ); 626 #endif 635 627 } 636 628 s->avr = NULL; -
src/io/source_sndfile.c
r08246ee r1dfe409 175 175 sf_count_t read_samples = aubio_sf_read_smpl (s->handle, s->scratch_data, 176 176 s->scratch_size); 177 uint_t read_length = read_samples / s->input_channels; 178 179 /* where to store de-interleaved data */ 180 smpl_t *ptr_data; 181 177 182 if (!s->handle) { 178 183 AUBIO_ERR("source_sndfile: could not read from %s (file was closed)\n", … … 182 187 } 183 188 184 uint_t read_length = read_samples / s->input_channels;185 186 /* where to store de-interleaved data */187 smpl_t *ptr_data;188 189 #ifdef HAVE_SAMPLERATE 189 190 if (s->ratio != 1) { … … 226 227 sf_count_t read_samples = aubio_sf_read_smpl (s->handle, s->scratch_data, 227 228 s->scratch_size); 229 uint_t read_length = read_samples / s->input_channels; 230 231 /* where to store de-interleaved data */ 232 smpl_t **ptr_data; 233 228 234 if (!s->handle) { 229 235 AUBIO_ERR("source_sndfile: could not read from %s (file was closed)\n", … … 233 239 } 234 240 235 uint_t read_length = read_samples / s->input_channels;236 237 /* where to store de-interleaved data */238 smpl_t **ptr_data;239 241 #ifdef HAVE_SAMPLERATE 240 242 if (s->ratio != 1) { -
src/io/source_wavread.c
r08246ee r1dfe409 28 28 #include "source_wavread.h" 29 29 30 #include <errno.h>31 32 30 #define AUBIO_WAVREAD_BUFSIZE 1024 33 31 34 #define SHORT_TO_FLOAT(x) (smpl_t)(x * 3.0517578125e-05)32 //#define SHORT_TO_FLOAT(x) (smpl_t)(x * 3.0517578125e-05) 35 33 36 34 struct _aubio_source_wavread_t { … … 101 99 s->fid = fopen((const char *)path, "rb"); 102 100 if (!s->fid) { 103 AUBIO_ ERR("source_wavread: Failed opening %s (System error: %s)\n", s->path, strerror(errno));101 AUBIO_STRERR("source_wavread: Failed opening %s (%s)\n", s->path, errorstr); 104 102 goto beach; 105 103 } … … 134 132 bytes_junk += read_little_endian(buf, 4); 135 133 if (fseek(s->fid, bytes_read + bytes_junk, SEEK_SET) != 0) { 136 AUBIO_ ERR("source_wavread: Failed opening %s (could not seek past JUNK Chunk: %s)\n",137 s->path, strerror(errno));134 AUBIO_STRERR("source_wavread: Failed opening %s (could not seek past JUNK Chunk: %s)\n", 135 s->path, errorstr); 138 136 goto beach; 139 137 } … … 262 260 bytes_junk += read_little_endian(buf, 4); 263 261 if (fseek(s->fid, bytes_read + bytes_junk, SEEK_SET) != 0) { 264 AUBIO_ ERR("source_wavread: could not seek past unknown chunk in %s (%s)\n",265 s->path, strerror(errno));262 AUBIO_STRERR("source_wavread: could not seek past unknown chunk in %s (%s)\n", 263 s->path, errorstr); 266 264 goto beach; 267 265 } … … 443 441 ret = fseek(s->fid, s->seek_start + pos * s->blockalign, SEEK_SET); 444 442 if (ret != 0) { 445 AUBIO_ ERR("source_wavread: could not seek %s at %d (%s)\n", s->path, pos, strerror(errno));443 AUBIO_STRERR("source_wavread: could not seek %s at %d (%s)\n", s->path, pos, errorstr); 446 444 return AUBIO_FAIL; 447 445 } … … 464 462 } 465 463 if (fclose(s->fid)) { 466 AUBIO_ ERR("source_wavread: could not close %s (%s)\n", s->path, strerror(errno));464 AUBIO_STRERR("source_wavread: could not close %s (%s)\n", s->path, errorstr); 467 465 return AUBIO_FAIL; 468 466 } -
tests/src/spectral/test-mfcc.c
r08246ee r1dfe409 34 34 aubio_mfcc_t *mfcc = 0; 35 35 36 fvec_t *in = new_fvec ( win_s); // input buffer37 cvec_t *fftgrain = new_cvec (win_s); // input buffer38 fvec_t *out = new_fvec (n_coeffs); // output coefficients36 fvec_t *in = new_fvec (hop_s); // phase vocoder input 37 cvec_t *fftgrain = new_cvec (win_s); // pvoc output / mfcc input 38 fvec_t *out = new_fvec (n_coeffs); // mfcc output 39 39 40 40 if (!in || !fftgrain || !out) { err = 1; goto failure; } -
wscript
r08246ee r1dfe409 146 146 ctx.check(header_name='math.h') 147 147 ctx.check(header_name='string.h') 148 ctx.check(header_name='errno.h') 148 149 ctx.check(header_name='limits.h') 149 150 ctx.check(header_name='stdarg.h') … … 650 651 ctx.excl += ' **/.cache' 651 652 ctx.excl += ' **/**.zip **/**.tar.bz2' 652 ctx.excl += ' **.tar.bz2 '653 ctx.excl += ' **.tar.bz2**' 653 654 ctx.excl += ' **/doc/full/* **/doc/web/*' 654 655 ctx.excl += ' **/doc/full.cfg' … … 662 663 ctx.excl += ' **/.DS_Store' 663 664 ctx.excl += ' **/.travis.yml' 664 ctx.excl += ' **/.landscape.yml'665 665 ctx.excl += ' **/.appveyor.yml' 666 666 ctx.excl += ' **/.circleci/*'
Note: See TracChangeset
for help on using the changeset viewer.