typedef uint_t (*aubio_source_get_samplerate_t)(aubio_source_t * s);
typedef uint_t (*aubio_source_get_channels_t)(aubio_source_t * s);
typedef uint_t (*aubio_source_seek_t)(aubio_source_t * s, uint_t seek);
+typedef uint_t (*aubio_source_close_t)(aubio_source_t * s);
typedef void (*del_aubio_source_t)(aubio_source_t * s);
struct _aubio_source_t {
aubio_source_get_samplerate_t s_get_samplerate;
aubio_source_get_channels_t s_get_channels;
aubio_source_seek_t s_seek;
+ aubio_source_close_t s_close;
del_aubio_source_t s_del;
};
s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_avcodec_get_channels);
s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_avcodec_get_samplerate);
s->s_seek = (aubio_source_seek_t)(aubio_source_avcodec_seek);
+ s->s_close = (aubio_source_close_t)(aubio_source_avcodec_close);
s->s_del = (del_aubio_source_t)(del_aubio_source_avcodec);
return s;
}
s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_apple_audio_get_channels);
s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_apple_audio_get_samplerate);
s->s_seek = (aubio_source_seek_t)(aubio_source_apple_audio_seek);
+ s->s_close = (aubio_source_close_t)(aubio_source_apple_audio_close);
s->s_del = (del_aubio_source_t)(del_aubio_source_apple_audio);
return s;
}
s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_sndfile_get_channels);
s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_sndfile_get_samplerate);
s->s_seek = (aubio_source_seek_t)(aubio_source_sndfile_seek);
+ s->s_close = (aubio_source_close_t)(aubio_source_sndfile_close);
s->s_del = (del_aubio_source_t)(del_aubio_source_sndfile);
return s;
}
s->s_get_channels = (aubio_source_get_channels_t)(aubio_source_wavread_get_channels);
s->s_get_samplerate = (aubio_source_get_samplerate_t)(aubio_source_wavread_get_samplerate);
s->s_seek = (aubio_source_seek_t)(aubio_source_wavread_seek);
+ s->s_close = (aubio_source_close_t)(aubio_source_wavread_close);
s->s_del = (del_aubio_source_t)(del_aubio_source_wavread);
return s;
}
s->s_do_multi((void *)s->source, data, read);
}
+uint_t aubio_source_close(aubio_source_t * s) {
+ return s->s_close((void *)s->source);
+}
+
void del_aubio_source(aubio_source_t * s) {
if (!s) return;
s->s_del((void *)s->source);
/**
+ close source object
+
+ \param s source object, created with ::new_aubio_source
+
+ \return 0 if sucessful, non-zero on failure
+
+ */
+uint_t aubio_source_close (aubio_source_t *s);
+
+/**
+
close source and cleanup memory
\param s source object, created with ::new_aubio_source
uint_t aubio_source_apple_audio_close (aubio_source_apple_audio_t *s)
{
OSStatus err = noErr;
- if (!s || !s->audioFile) { return AUBIO_FAIL; }
+ if (!s->audioFile) { return AUBIO_FAIL; }
err = ExtAudioFileDispose(s->audioFile);
s->audioFile = NULL;
if (err) {
/**
+ close source
+
+ \param s source object, created with ::new_aubio_source_apple_audio
+
+ \return 0 if sucessful, non-zero on failure
+
+*/
+uint_t aubio_source_apple_audio_close(aubio_source_apple_audio_t * s);
+
+/**
+
close source and cleanup memory
\param s source object, created with ::new_aubio_source_apple_audio
return ret;
}
-void del_aubio_source_avcodec(aubio_source_avcodec_t * s){
- if (!s) return;
- if (s->output != NULL) {
- av_free(s->output);
- }
+uint_t aubio_source_avcodec_close(aubio_source_avcodec_t * s) {
if (s->avr != NULL) {
avresample_close( s->avr );
av_free ( s->avr );
}
s->avr = NULL;
- if (s->avFrame != NULL) {
- avcodec_free_frame( &(s->avFrame) );
- }
- s->avFrame = NULL;
if (s->avCodecCtx != NULL) {
avcodec_close ( s->avCodecCtx );
}
if (s->avFormatCtx != NULL) {
avformat_close_input ( &(s->avFormatCtx) );
}
- s->avFrame = NULL;
s->avFormatCtx = NULL;
+ return AUBIO_OK;
+}
+
+void del_aubio_source_avcodec(aubio_source_avcodec_t * s){
+ if (!s) return;
+ aubio_source_avcodec_close(s);
+ if (s->output != NULL) {
+ av_free(s->output);
+ }
+ s->output = NULL;
+ if (s->avFrame != NULL) {
+ avcodec_free_frame( &(s->avFrame) );
+ }
+ s->avFrame = NULL;
AUBIO_FREE(s);
}
/**
+ close source
+
+ \param s source object, created with ::new_aubio_source_avcodec
+
+ \return 0 if sucessful, non-zero on failure
+
+*/
+uint_t aubio_source_avcodec_close (aubio_source_avcodec_t *s);
+
+/**
+
close source and cleanup memory
\param s source object, created with ::new_aubio_source_avcodec
return sf_seek (s->handle, resampled_pos, SEEK_SET);
}
-void del_aubio_source_sndfile(aubio_source_sndfile_t * s){
- if (!s) return;
- if (sf_close(s->handle)) {
+uint_t aubio_source_sndfile_close (aubio_source_sndfile_t *s) {
+ if (!s->handle) {
+ return AUBIO_FAIL;
+ if(sf_close(s->handle)) {
AUBIO_ERR("Error closing file %s: %s", s->path, sf_strerror (NULL));
+ return AUBIO_FAIL;
}
+ return AUBIO_OK;
+}
+
+void del_aubio_source_sndfile(aubio_source_sndfile_t * s){
+ if (!s) return;
+ aubio_source_sndfile_close(s):
#ifdef HAVE_SAMPLERATE
if (s->resampler != NULL) {
del_aubio_resampler(s->resampler);
/**
+ close source
+
+ \param s source object, created with ::new_aubio_source_sndfile
+
+ \return 0 if sucessful, non-zero on failure
+
+*/
+uint_t aubio_source_sndfile_close (aubio_source_sndfile_t *s);
+
+/**
+
close source and cleanup memory
\param s source object, created with ::new_aubio_source_sndfile
return ret;
}
+uint_t aubio_source_wavread_close (aubio_source_wavread_t * s) {
+ if (!s->fid || fclose(s->fid)) {
+ return AUBIO_FAIL;
+ }
+ return AUBIO_OK;
+}
+
void del_aubio_source_wavread(aubio_source_wavread_t * s) {
if (!s) return;
- if (s->fid) fclose(s->fid);
+ aubio_source_wavread_close(s);
if (s->short_output) AUBIO_FREE(s->short_output);
if (s->output) del_fmat(s->output);
AUBIO_FREE(s);
/**
+ close source
+
+ \param s source object, created with ::new_aubio_source_wavread
+
+ \return 0 if sucessful, non-zero on failure
+
+*/
+uint_t aubio_source_wavread_close (aubio_source_wavread_t *s);
+
+/**
+
close source and cleanup memory
\param s source object, created with ::new_aubio_source_wavread