projects
/
aubio.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
082c88b
)
src/io/sink*: add _close function, improve error messages
author
Paul Brossier
<piem@piem.org>
Sun, 26 Jan 2014 19:16:59 +0000
(16:16 -0300)
committer
Paul Brossier
<piem@piem.org>
Sun, 26 Jan 2014 19:16:59 +0000
(16:16 -0300)
src/io/sink.c
patch
|
blob
|
history
src/io/sink.h
patch
|
blob
|
history
src/io/sink_apple_audio.c
patch
|
blob
|
history
src/io/sink_apple_audio.h
patch
|
blob
|
history
src/io/sink_sndfile.c
patch
|
blob
|
history
src/io/sink_sndfile.h
patch
|
blob
|
history
src/io/sink_wavwrite.c
patch
|
blob
|
history
src/io/sink_wavwrite.h
patch
|
blob
|
history
diff --git
a/src/io/sink.c
b/src/io/sink.c
index
4eb6b6b
..
c38637e
100644
(file)
--- a/
src/io/sink.c
+++ b/
src/io/sink.c
@@
-38,6
+38,7
@@
typedef void (*aubio_sink_do_multi_t)(aubio_sink_t * s, fmat_t * data, uint_t *
typedef uint_t (*aubio_sink_get_samplerate_t)(aubio_sink_t * s);
typedef uint_t (*aubio_sink_get_channels_t)(aubio_sink_t * s);
#endif
typedef uint_t (*aubio_sink_get_samplerate_t)(aubio_sink_t * s);
typedef uint_t (*aubio_sink_get_channels_t)(aubio_sink_t * s);
#endif
+typedef uint_t (*aubio_sink_close_t)(aubio_sink_t * s);
typedef void (*del_aubio_sink_t)(aubio_sink_t * s);
struct _aubio_sink_t {
typedef void (*del_aubio_sink_t)(aubio_sink_t * s);
struct _aubio_sink_t {
@@
-48,6
+49,7
@@
struct _aubio_sink_t {
aubio_sink_get_samplerate_t s_get_samplerate;
aubio_sink_get_channels_t s_get_channels;
#endif
aubio_sink_get_samplerate_t s_get_samplerate;
aubio_sink_get_channels_t s_get_channels;
#endif
+ aubio_sink_close_t s_close;
del_aubio_sink_t s_del;
};
del_aubio_sink_t s_del;
};
@@
-57,6
+59,7
@@
aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
s->sink = (void *)new_aubio_sink_apple_audio(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_apple_audio_do);
s->sink = (void *)new_aubio_sink_apple_audio(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_apple_audio_do);
+ s->s_close = (aubio_sink_close_t)(aubio_sink_apple_audio_close);
s->s_del = (del_aubio_sink_t)(del_aubio_sink_apple_audio);
return s;
}
s->s_del = (del_aubio_sink_t)(del_aubio_sink_apple_audio);
return s;
}
@@
-65,6
+68,7
@@
aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
s->sink = (void *)new_aubio_sink_sndfile(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_sndfile_do);
s->sink = (void *)new_aubio_sink_sndfile(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_sndfile_do);
+ s->s_close = (aubio_sink_close_t)(aubio_sink_sndfile_close);
s->s_del = (del_aubio_sink_t)(del_aubio_sink_sndfile);
return s;
}
s->s_del = (del_aubio_sink_t)(del_aubio_sink_sndfile);
return s;
}
@@
-73,11
+77,13
@@
aubio_sink_t * new_aubio_sink(char_t * uri, uint_t samplerate) {
s->sink = (void *)new_aubio_sink_wavwrite(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_wavwrite_do);
s->sink = (void *)new_aubio_sink_wavwrite(uri, samplerate);
if (s->sink) {
s->s_do = (aubio_sink_do_t)(aubio_sink_wavwrite_do);
+ s->s_close = (aubio_sink_close_t)(aubio_sink_wavwrite_close);
s->s_del = (del_aubio_sink_t)(del_aubio_sink_wavwrite);
return s;
}
#endif /* HAVE_WAVWRITE */
s->s_del = (del_aubio_sink_t)(del_aubio_sink_wavwrite);
return s;
}
#endif /* HAVE_WAVWRITE */
- AUBIO_ERROR("sink: failed creating aubio sink with %s\n", uri);
+ AUBIO_ERROR("sink: failed creating %s with samplerate %dHz\n",
+ uri, samplerate);
AUBIO_FREE(s);
return NULL;
}
AUBIO_FREE(s);
return NULL;
}
@@
-86,6
+92,10
@@
void aubio_sink_do(aubio_sink_t * s, fvec_t * write_data, uint_t write) {
s->s_do((void *)s->sink, write_data, write);
}
s->s_do((void *)s->sink, write_data, write);
}
+uint_t aubio_sink_close(aubio_sink_t *s) {
+ return s->s_close((void *)s->sink);
+}
+
void del_aubio_sink(aubio_sink_t * s) {
if (!s) return;
s->s_del((void *)s->sink);
void del_aubio_sink(aubio_sink_t * s) {
if (!s) return;
s->s_del((void *)s->sink);
diff --git
a/src/io/sink.h
b/src/io/sink.h
index
ef8cd90
..
1b12eb8
100644
(file)
--- a/
src/io/sink.h
+++ b/
src/io/sink.h
@@
-63,9
+63,20
@@
void aubio_sink_do(aubio_sink_t * s, fvec_t * write_data, uint_t write);
/**
/**
+ close sink
+
+ \param s sink object, created with ::new_aubio_sink
+
+ \return 0 on success, non-zero on failure
+
+*/
+uint_t aubio_sink_close(aubio_sink_t * s);
+
+/**
+
close sink and cleanup memory
close sink and cleanup memory
- \param s s
ource object, created with ::new_aubio_source
+ \param s s
ink object, created with ::new_aubio_sink
*/
void del_aubio_sink(aubio_sink_t * s);
*/
void del_aubio_sink(aubio_sink_t * s);
diff --git
a/src/io/sink_apple_audio.c
b/src/io/sink_apple_audio.c
index
cd030c1
..
ebc94a2
100644
(file)
--- a/
src/io/sink_apple_audio.c
+++ b/
src/io/sink_apple_audio.c
@@
-141,11
+141,10
@@
void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data
return;
}
return;
}
-
void del_aubio_sink_apple_audio
(aubio_sink_apple_audio_t * s) {
+
uint_t aubio_sink_apple_audio_close
(aubio_sink_apple_audio_t * s) {
OSStatus err = noErr;
OSStatus err = noErr;
- if (!s || !s->audioFile) {
- AUBIO_ERR("sink_apple_audio: failed erasing\n");
- return;
+ if (!s->audioFile) {
+ return AUBIO_FAIL;
}
err = ExtAudioFileDispose(s->audioFile);
if (err) {
}
err = ExtAudioFileDispose(s->audioFile);
if (err) {
@@
-155,6
+154,11
@@
void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s) {
getPrintableOSStatusError(errorstr, err));
}
s->audioFile = NULL;
getPrintableOSStatusError(errorstr, err));
}
s->audioFile = NULL;
+ return err;
+}
+
+void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s) {
+ if (s->audioFile) aubio_sink_apple_audio_close (s);
freeAudioBufferList(&s->bufferList);
AUBIO_FREE(s);
return;
freeAudioBufferList(&s->bufferList);
AUBIO_FREE(s);
return;
diff --git
a/src/io/sink_apple_audio.h
b/src/io/sink_apple_audio.h
index
b26fefe
..
f30e3ea
100644
(file)
--- a/
src/io/sink_apple_audio.h
+++ b/
src/io/sink_apple_audio.h
@@
-68,6
+68,17
@@
void aubio_sink_apple_audio_do(aubio_sink_apple_audio_t * s, fvec_t * write_data
/**
/**
+ close sink
+
+ \param s sink_apple_audio object, created with ::new_aubio_sink_apple_audio
+
+ \return 0 on success, non-zero on failure
+
+*/
+uint_t aubio_sink_apple_audio_close(aubio_sink_apple_audio_t * s);
+
+/**
+
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_apple_audio
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_apple_audio
diff --git
a/src/io/sink_sndfile.c
b/src/io/sink_sndfile.c
index
8437e05
..
1114365
100644
(file)
--- a/
src/io/sink_sndfile.c
+++ b/
src/io/sink_sndfile.c
@@
-115,11
+115,21
@@
void aubio_sink_sndfile_do(aubio_sink_sndfile_t *s, fvec_t * write_data, uint_t
return;
}
return;
}
-void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s){
- if (!s) return;
+uint_t aubio_sink_sndfile_close (aubio_sink_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));
if (sf_close(s->handle)) {
AUBIO_ERR("Error closing file %s: %s", s->path, sf_strerror (NULL));
+ return AUBIO_FAIL;
}
}
+ s->handle = NULL;
+ return AUBIO_OK;
+}
+
+void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s){
+ if (!s) return;
+ aubio_sink_sndfile_close(s);
AUBIO_FREE(s->scratch_data);
AUBIO_FREE(s);
}
AUBIO_FREE(s->scratch_data);
AUBIO_FREE(s);
}
diff --git
a/src/io/sink_sndfile.h
b/src/io/sink_sndfile.h
index
c767e1d
..
ada74cb
100644
(file)
--- a/
src/io/sink_sndfile.h
+++ b/
src/io/sink_sndfile.h
@@
-67,6
+67,17
@@
void aubio_sink_sndfile_do(aubio_sink_sndfile_t * s, fvec_t * write_data, uint_t
/**
/**
+ close sink
+
+ \param s sink_sndfile object, created with ::new_aubio_sink_sndfile
+
+ \return 0 on success, non-zero on failure
+
+*/
+uint_t aubio_sink_sndfile_close(aubio_sink_sndfile_t * s);
+
+/**
+
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_sndfile
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_sndfile
diff --git
a/src/io/sink_wavwrite.c
b/src/io/sink_wavwrite.c
index
5c1f380
..
908f660
100644
(file)
--- a/
src/io/sink_wavwrite.c
+++ b/
src/io/sink_wavwrite.c
@@
-152,8
+152,8
@@
aubio_sink_wavwrite_t * new_aubio_sink_wavwrite(char_t * path, uint_t samplerate
return s;
beach:
return s;
beach:
-
AUBIO_ERR("sink_wavwrite: can not write %s at
samplerate %dHz\n",
- s->path, s->samplerate);
+
//AUBIO_ERR("sink_wavwrite: failed creating %s with
samplerate %dHz\n",
+
//
s->path, s->samplerate);
del_aubio_sink_wavwrite(s);
return NULL;
}
del_aubio_sink_wavwrite(s);
return NULL;
}
@@
-181,10
+181,10
@@
void aubio_sink_wavwrite_do(aubio_sink_wavwrite_t *s, fvec_t * write_data, uint_
return;
}
return;
}
-
void
aubio_sink_wavwrite_close(aubio_sink_wavwrite_t * s) {
+
uint_t
aubio_sink_wavwrite_close(aubio_sink_wavwrite_t * s) {
uint_t data_size = s->total_frames_written * s->bitspersample * s->channels / 8;
unsigned char buf[5];
uint_t data_size = s->total_frames_written * s->bitspersample * s->channels / 8;
unsigned char buf[5];
- if (!s->fid) return;
+ if (!s->fid) return
AUBIO_FAIL
;
// ChunkSize
fseek(s->fid, 4, SEEK_SET);
fwrite(write_little_endian(data_size + 36, buf, 4), 4, 1, s->fid);
// ChunkSize
fseek(s->fid, 4, SEEK_SET);
fwrite(write_little_endian(data_size + 36, buf, 4), 4, 1, s->fid);
@@
-196,6
+196,7
@@
void aubio_sink_wavwrite_close(aubio_sink_wavwrite_t * s) {
AUBIO_ERR("sink_wavwrite: Error closing file %s (%s)\n", s->path, strerror(errno));
}
s->fid = NULL;
AUBIO_ERR("sink_wavwrite: Error closing file %s (%s)\n", s->path, strerror(errno));
}
s->fid = NULL;
+ return AUBIO_OK;
}
void del_aubio_sink_wavwrite(aubio_sink_wavwrite_t * s){
}
void del_aubio_sink_wavwrite(aubio_sink_wavwrite_t * s){
diff --git
a/src/io/sink_wavwrite.h
b/src/io/sink_wavwrite.h
index
9f73144
..
01008cd
100644
(file)
--- a/
src/io/sink_wavwrite.h
+++ b/
src/io/sink_wavwrite.h
@@
-67,6
+67,17
@@
void aubio_sink_wavwrite_do(aubio_sink_wavwrite_t * s, fvec_t * write_data, uint
/**
/**
+ close sink
+
+ \param s sink_wavwrite object, create with ::new_aubio_sink_wavwrite
+
+ \return 0 on success, non-zero on failure
+
+*/
+uint_t aubio_sink_wavwrite_close(aubio_sink_wavwrite_t * s);
+
+/**
+
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_wavwrite
close sink and cleanup memory
\param s sink, created with ::new_aubio_sink_wavwrite