Changes in / [ed596f7:f9400d0]
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
azure-pipelines.yml
red596f7 rf9400d0 1 1 # configuration file for azure continuous integration 2 2 jobs: 3 4 3 - job: linux 5 4 pool: 6 5 vmImage: 'Ubuntu 16.04' 6 7 7 steps: 8 8 - script: | 9 9 make 10 10 displayName: 'make' 11 env:12 CFLAGS: -Werror13 14 11 - job: windows 15 12 pool: 16 13 vmIMage: 'VS2017-Win2016' 14 17 15 steps: 18 16 - script: | … … 26 24 pool: 27 25 vmIMage: macOS-10.13 26 28 27 steps: 29 28 - script: | … … 35 34 make 36 35 displayName: 'make' 37 env:38 CFLAGS: -Werror -
doc/about.rst
red596f7 rf9400d0 60 60 ------- 61 61 62 aubio is a `free <http s://www.debian.org/intro/free>`_ and `open source62 aubio is a `free <http://www.debian.org/intro/free>`_ and `open source 63 63 <http://www.opensource.org/docs/definition.php>`_ software; **you** can 64 64 redistribute it and/or modify it under the terms of the `GNU -
doc/aubiomfcc.txt
red596f7 rf9400d0 52 52 url: 53 53 54 http s://engineering.purdue.edu/~malcolm/interval/1998-010/ (see file mfcc.m)54 http://cobweb.ecn.purdue.edu/~malcolm/interval/1998-010/ (see file mfcc.m) 55 55 56 56 SEE ALSO -
doc/aubionotes.txt
red596f7 rf9400d0 7 7 aubionotes [[-i] source] 8 8 [-r rate] [-B win] [-H hop] 9 [-O method] [-t thres] [-d drop]9 [-O method] [-t thres] 10 10 [-p method] [-u unit] [-l thres] 11 11 [-T time-format] … … 69 69 loudest ones. A value of -90.0 would select all onsets. Defaults to -90.0. 70 70 71 -d, --release-drop Set the release drop threshold, in dB. If the level is72 found to drop more than this amount since the last note has started, the73 note will be turned-off. Defaults to 10.74 75 71 -T, --timeformat format Set time format (samples, ms, seconds). Defaults to 76 72 seconds. -
doc/conf.py
red596f7 rf9400d0 46 46 # General information about the project. 47 47 project = u'aubio' 48 copyright = u'201 8, Paul Brossier'48 copyright = u'2016, Paul Brossier' 49 49 50 50 # The version info for the project you're documenting, acts as replacement for -
doc/python_module.rst
red596f7 rf9400d0 80 80 .. _demo_filter.py: https://github.com/aubio/aubio/blob/master/python/demos/demo_filter.py 81 81 .. _python tests: https://github.com/aubio/aubio/blob/master/python/tests 82 -
examples/aubionotes.c
red596f7 rf9400d0 22 22 #define PROG_HAS_PITCH 1 23 23 #define PROG_HAS_ONSET 1 24 #define PROG_HAS_NOTES 125 24 #define PROG_HAS_SILENCE 1 26 25 #define PROG_HAS_JACK 1 … … 84 83 } 85 84 } 86 if (release_drop != 10.) {87 if (aubio_notes_set_release_drop (notes, release_drop) != 0) {88 errmsg ("failed setting notes release drop to %.2f\n",89 release_drop);90 }91 }92 85 93 86 examples_common_process((aubio_process_func_t)process_block, process_print); -
examples/parse_args.h
red596f7 rf9400d0 48 48 // more general stuff 49 49 extern smpl_t silence_threshold; 50 extern smpl_t release_drop;51 50 extern uint_t mix_input; 52 51 // midi tap … … 109 108 " a value in dB, for instance -70, or -100; default=-90\n" 110 109 #endif /* PROG_HAS_SILENCE */ 111 #ifdef PROG_HAS_NOTES112 " -d --release-drop select release drop threshold\n"113 " a positive value in dB; default=10\n"114 #endif115 110 " -T --time-format select time values output format\n" 116 111 " (samples, ms, seconds) default=seconds\n" … … 163 158 "s:" 164 159 #endif /* PROG_HAS_SILENCE */ 165 #ifdef PROG_HAS_NOTES166 "d:"167 #endif /* PROG_HAS_SILENCE */168 160 #ifdef PROG_HAS_OUTPUT 169 161 "mf" … … 201 193 {"silence", 1, NULL, 's'}, 202 194 #endif /* PROG_HAS_SILENCE */ 203 #ifdef PROG_HAS_NOTES204 {"release-drop", 1, NULL, 'd'},205 #endif /* PROG_HAS_NOTES */206 195 {"time-format", 1, NULL, 'T'}, 207 196 #ifdef PROG_HAS_OUTPUT … … 285 274 case 's': /* silence threshold */ 286 275 silence_threshold = (smpl_t) atof (optarg); 287 break;288 case 'd': /* release-drop threshold */289 release_drop = (smpl_t) atof (optarg);290 276 break; 291 277 case 'm': /* mix_input flag */ -
examples/utils.c
red596f7 rf9400d0 55 55 // more general stuff 56 56 smpl_t silence_threshold = -90.; 57 smpl_t release_drop = 10.;58 57 uint_t mix_input = 0; 59 58 -
python/demos/demo_bpm_extract.py
red596f7 rf9400d0 23 23 pass 24 24 else: 25 raise ValueError("unknown mode {:s}".format(params.mode))25 print("unknown mode {:s}".format(params.mode)) 26 26 # manual settings 27 27 if 'samplerate' in params: … … 70 70 parser.add_argument('-m', '--mode', 71 71 help="mode [default|fast|super-fast]", 72 dest="mode" , default='default')72 dest="mode") 73 73 parser.add_argument('sources', 74 nargs=' +',74 nargs='*', 75 75 help="input_files") 76 76 args = parser.parse_args() -
python/ext/aubiomodule.c
red596f7 rf9400d0 118 118 smpl_t output; 119 119 120 if (!PyArg_ParseTuple (args, 121 "" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, 122 &input, &samplerate, &fftsize)) { 120 if (!PyArg_ParseTuple (args, "|" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR , &input, &samplerate, &fftsize)) { 123 121 return NULL; 124 122 } … … 135 133 smpl_t output; 136 134 137 if (!PyArg_ParseTuple (args, 138 "" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, 139 &input, &samplerate, &fftsize)) { 135 if (!PyArg_ParseTuple (args, "|" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR , &input, &samplerate, &fftsize)) { 140 136 return NULL; 141 137 } … … 152 148 smpl_t output; 153 149 154 if (!PyArg_ParseTuple (args, 155 "" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, 156 &input, &samplerate, &fftsize)) { 150 if (!PyArg_ParseTuple (args, "|" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, &input, &samplerate, &fftsize)) { 157 151 return NULL; 158 152 } … … 169 163 smpl_t output; 170 164 171 if (!PyArg_ParseTuple (args, 172 "" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, 173 &input, &samplerate, &fftsize)) { 165 if (!PyArg_ParseTuple (args, "|" AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR AUBIO_NPY_SMPL_CHR, &input, &samplerate, &fftsize)) { 174 166 return NULL; 175 167 } -
python/ext/py-filterbank.c
red596f7 rf9400d0 95 95 if (self->vec.length != self->win_s / 2 + 1) { 96 96 PyErr_Format(PyExc_ValueError, 97 "input cvec has length %d, but f ilterbankexpects length %d",97 "input cvec has length %d, but fft expects length %d", 98 98 self->vec.length, self->win_s / 2 + 1); 99 99 return NULL; … … 140 140 if (err > 0) { 141 141 PyErr_SetString (PyExc_ValueError, 142 "error when running set_triangle_bands");142 "error when setting filter to A-weighting"); 143 143 return NULL; 144 144 } … … 159 159 if (err > 0) { 160 160 PyErr_SetString (PyExc_ValueError, 161 "error when running set_mel_coeffs_slaney");161 "error when setting filter to A-weighting"); 162 162 return NULL; 163 163 } -
python/lib/aubio/cmd.py
red596f7 rf9400d0 102 102 subparser.add_input() 103 103 subparser.add_buf_hop_size() 104 subparser.add_silence()105 subparser.add_release_drop()106 104 subparser.add_time_format() 107 105 subparser.add_verbose_help() … … 209 207 action="store", dest="silence", default=-70, 210 208 help="silence threshold") 211 212 def add_release_drop(self):213 self.add_argument("-d", "--release-drop",214 metavar = "<value>", type=float,215 action="store", dest="release_drop", default=10,216 help="release drop threshold")217 209 218 210 def add_minioi(self, default="12ms"): … … 391 383 self.parse_options(args, self.valid_opts) 392 384 self.notes = aubio.notes(**self.options) 393 if args.silence is not None:394 self.notes.set_silence(args.silence)395 if args.release_drop is not None:396 self.notes.set_release_drop(args.release_drop)397 385 super(process_notes, self).__init__(args) 398 386 def __call__(self, block): … … 515 503 def main(): 516 504 parser = aubio_parser() 517 if sys.version_info[0] != 3: 518 # on py2, create a dummy ArgumentParser to workaround the 519 # optional subcommand issue. See https://bugs.python.org/issue9253 520 # This ensures that: 521 # - version string is shown when only '-V' is passed 522 # - help is printed if '-V' is passed with any other argument 523 # - any other argument get forwarded to the real parser 524 parser_root = argparse.ArgumentParser(add_help=False) 525 parser_root.add_argument('-V', '--version', help="show version", 526 action="store_true", dest="show_version") 527 args, extras = parser_root.parse_known_args() 528 if args.show_version == False: # no -V, forward to parser 529 args = parser.parse_args(extras, namespace=args) 530 elif len(extras) != 0: # -V with other arguments, print help 531 parser.print_help() 532 sys.exit(1) 533 else: # in py3, we can simply use parser directly 534 args = parser.parse_args() 505 args = parser.parse_args() 535 506 if 'show_version' in args and args.show_version: 536 507 sys.stdout.write('aubio version ' + aubio.version + '\n') -
python/lib/aubio/midiconv.py
red596f7 rf9400d0 2 2 """ utilities to convert midi note number to and from note names """ 3 3 4 __all__ = ['note2midi', 'midi2note', 'freq2note' , 'note2freq']4 __all__ = ['note2midi', 'midi2note', 'freq2note'] 5 5 6 6 import sys 7 from ._aubio import freqtomidi, miditofreq8 9 7 py3 = sys.version_info[0] == 3 10 8 if py3: … … 66 64 _valid_octaves = range(-1, 10) 67 65 if not isinstance(note, str_instances): 68 msg = "a string is required, got {:s} ({:s})" 69 raise TypeError(msg.format(str(type(note)), repr(note))) 66 raise TypeError("a string is required, got %s (%s)" % (note, str(type(note)))) 70 67 if len(note) not in range(2, 5): 71 msg = "string of 2 to 4 characters expected, got {:d} ({:s})"72 raise ValueError(msg.format(len(note), note))68 raise ValueError("string of 2 to 4 characters expected, got %d (%s)" \ 69 % (len(note), note)) 73 70 notename, modifier, octave = [None]*3 74 71 … … 94 91 raise ValueError("%s is not a valid octave" % octave) 95 92 96 midi = 12 + octave * 12 + _valid_notenames[notename] \ 97 + _valid_modifiers[modifier] 93 midi = 12 + octave * 12 + _valid_notenames[notename] + _valid_modifiers[modifier] 98 94 if midi > 127: 99 95 raise ValueError("%s is outside of the range C-2 to G8" % note) … … 134 130 raise TypeError("an integer is required, got %s" % midi) 135 131 if midi not in range(0, 128): 136 msg = "an integer between 0 and 127 is excepted, got {:d}" 137 raise ValueError(msg.format(midi)) 138 _valid_notenames = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 139 'A', 'A#', 'B'] 132 raise ValueError("an integer between 0 and 127 is excepted, got %d" % midi) 133 _valid_notenames = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'] 140 134 return _valid_notenames[midi % 12] + str(int(midi / 12) - 1) 141 135 … … 160 154 'A3' 161 155 """ 162 nearest_note = int(freqtomidi(freq) + .5) 163 return midi2note(nearest_note) 164 165 def note2freq(note): 166 """Convert note name to corresponding frequency, in Hz. 167 168 Parameters 169 ---------- 170 note : str 171 input note name 172 173 Returns 174 ------- 175 freq : float [0, 23000[ 176 frequency, in Hz 177 178 Example 179 ------- 180 >>> aubio.note2freq('A4') 181 440 182 >>> aubio.note2freq('A3') 183 220.1 184 """ 185 midi = note2midi(note) 186 return miditofreq(midi) 156 from aubio import freqtomidi 157 return midi2note(int(freqtomidi(freq))) -
python/tests/test_aubio_cmd.py
red596f7 rf9400d0 20 20 21 21 def test_samples2seconds(self): 22 self.assertEqual(aubio.cmd.samples2seconds(3200, 32000), 23 "0.100000\t") 22 self.assertEqual(aubio.cmd.samples2seconds(3200, 32000), "0.100000\t") 24 23 25 24 def test_samples2milliseconds(self): 26 self.assertEqual(aubio.cmd.samples2milliseconds(3200, 32000), 27 "100.000000\t") 25 self.assertEqual(aubio.cmd.samples2milliseconds(3200, 32000), "100.000000\t") 28 26 29 27 def test_samples2samples(self): 30 self.assertEqual(aubio.cmd.samples2samples(3200, 32000), 31 "3200\t") 28 self.assertEqual(aubio.cmd.samples2samples(3200, 32000), "3200\t") 32 29 33 30 if __name__ == '__main__': -
python/tests/test_note2midi.py
red596f7 rf9400d0 4 4 from __future__ import unicode_literals 5 5 6 from aubio import note2midi, freq2note , note2freq, float_type6 from aubio import note2midi, freq2note 7 7 from nose2.tools import params 8 8 import unittest … … 112 112 class freq2note_simple_test(unittest.TestCase): 113 113 114 def test_freq2note _above(self):114 def test_freq2note(self): 115 115 " make sure freq2note(441) == A4 " 116 116 self.assertEqual("A4", freq2note(441)) 117 118 def test_freq2note_under(self):119 " make sure freq2note(439) == A4 "120 self.assertEqual("A4", freq2note(439))121 122 class note2freq_simple_test(unittest.TestCase):123 124 def test_note2freq(self):125 " make sure note2freq('A3') == 220"126 self.assertEqual(220, note2freq("A3"))127 128 def test_note2freq_under(self):129 " make sure note2freq(A4) == 440"130 if float_type == 'float32':131 self.assertEqual(440, note2freq("A4"))132 else:133 self.assertLess(abs(note2freq("A4")-440), 1.e-12)134 117 135 118 if __name__ == '__main__': -
python/tests/test_notes.py
red596f7 rf9400d0 6 6 7 7 AUBIO_DEFAULT_NOTES_SILENCE = -70. 8 AUBIO_DEFAULT_NOTES_RELEASE_DROP = 10.9 8 AUBIO_DEFAULT_NOTES_MINIOI_MS = 30. 10 9 … … 39 38 self.o.set_silence(val) 40 39 assert_equal (self.o.get_silence(), val) 41 42 def test_get_release_drop(self):43 assert_equal (self.o.get_release_drop(), AUBIO_DEFAULT_NOTES_RELEASE_DROP)44 45 def test_set_release_drop(self):46 val = 5047 self.o.set_release_drop(val)48 assert_equal (self.o.get_release_drop(), val)49 50 def test_set_release_drop_wrong(self):51 val = -1052 with self.assertRaises(ValueError):53 self.o.set_release_drop(val)54 40 55 41 from .utils import list_all_sounds -
python/tests/test_slicing.py
red596f7 rf9400d0 35 35 def test_slice_start_every_blocksize(self): 36 36 hopsize = 200 37 regions_start = [i*hopsize for i in range( 0, n_slices)]37 regions_start = [i*hopsize for i in range(1, n_slices)] 38 38 slice_source_at_stamps(self.source_file, regions_start, output_dir = self.output_dir, 39 39 hopsize = 200) … … 41 41 def test_slice_start_every_half_blocksize(self): 42 42 hopsize = 200 43 regions_start = [i*hopsize//2 for i in range( 0, n_slices)]43 regions_start = [i*hopsize//2 for i in range(1, n_slices)] 44 44 slice_source_at_stamps(self.source_file, regions_start, 45 45 output_dir = self.output_dir, hopsize = 200) -
src/io/source_avcodec.c
red596f7 rf9400d0 35 35 // determine whether we use libavformat from ffmpeg or from libav 36 36 #define FFMPEG_LIBAVFORMAT (LIBAVFORMAT_VERSION_MICRO > 99 ) 37 // max_analyze_duration2 was used from ffmpeg libavformat 55.43.100 ->57.2.10037 // max_analyze_duration2 was used from ffmpeg libavformat 55.43.100 through 57.2.100 38 38 #define FFMPEG_LIBAVFORMAT_MAX_DUR2 FFMPEG_LIBAVFORMAT && ( \ 39 39 (LIBAVFORMAT_VERSION_MAJOR == 55 && LIBAVFORMAT_VERSION_MINOR >= 43) \ … … 93 93 }; 94 94 95 // create or re-create the context when _do or _do_multi is called 96 void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, 97 uint_t multi); 98 // actually read a frame 99 void aubio_source_avcodec_readframe(aubio_source_avcodec_t *s, 100 uint_t * read_samples); 95 // hack to create or re-create the context the first time _do or _do_multi is called 96 void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, uint_t multi); 97 void aubio_source_avcodec_readframe(aubio_source_avcodec_t *s, uint_t * read_samples); 101 98 102 99 uint_t aubio_source_avcodec_has_network_url(aubio_source_avcodec_t *s); … … 115 112 116 113 117 aubio_source_avcodec_t * new_aubio_source_avcodec(const char_t * path, 118 uint_t samplerate, uint_t hop_size) { 114 aubio_source_avcodec_t * new_aubio_source_avcodec(const char_t * path, uint_t samplerate, uint_t hop_size) { 119 115 aubio_source_avcodec_t * s = AUBIO_NEW(aubio_source_avcodec_t); 120 116 AVFormatContext *avFormatCtx = s->avFormatCtx; … … 133 129 } 134 130 if ((sint_t)samplerate < 0) { 135 AUBIO_ERR("source_avcodec: Can not open %s with samplerate %d\n", 136 path, samplerate); 131 AUBIO_ERR("source_avcodec: Can not open %s with samplerate %d\n", path, samplerate); 137 132 goto beach; 138 133 } 139 134 if ((sint_t)hop_size <= 0) { 140 AUBIO_ERR("source_avcodec: Can not open %s with hop_size %d\n", 141 path, hop_size); 135 AUBIO_ERR("source_avcodec: Can not open %s with hop_size %d\n", path, hop_size); 142 136 goto beach; 143 137 } … … 179 173 char errorstr[256]; 180 174 av_strerror (err, errorstr, sizeof(errorstr)); 181 AUBIO_ERR("source_avcodec: Could not find stream information " 182 "for %s (%s)\n", s->path,errorstr);175 AUBIO_ERR("source_avcodec: Could not find stream information " "for %s (%s)\n", s->path, 176 errorstr); 183 177 goto beach; 184 178 } … … 220 214 avCodecCtx = avcodec_alloc_context3(codec); 221 215 if (!avCodecCtx) { 222 AUBIO_ERR("source_avcodec: Failed to allocate the %s codec context " 223 "for path %s\n", av_get_media_type_string(AVMEDIA_TYPE_AUDIO), 224 s->path); 216 AUBIO_ERR("source_avcodec: Failed to allocate the %s codec context for path %s\n", 217 av_get_media_type_string(AVMEDIA_TYPE_AUDIO), s->path); 225 218 goto beach; 226 219 } … … 237 230 /* Copy codec parameters from input stream to output codec context */ 238 231 if ((err = avcodec_parameters_to_context(avCodecCtx, codecpar)) < 0) { 239 AUBIO_ERR("source_avcodec: Failed to copy %s codec parameters to " 240 "decoder context for %s\n", 241 av_get_media_type_string(AVMEDIA_TYPE_AUDIO), s->path); 232 AUBIO_ERR("source_avcodec: Failed to copy %s codec parameters to decoder context for %s\n", 233 av_get_media_type_string(AVMEDIA_TYPE_AUDIO), s->path); 242 234 goto beach; 243 235 } … … 247 239 char errorstr[256]; 248 240 av_strerror (err, errorstr, sizeof(errorstr)); 249 AUBIO_ERR("source_avcodec: Could not load codec for %s (%s)\n", s->path, 250 errorstr); 241 AUBIO_ERR("source_avcodec: Could not load codec for %s (%s)\n", s->path, errorstr); 251 242 goto beach; 252 243 } … … 275 266 276 267 /* allocate output for avr */ 277 s->output = (smpl_t *)av_malloc(AUBIO_AVCODEC_MAX_BUFFER_SIZE 278 * sizeof(smpl_t)); 268 s->output = (smpl_t *)av_malloc(AUBIO_AVCODEC_MAX_BUFFER_SIZE * sizeof(smpl_t)); 279 269 280 270 s->read_samples = 0; … … 304 294 } 305 295 306 void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, 307 uint_t multi) 308 { 296 void aubio_source_avcodec_reset_resampler(aubio_source_avcodec_t * s, uint_t multi) { 309 297 // create or reset resampler to/from mono/multi-channel 310 298 if ( (multi != s->multi) || (s->avr == NULL) ) { … … 321 309 #endif /* HAVE_AVRESAMPLE || HAVE_SWRESAMPLE */ 322 310 323 av_opt_set_int(avr, "in_channel_layout", input_layout, 324 av_opt_set_int(avr, "out_channel_layout", output_layout, 325 av_opt_set_int(avr, "in_sample_rate", s->input_samplerate, 326 av_opt_set_int(avr, "out_sample_rate", s->samplerate, 311 av_opt_set_int(avr, "in_channel_layout", input_layout, 0); 312 av_opt_set_int(avr, "out_channel_layout", output_layout, 0); 313 av_opt_set_int(avr, "in_sample_rate", s->input_samplerate, 0); 314 av_opt_set_int(avr, "out_sample_rate", s->samplerate, 0); 327 315 av_opt_set_int(avr, "in_sample_fmt", s->avCodecCtx->sample_fmt, 0); 328 316 #if HAVE_AUBIO_DOUBLE 329 av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_DBL, 330 #else 331 av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 317 av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_DBL, 0); 318 #else 319 av_opt_set_int(avr, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 0); 332 320 #endif 333 321 // TODO: use planar? … … 341 329 char errorstr[256]; 342 330 av_strerror (err, errorstr, sizeof(errorstr)); 343 AUBIO_ERR("source_avcodec: Could not open resampling context "344 " for %s (%s)\n",s->path, errorstr);331 AUBIO_ERR("source_avcodec: Could not open resampling context for %s (%s)\n", 332 s->path, errorstr); 345 333 return; 346 334 } … … 359 347 } 360 348 361 void aubio_source_avcodec_readframe(aubio_source_avcodec_t *s, 362 uint_t * read_samples) 363 { 349 void aubio_source_avcodec_readframe(aubio_source_avcodec_t *s, uint_t * read_samples) { 364 350 AVFormatContext *avFormatCtx = s->avFormatCtx; 365 351 AVCodecContext *avCodecCtx = s->avCodecCtx; … … 402 388 char errorstr[256]; 403 389 av_strerror (err, errorstr, sizeof(errorstr)); 404 AUBIO_ERR("source_avcodec: could not read frame in %s (%s)\n", 405 s->path, errorstr); 390 AUBIO_ERR("source_avcodec: could not read frame in %s (%s)\n", s->path, errorstr); 406 391 s->eof = 1; 407 392 goto beach; … … 421 406 if (ret < 0) { 422 407 if (ret == AVERROR(EAGAIN)) { 423 //AUBIO_WRN("source_avcodec: output is not available right now - " 424 // "user must try to send new input\n"); 408 //AUBIO_WRN("source_avcodec: output is not available right now - user must try to send new input\n"); 425 409 goto beach; 426 410 } else if (ret == AVERROR_EOF) { 427 AUBIO_WRN("source_avcodec: the decoder has been fully flushed, " 428 "and there will be no more output frames\n"); 411 AUBIO_WRN("source_avcodec: the decoder has been fully flushed, and there will be no more output frames\n"); 429 412 } else { 430 413 AUBIO_ERR("source_avcodec: decoding errors on %s\n", s->path); … … 441 424 #endif 442 425 if (got_frame == 0) { 443 AUBIO_WRN("source_avcodec: did not get a frame when reading %s\n", 444 s->path); 426 AUBIO_WRN("source_avcodec: did not get a frame when reading %s\n", s->path); 445 427 goto beach; 446 428 } … … 449 431 if (avFrame->channels != (sint_t)s->input_channels) { 450 432 AUBIO_WRN ("source_avcodec: trying to read from %d channel(s)," 451 "but configured for %d; is '%s' corrupt?\n", 452 avFrame->channels, s->input_channels, s->path); 453 goto beach; 454 } 455 #else 456 #warning "avutil < 53 is deprecated, crashes might occur on corrupt files" 433 "but configured for %d; is '%s' corrupt?\n", avFrame->channels, 434 s->input_channels, s->path); 435 goto beach; 436 } 457 437 #endif 458 438 … … 475 455 #endif /* HAVE_AVRESAMPLE || HAVE_SWRESAMPLE */ 476 456 if (out_samples <= 0) { 477 AUBIO_WRN("source_avcodec: no sample found while converting frame (%s)\n", 478 s->path); 457 AUBIO_WRN("source_avcodec: no sample found while converting frame (%s)\n", s->path); 479 458 goto beach; 480 459 } … … 494 473 } 495 474 496 void aubio_source_avcodec_do(aubio_source_avcodec_t * s, fvec_t * read_data, 497 uint_t * read) { 475 void aubio_source_avcodec_do(aubio_source_avcodec_t * s, fvec_t * read_data, uint_t * read){ 498 476 uint_t i; 499 477 uint_t end = 0; … … 527 505 } 528 506 529 void aubio_source_avcodec_do_multi(aubio_source_avcodec_t * s, 530 fmat_t * read_data, uint_t * read) { 507 void aubio_source_avcodec_do_multi(aubio_source_avcodec_t * s, fmat_t * read_data, uint_t * read){ 531 508 uint_t i,j; 532 509 uint_t end = 0; … … 574 551 575 552 uint_t aubio_source_avcodec_seek (aubio_source_avcodec_t * s, uint_t pos) { 576 int64_t resampled_pos = 577 (uint_t)ROUND(pos * (s->input_samplerate * 1. / s->samplerate)); 553 int64_t resampled_pos = (uint_t)ROUND(pos * (s->input_samplerate * 1. / s->samplerate)); 578 554 int64_t min_ts = MAX(resampled_pos - 2000, 0); 579 555 int64_t max_ts = MIN(resampled_pos + 2000, INT64_MAX); … … 583 559 ret = AUBIO_OK; 584 560 } else { 585 AUBIO_ERR("source_avcodec: failed seeking in %s (file not opened?)", 586 s->path); 561 AUBIO_ERR("source_avcodec: failed seeking in %s (file not opened?)", s->path); 587 562 return ret; 588 563 } … … 595 570 min_ts, resampled_pos, max_ts, seek_flags); 596 571 if (ret < 0) { 597 AUBIO_ERR("source_avcodec: failed seeking to %d in file %s", 598 pos, s->path); 572 AUBIO_ERR("source_avcodec: failed seeking to %d in file %s", pos, s->path); 599 573 } 600 574 // reset read status -
src/mathutils.c
red596f7 rf9400d0 523 523 /* log(freq/A-2)/log(2) */ 524 524 midi = freq / 6.875; 525 midi = LOG (midi) / 0.6931471805599 453;525 midi = LOG (midi) / 0.69314718055995; 526 526 midi *= 12; 527 527 midi -= 3; … … 535 535 if (midi > 140.) return 0.; // avoid infs 536 536 freq = (midi + 3.) / 12.; 537 freq = EXP (freq * 0.6931471805599 453);537 freq = EXP (freq * 0.69314718055995); 538 538 freq *= 6.875; 539 539 return freq; -
src/notes/notes.c
red596f7 rf9400d0 1 1 /* 2 Copyright (C) 2014 -2018Paul Brossier <piem@aubio.org>2 Copyright (C) 2014 Paul Brossier <piem@aubio.org> 3 3 4 4 This file is part of aubio. … … 26 26 27 27 #define AUBIO_DEFAULT_NOTES_SILENCE -70. 28 #define AUBIO_DEFAULT_NOTES_RELEASE_DROP 10.29 28 // increase to 10. for .1 cent precision 30 29 // or to 100. for .01 cent precision … … 58 57 59 58 uint_t isready; 60 61 smpl_t last_onset_level;62 smpl_t release_drop_level;63 59 }; 64 60 … … 106 102 aubio_notes_set_minioi_ms (o, AUBIO_DEFAULT_NOTES_MINIOI_MS); 107 103 108 o->last_onset_level = AUBIO_DEFAULT_NOTES_SILENCE;109 o->release_drop_level = AUBIO_DEFAULT_NOTES_RELEASE_DROP;110 111 104 return o; 112 105 … … 146 139 { 147 140 return aubio_onset_get_minioi_ms(o->onset); 148 }149 150 uint_t aubio_notes_set_release_drop(aubio_notes_t *o, smpl_t release_drop_level)151 {152 uint_t err = AUBIO_OK;153 if (release_drop_level <= 0.) {154 AUBIO_ERR("notes: release_drop should be >= 0, got %f\n", release_drop_level);155 err = AUBIO_FAIL;156 } else {157 o->release_drop_level = release_drop_level;158 }159 return err;160 }161 162 smpl_t aubio_notes_get_release_drop(const aubio_notes_t *o)163 {164 return o->release_drop_level;165 141 } 166 142 … … 209 185 //notes->data[0] = o->curnote; 210 186 //notes->data[1] = 0.; 211 //AUBIO_WRN("notes: sending note-off at onset, not enough level\n");212 187 notes->data[2] = o->curnote; 213 188 } else { … … 217 192 /* kill old note */ 218 193 //send_noteon(o->curnote,0, o->samplerate); 219 //AUBIO_WRN("notes: sending note-off at onset, new onset detected\n");220 194 notes->data[2] = o->curnote; 221 195 /* get and send new one */ … … 225 199 o->curnote = new_pitch; 226 200 } 227 o->last_onset_level = curlevel;228 201 } 229 202 } else { 230 if (curlevel < o->last_onset_level - o->release_drop_level) 231 { 232 // send note off 233 //AUBIO_WRN("notes: sending note-off, release detected\n"); 234 notes->data[0] = 0; 235 notes->data[1] = 0; 236 notes->data[2] = o->curnote; 237 // reset last_onset_level to silence_threshold 238 o->last_onset_level = o->silence_threshold; 239 o->curnote = 0; 240 } 241 else if (o->median) 242 { 203 if (o->median) { 243 204 if (o->isready > 0) 244 205 o->isready++; … … 247 208 /* kill old note */ 248 209 //send_noteon(curnote,0); 249 if (o->curnote != 0) 250 { 251 //AUBIO_WRN("notes: sending note-off, new note detected\n"); 252 notes->data[2] = o->curnote; 253 } 210 notes->data[2] = o->curnote; 254 211 o->newnote = aubio_notes_get_latest_note(o); 255 212 o->curnote = o->newnote; -
src/notes/notes.h
red596f7 rf9400d0 107 107 uint_t aubio_notes_set_minioi_ms (aubio_notes_t *o, smpl_t minioi_ms); 108 108 109 /** get notes object release drop level, in dB110 111 \param o notes detection object as returned by new_aubio_notes()112 113 \return current release drop level, in dB114 115 */116 smpl_t aubio_notes_get_release_drop (const aubio_notes_t *o);117 118 /** set note release drop level, in dB119 120 This function sets the release_drop_level parameter, in dB. When a new note121 is found, the current level in dB is measured. If the measured level drops122 under that initial level - release_drop_level, then a note-off will be123 emitted.124 125 Defaults to `10`, in dB.126 127 \note This parameter was added in version `0.4.8`. Results obtained with128 earlier versions can be reproduced by setting this value to `100`, so that129 note-off will not be played until the next note.130 131 \param o notes detection object as returned by new_aubio_notes()132 \param release_drop new release drop level, in dB133 134 \return 0 on success, non-zero otherwise135 136 */137 uint_t aubio_notes_set_release_drop (aubio_notes_t *o, smpl_t release_drop);138 139 109 #ifdef __cplusplus 140 110 } -
src/spectral/filterbank_mel.h
red596f7 rf9400d0 59 59 60 60 The filter coefficients are built according to Malcolm Slaney's Auditory 61 Toolbox, available online at the following address (see file mfcc.m): 62 63 https://engineering.purdue.edu/~malcolm/interval/1998-010/ 61 Toolbox, available at http://engineering.purdue.edu/~malcolm/interval/1998-010/ 62 (see file mfcc.m). 64 63 65 64 */ -
src/spectral/mfcc.h
red596f7 rf9400d0 27 27 28 28 The implementation follows the specifications established by Malcolm Slaney 29 in its Auditory Toolbox, available online at the following address (see 30 file mfcc.m): 29 in its Auditory Toolbox, available online (see file mfcc.m). 31 30 32 http s://engineering.purdue.edu/~malcolm/interval/1998-010/31 http://engineering.ecn.purdue.edu/~malcolm/interval/1998-010/ 33 32 34 33 \example spectral/test-mfcc.c -
src/spectral/phasevoc.c
red596f7 rf9400d0 213 213 synthold[i] += synth[i + pv->hop_s] * pv->scale; 214 214 } 215 216 uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv)217 {218 return pv->win_s;219 }220 221 uint_t aubio_pvoc_get_hop(aubio_pvoc_t* pv)222 {223 return pv->hop_s;224 } -
src/spectral/phasevoc.h
red596f7 rf9400d0 89 89 */ 90 90 uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv); 91 92 91 /** get hop size 93 92 -
src/synth/wavetable.c
red596f7 rf9400d0 165 165 aubio_wavetable_set_amp (s, 0.); 166 166 //s->last_pos = 0; 167 return aubio_wavetable_set_playing (s, 0);167 return aubio_wavetable_set_playing (s, 1); 168 168 } 169 169 -
src/synth/wavetable.h
red596f7 rf9400d0 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 \param o wavetable, created by new_aubio_wavetable() 57 \param uri the uri of the source to load 58 59 \return 0 if successful, non-zero otherwise 60 61 */ 62 uint_t aubio_wavetable_load( aubio_wavetable_t * o, const char_t * uri ); 53 63 54 64 /** process wavetable function
Note: See TracChangeset
for help on using the changeset viewer.