Changes in / [09b4be9:d013a93]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/io/sink.c

    r09b4be9 rd013a93  
    5454};
    5555
     56#ifdef HAVE_VORBISENC
     57typedef struct _aubio_sink_vorbis_t aubio_sink_vorbis_t;
     58extern aubio_sink_vorbis_t * new_aubio_sink_vorbis(const char_t *uri,
     59    uint_t samplerate);
     60extern void del_aubio_sink_vorbis (aubio_sink_vorbis_t *s);
     61extern uint_t aubio_sink_vorbis_open(aubio_sink_vorbis_t *s);
     62extern uint_t aubio_sink_vorbis_close(aubio_sink_vorbis_t *s);
     63extern uint_t aubio_sink_vorbis_preset_channels(aubio_sink_vorbis_t *s,
     64    uint_t channels);
     65extern uint_t aubio_sink_vorbis_preset_samplerate(aubio_sink_vorbis_t *s,
     66    uint_t samplerate);
     67extern uint_t aubio_sink_vorbis_get_channels(aubio_sink_vorbis_t *s);
     68extern uint_t aubio_sink_vorbis_get_samplerate(aubio_sink_vorbis_t *s);
     69extern void aubio_sink_vorbis_do(aubio_sink_vorbis_t *s, fvec_t*
     70    write_data, uint_t write);
     71extern void aubio_sink_vorbis_do_multi(aubio_sink_vorbis_t *s, fmat_t*
     72    write_data, uint_t write);
     73#endif /* HAVE_VORBISENC */
     74
     75#ifdef HAVE_FLAC
     76typedef struct _aubio_sink_flac_t aubio_sink_flac_t;
     77extern aubio_sink_flac_t * new_aubio_sink_flac(const char_t *uri,
     78    uint_t samplerate);
     79extern void del_aubio_sink_flac (aubio_sink_flac_t *s);
     80extern uint_t aubio_sink_flac_open(aubio_sink_flac_t *s);
     81extern uint_t aubio_sink_flac_close(aubio_sink_flac_t *s);
     82extern uint_t aubio_sink_flac_preset_channels(aubio_sink_flac_t *s,
     83    uint_t channels);
     84extern uint_t aubio_sink_flac_preset_samplerate(aubio_sink_flac_t *s,
     85    uint_t samplerate);
     86extern uint_t aubio_sink_flac_get_channels(aubio_sink_flac_t *s);
     87extern uint_t aubio_sink_flac_get_samplerate(aubio_sink_flac_t *s);
     88extern void aubio_sink_flac_do(aubio_sink_flac_t *s, fvec_t*
     89    write_data, uint_t write);
     90extern void aubio_sink_flac_do_multi(aubio_sink_flac_t *s, fmat_t*
     91    write_data, uint_t write);
     92#endif /* HAVE_FLAC */
     93
     94static const char_t *aubio_get_extension(const char_t *filename)
     95{
     96  // find last occurence of dot character
     97  const char_t *ext = strrchr(filename, '.');
     98  if (!ext || ext == filename) return "";
     99  else return ext + 1;
     100}
     101
    56102aubio_sink_t * new_aubio_sink(const char_t * uri, uint_t samplerate) {
    57103  aubio_sink_t * s = AUBIO_NEW(aubio_sink_t);
     104#if defined(HAVE_VORBISENC) || defined(HAVE_FLAC)
     105  const char_t * uri_ext = aubio_get_extension(uri);
     106#endif /* defined(HAVE_VORBISENC) || defined(HAVE_FLAC) */
     107
     108#ifdef HAVE_VORBISENC
     109  // check if this uri could be for us
     110  uint_t match_oggstream = 0;
     111  if (strcmp (uri_ext, "ogg") == 0) match_oggstream = 1;
     112  if (match_oggstream) {
     113    s->sink = (void *)new_aubio_sink_vorbis(uri, samplerate);
     114    if (s->sink) {
     115      s->s_do = (aubio_sink_do_t)(aubio_sink_vorbis_do);
     116      s->s_do_multi = (aubio_sink_do_multi_t)(aubio_sink_vorbis_do_multi);
     117      s->s_preset_samplerate = (aubio_sink_preset_samplerate_t)(aubio_sink_vorbis_preset_samplerate);
     118      s->s_preset_channels = (aubio_sink_preset_channels_t)(aubio_sink_vorbis_preset_channels);
     119      s->s_get_samplerate = (aubio_sink_get_samplerate_t)(aubio_sink_vorbis_get_samplerate);
     120      s->s_get_channels = (aubio_sink_get_channels_t)(aubio_sink_vorbis_get_channels);
     121      s->s_close = (aubio_sink_close_t)(aubio_sink_vorbis_close);
     122      s->s_del = (del_aubio_sink_t)(del_aubio_sink_vorbis);
     123      return s;
     124    }
     125  }
     126#endif /* HAVE_VORBISENC */
     127
     128#ifdef HAVE_FLAC
     129  // check if this uri could be for us
     130  uint_t match_flacstream = 0;
     131  if (strcmp (uri_ext, "flac") == 0) match_flacstream = 1;
     132  if (match_flacstream) {
     133    s->sink = (void *)new_aubio_sink_flac(uri, samplerate);
     134    if (s->sink) {
     135      s->s_do = (aubio_sink_do_t)(aubio_sink_flac_do);
     136      s->s_do_multi = (aubio_sink_do_multi_t)(aubio_sink_flac_do_multi);
     137      s->s_preset_samplerate = (aubio_sink_preset_samplerate_t)(aubio_sink_flac_preset_samplerate);
     138      s->s_preset_channels = (aubio_sink_preset_channels_t)(aubio_sink_flac_preset_channels);
     139      s->s_get_samplerate = (aubio_sink_get_samplerate_t)(aubio_sink_flac_get_samplerate);
     140      s->s_get_channels = (aubio_sink_get_channels_t)(aubio_sink_flac_get_channels);
     141      s->s_close = (aubio_sink_close_t)(aubio_sink_flac_close);
     142      s->s_del = (del_aubio_sink_t)(del_aubio_sink_flac);
     143      return s;
     144    }
     145  }
     146#endif /* HAVE_FLAC */
     147
    58148#ifdef HAVE_SINK_APPLE_AUDIO
    59149  s->sink = (void *)new_aubio_sink_apple_audio(uri, samplerate);
     
    100190#if !defined(HAVE_WAVWRITE) && \
    101191  !defined(HAVE_SNDFILE) && \
    102   !defined(HAVE_SINK_APPLE_AUDIO)
     192  !defined(HAVE_SINK_APPLE_AUDIO) && \
     193  !defined(HAVE_VORBISENC) && \
     194  !defined(HAVE_FLAC)
    103195  AUBIO_ERROR("sink: failed creating '%s' at %dHz (no sink built-in)\n", uri, samplerate);
    104196#endif
Note: See TracChangeset for help on using the changeset viewer.