Changeset e8c4de2


Ignore:
Timestamp:
Dec 6, 2013, 8:39:41 PM (6 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/constantq, feature/pitchshift, feature/pydocstrings, feature/timestretch, master, pitchshift, sampler, timestretch, yinfft+
Children:
cc6b221
Parents:
9ec63a0 (diff), 7816f2b (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.
Message:

Merge branch 'avcodec' into develop

Files:
3 added
11 edited

Legend:

Unmodified
Added
Removed
  • doc/web.cfg

    r9ec63a0 re8c4de2  
    703703EXCLUDE                = ../src/aubio_priv.h \
    704704                         ../src/mathutils .h \
     705                         ../src/io/audio_unit.h \
    705706                         ../src/io/source_sndfile.h \
    706707                         ../src/io/source_apple_audio.h \
     708                         ../src/io/source_avcodec.h \
    707709                         ../src/io/sink_sndfile.h \
    708710                         ../src/io/sink_apple_audio.h \
  • python/lib/generator.py

    r9ec63a0 re8c4de2  
    5858      'source_apple_audio',
    5959      'source_sndfile',
     60      'source_avcodec',
    6061      #'sampler',
    6162      'audio_unit',
  • src/aubio.h

    r9ec63a0 re8c4de2  
    194194#include "io/source_sndfile.h"
    195195#include "io/source_apple_audio.h"
     196#include "io/source_avcodec.h"
    196197#include "io/sink_sndfile.h"
    197198#include "io/sink_apple_audio.h"
  • src/io/source.c

    r9ec63a0 re8c4de2  
    2424#include "fmat.h"
    2525#include "io/source.h"
     26#ifdef HAVE_AVCODEC
     27#include "io/source_avcodec.h"
     28#endif /* HAVE_AVCODEC */
    2629#ifdef __APPLE__
    2730#include "io/source_apple_audio.h"
     
    2932#ifdef HAVE_SNDFILE
    3033#include "io/source_sndfile.h"
    31 #endif
     34#endif /* HAVE_SNDFILE */
     35
     36typedef void (*aubio_source_do_t)(aubio_source_t * s, fvec_t * data, uint_t * read);
     37typedef void (*aubio_source_do_multi_t)(aubio_source_t * s, fmat_t * data, uint_t * read);
     38typedef uint_t (*aubio_source_get_samplerate_t)(aubio_source_t * s);
     39typedef uint_t (*aubio_source_get_channels_t)(aubio_source_t * s);
     40typedef uint_t (*aubio_source_seek_t)(aubio_source_t * s, uint_t seek);
     41typedef uint_t (*del_aubio_source_t)(aubio_source_t * s);
    3242
    3343struct _aubio_source_t {
    3444  void *source;
     45  aubio_source_do_t s_do;
     46  aubio_source_do_multi_t s_do_multi;
     47  aubio_source_get_samplerate_t s_get_samplerate;
     48  aubio_source_get_channels_t s_get_channels;
     49  aubio_source_seek_t s_seek;
     50  del_aubio_source_t s_del;
    3551};
    3652
    3753aubio_source_t * new_aubio_source(char_t * uri, uint_t samplerate, uint_t hop_size) {
    3854  aubio_source_t * s = AUBIO_NEW(aubio_source_t);
     55#if HAVE_AVCODEC
     56  s->source = (void *)new_aubio_source_avcodec(uri, samplerate, hop_size);
     57  if (s->source) {
     58    s->s_do = (aubio_source_do_t)(aubio_source_avcodec_do);
     59    s->s_do_multi = (aubio_source_do_multi_t)(aubio_source_avcodec_do_multi);
     60    s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_avcodec_get_channels);
     61    s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_avcodec_get_samplerate);
     62    s->s_seek = (aubio_source_seek_t)(aubio_source_avcodec_seek);
     63    s->s_del = (del_aubio_source_t)(del_aubio_source_avcodec);
     64    return s;
     65  }
     66#endif /* HAVE_AVCODEC */
    3967#ifdef __APPLE__
    4068  s->source = (void *)new_aubio_source_apple_audio(uri, samplerate, hop_size);
    41   if (s->source) return s;
    42 #else /* __APPLE__ */
     69  if (s->source) {
     70    s->s_do = (aubio_source_do_t)(aubio_source_apple_audio_do);
     71    s->s_do_multi = (aubio_source_do_multi_t)(aubio_source_apple_audio_do_multi);
     72    s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_apple_audio_get_channels);
     73    s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_apple_audio_get_samplerate);
     74    s->s_seek = (aubio_source_seek_t)(aubio_source_apple_audio_seek);
     75    s->s_del = (del_aubio_source_t)(del_aubio_source_apple_audio);
     76    return s;
     77  }
     78#endif /* __APPLE__ */
    4379#if HAVE_SNDFILE
    4480  s->source = (void *)new_aubio_source_sndfile(uri, samplerate, hop_size);
    45   if (s->source) return s;
     81  if (s->source) {
     82    s->s_do = (aubio_source_do_t)(aubio_source_sndfile_do);
     83    s->s_do_multi = (aubio_source_do_multi_t)(aubio_source_sndfile_do_multi);
     84    s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_sndfile_get_channels);
     85    s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_sndfile_get_samplerate);
     86    s->s_seek = (aubio_source_seek_t)(aubio_source_sndfile_seek);
     87    s->s_del = (del_aubio_source_t)(del_aubio_source_sndfile);
     88    return s;
     89  }
    4690#endif /* HAVE_SNDFILE */
    47 #endif /* __APPLE__ */
    4891  AUBIO_ERROR("failed creating aubio source with %s\n", uri);
    4992  AUBIO_FREE(s);
     
    5295
    5396void aubio_source_do(aubio_source_t * s, fvec_t * data, uint_t * read) {
    54 #ifdef __APPLE__
    55   aubio_source_apple_audio_do((aubio_source_apple_audio_t *)s->source, data, read);
    56 #else /* __APPLE__ */
    57 #if HAVE_SNDFILE
    58   aubio_source_sndfile_do((aubio_source_sndfile_t *)s->source, data, read);
    59 #endif /* HAVE_SNDFILE */
    60 #endif /* __APPLE__ */
     97  s->s_do((void *)s->source, data, read);
    6198}
    6299
    63100void aubio_source_do_multi(aubio_source_t * s, fmat_t * data, uint_t * read) {
    64 #ifdef __APPLE__
    65   aubio_source_apple_audio_do_multi((aubio_source_apple_audio_t *)s->source, data, read);
    66 #else /* __APPLE__ */
    67 #if HAVE_SNDFILE
    68   aubio_source_sndfile_do_multi((aubio_source_sndfile_t *)s->source, data, read);
    69 #endif /* HAVE_SNDFILE */
    70 #endif /* __APPLE__ */
     101  s->s_do_multi((void *)s->source, data, read);
    71102}
    72103
    73104void del_aubio_source(aubio_source_t * s) {
    74105  if (!s) return;
    75 #ifdef __APPLE__
    76   del_aubio_source_apple_audio((aubio_source_apple_audio_t *)s->source);
    77 #else /* __APPLE__ */
    78 #if HAVE_SNDFILE
    79   del_aubio_source_sndfile((aubio_source_sndfile_t *)s->source);
    80 #endif /* HAVE_SNDFILE */
    81 #endif /* __APPLE__ */
     106  s->s_del((void *)s->source);
    82107  AUBIO_FREE(s);
    83108}
    84109
    85110uint_t aubio_source_get_samplerate(aubio_source_t * s) {
    86 #ifdef __APPLE__
    87   return aubio_source_apple_audio_get_samplerate((aubio_source_apple_audio_t *)s->source);
    88 #else /* __APPLE__ */
    89 #if HAVE_SNDFILE
    90   return aubio_source_sndfile_get_samplerate((aubio_source_sndfile_t *)s->source);
    91 #endif /* HAVE_SNDFILE */
    92 #endif /* __APPLE__ */
     111  return s->s_get_samplerate((void *)s->source);
    93112}
    94113
    95114uint_t aubio_source_get_channels(aubio_source_t * s) {
    96 #ifdef __APPLE__
    97   return aubio_source_apple_audio_get_channels((aubio_source_apple_audio_t *)s->source);
    98 #else /* __APPLE__ */
    99 #if HAVE_SNDFILE
    100   return aubio_source_sndfile_get_channels((aubio_source_sndfile_t *)s->source);
    101 #endif /* HAVE_SNDFILE */
    102 #endif /* __APPLE__ */
     115  return s->s_get_channels((void *)s->source);
    103116}
    104117
    105118uint_t aubio_source_seek (aubio_source_t * s, uint_t seek ) {
    106 #ifdef __APPLE__
    107   return aubio_source_apple_audio_seek ((aubio_source_apple_audio_t *)s->source, seek);
    108 #else /* __APPLE__ */
    109 #if HAVE_SNDFILE
    110   return aubio_source_sndfile_seek ((aubio_source_sndfile_t *)s->source, seek);
    111 #endif /* HAVE_SNDFILE */
    112 #endif /* __APPLE__ */
     119  return s->s_seek((void *)s->source, seek);
    113120}
  • src/io/source.h

    r9ec63a0 re8c4de2  
    7777  \param s source object, created with ::new_aubio_source
    7878  \param read_to ::fmat_t of data to read to
    79   \param read upon returns, equals to number of frames actually read
     79  \param[out] read upon returns, equals to number of frames actually read
    8080
    8181  Upon returns, `read` contains the number of frames actually read from the
  • src/io/source_sndfile.c

    r9ec63a0 re8c4de2  
    6767  if (path == NULL) {
    6868    AUBIO_ERR("Aborted opening null path\n");
    69     return NULL;
     69    goto beach;
     70  }
     71  if ((sint_t)samplerate < 0) {
     72    AUBIO_ERR("Can not open %s with samplerate %d\n", path, samplerate);
     73    goto beach;
     74  }
     75  if ((sint_t)hop_size <= 0) {
     76    AUBIO_ERR("Can not open %s with hop_size %d\n", path, hop_size);
     77    goto beach;
    7078  }
    7179
     
    7482  s->path = path;
    7583
    76   // try opening the file, geting the info in sfinfo
     84  // try opening the file, getting the info in sfinfo
    7785  SF_INFO sfinfo;
    7886  AUBIO_MEMSET(&sfinfo, 0, sizeof (sfinfo));
     
    134142
    135143beach:
    136   AUBIO_ERR("can not read %s at samplerate %dHz with a hop_size of %d\n",
    137       s->path, s->samplerate, s->hop_size);
     144  //AUBIO_ERR("can not read %s at samplerate %dHz with a hop_size of %d\n",
     145  //    s->path, s->samplerate, s->hop_size);
    138146  del_aubio_source_sndfile(s);
    139147  return NULL;
  • src/wscript_build

    r9ec63a0 re8c4de2  
    66uselib += ['SAMPLERATE']
    77uselib += ['SNDFILE']
     8uselib += ['AVCODEC']
     9uselib += ['AVFORMAT']
     10uselib += ['AVRESAMPLE']
     11uselib += ['AVUTIL']
    812uselib += ['JACK']
    913uselib += ['LASH']
  • tests/src/io/test-source.c

    r9ec63a0 re8c4de2  
    2828  char_t *source_path = argv[1];
    2929
     30
     31  aubio_source_t* s =
     32    new_aubio_source(source_path, samplerate, hop_size);
     33  if (!s) { err = 1; goto beach; }
    3034  fvec_t *vec = new_fvec(hop_size);
    31 
    32   aubio_source_t* s = new_aubio_source(source_path, samplerate, hop_size);
    33   if (!s) { err = 1; goto beach; }
    3435
    3536  if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(s);
     
    4445    n_frames / hop_size, source_path);
    4546
     47  del_fvec (vec);
    4648  del_aubio_source (s);
    4749beach:
    48   del_fvec (vec);
    49 
    5050  return err;
    5151}
  • tests/src/io/test-source_apple_audio.c

    r9ec63a0 re8c4de2  
    1212    err = 2;
    1313    PRINT_ERR("not enough arguments\n");
    14     PRINT_MSG("usage: %s <source_path> [samplerate]\n", argv[0]);
     14    PRINT_MSG("read a wave file as a mono vector\n");
     15    PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]);
     16    PRINT_MSG("examples:\n");
     17    PRINT_MSG(" - read file.wav at original samplerate\n");
     18    PRINT_MSG("       %s file.wav\n", argv[0]);
     19    PRINT_MSG(" - read file.wav at 32000Hz\n");
     20    PRINT_MSG("       %s file.aif 32000\n", argv[0]);
     21    PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n");
     22    PRINT_MSG("       %s file.wav 0 4096 \n", argv[0]);
    1523    return err;
    1624  }
    1725
    1826#if __APPLE__
    19   uint_t samplerate = 32000;
     27  uint_t samplerate = 0;
    2028  uint_t hop_size = 256;
    2129  uint_t n_frames = 0, read = 0;
    2230  if ( argc == 3 ) samplerate = atoi(argv[2]);
     31  if ( argc == 4 ) hop_size = atoi(argv[3]);
    2332
    2433  char_t *source_path = argv[1];
    2534
     35
     36  aubio_source_apple_audio_t * s =
     37    new_aubio_source_apple_audio(source_path, samplerate, hop_size);
     38  if (!s) { err = 1; goto beach; }
    2639  fvec_t *vec = new_fvec(hop_size);
    27   aubio_source_apple_audio_t * s = new_aubio_source_apple_audio(source_path, samplerate, hop_size);
     40
    2841  if (samplerate == 0 ) samplerate = aubio_source_apple_audio_get_samplerate(s);
    29 
    30   if (!s) { err = 1; goto beach; }
    3142
    3243  do {
    3344    aubio_source_apple_audio_do(s, vec, &read);
    34     // fvec_print (vec);
     45    fvec_print (vec);
    3546    n_frames += read;
    3647  } while ( read == hop_size );
    3748
     49  PRINT_MSG("read %d frames at %dHz (%d blocks) from %s\n", n_frames, samplerate,
     50    n_frames / hop_size, source_path);
     51
     52  del_fvec (vec);
     53  del_aubio_source_apple_audio (s);
    3854beach:
    39   del_aubio_source_apple_audio (s);
    40   del_fvec (vec);
    4155#else
    4256  err = 3;
  • tests/src/io/test-source_sndfile.c

    r9ec63a0 re8c4de2  
    1313    err = 2;
    1414    PRINT_ERR("not enough arguments\n");
    15     PRINT_MSG("usage: %s <source_path> [samplerate]\n", argv[0]);
     15    PRINT_MSG("read a wave file as a mono vector\n");
     16    PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]);
     17    PRINT_MSG("examples:\n");
     18    PRINT_MSG(" - read file.wav at original samplerate\n");
     19    PRINT_MSG("       %s file.wav\n", argv[0]);
     20    PRINT_MSG(" - read file.wav at 32000Hz\n");
     21    PRINT_MSG("       %s file.aif 32000\n", argv[0]);
     22    PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n");
     23    PRINT_MSG("       %s file.wav 0 4096 \n", argv[0]);
    1624    return err;
    1725  }
    1826
    1927#ifdef HAVE_SNDFILE
    20   uint_t samplerate = 32000;
     28  uint_t samplerate = 0;
    2129  uint_t hop_size = 256;
    2230  uint_t n_frames = 0, read = 0;
    2331  if ( argc == 3 ) samplerate = atoi(argv[2]);
     32  if ( argc == 4 ) hop_size = atoi(argv[3]);
    2433
    2534  char_t *source_path = argv[1];
    2635
     36
     37  aubio_source_sndfile_t * s =
     38    new_aubio_source_sndfile(source_path, samplerate, hop_size);
     39  if (!s) { err = 1; goto beach; }
    2740  fvec_t *vec = new_fvec(hop_size);
    28   aubio_source_sndfile_t * s = new_aubio_source_sndfile(source_path, samplerate, hop_size);
    29   if (!s) { err = 1; goto beach; }
     41
    3042  if (samplerate == 0 ) samplerate = aubio_source_sndfile_get_samplerate(s);
    3143
    3244  do {
    3345    aubio_source_sndfile_do(s, vec, &read);
    34     // fvec_print (vec);
     46    fvec_print (vec);
    3547    n_frames += read;
    3648  } while ( read == hop_size );
    3749
     50  PRINT_MSG("read %d frames at %dHz (%d blocks) from %s\n", n_frames, samplerate,
     51    n_frames / hop_size, source_path);
     52
     53  del_fvec (vec);
    3854  del_aubio_source_sndfile (s);
    3955beach:
    40   del_fvec (vec);
    4156#else
    4257  err = 3;
  • wscript

    r9ec63a0 re8c4de2  
    5757  add_option_enable_disable(ctx, 'sndfile', default = None,
    5858          help_str = 'compile with sndfile (auto)', help_disable_str = 'disable sndfile')
     59  add_option_enable_disable(ctx, 'avcodec', default = None,
     60          help_str = 'compile with libavcodec (auto)', help_disable_str = 'disable libavcodec')
    5961  add_option_enable_disable(ctx, 'samplerate', default = None,
    6062          help_str = 'compile with samplerate (auto)', help_disable_str = 'disable samplerate')
     
    200202    args = '--cflags --libs', uselib_store = 'LASH', mandatory = False)
    201203
     204  if (ctx.options.enable_avcodec != False):
     205    ctx.check_cfg(package = 'libavcodec', atleast_version = '54.35.0',
     206    args = '--cflags --libs', uselib_store = 'AVCODEC', mandatory = False)
     207    ctx.check_cfg(package = 'libavformat', atleast_version = '52.3.0',
     208    args = '--cflags --libs', uselib_store = 'AVFORMAT', mandatory = False)
     209    ctx.check_cfg(package = 'libavutil', atleast_version = '52.3.0',
     210    args = '--cflags --libs', uselib_store = 'AVUTIL', mandatory = False)
     211    ctx.check_cfg(package = 'libavresample', atleast_version = '1.0.1',
     212    args = '--cflags --libs', uselib_store = 'AVRESAMPLE', mandatory = False)
     213
    202214  # write configuration header
    203215  ctx.write_config_header('src/config.h')
Note: See TracChangeset for help on using the changeset viewer.