Changes in / [0440778:e6a5aa5]
- Files:
-
- 6 added
- 2 deleted
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/aubio_priv.h ¶
r0440778 re6a5aa5 368 368 #endif /* __STRICT_ANSI__ */ 369 369 370 #if defined(DEBUG)371 #include <assert.h>372 #define AUBIO_ASSERT(x) assert(x)373 #else374 #define AUBIO_ASSERT(x)375 #endif /* DEBUG */376 377 370 #endif /* AUBIO_PRIV_H */ -
TabularUnified src/io/ioutils.c ¶
r0440778 re6a5aa5 52 52 return AUBIO_OK; 53 53 } 54 55 uint_t56 aubio_sink_validate_input_length(const char_t *kind, const char_t *path,57 uint_t max_size, uint_t write_data_length, uint_t write)58 {59 uint_t can_write = write;60 61 if (write > max_size) {62 AUBIO_WRN("%s: partial write to %s, trying to write %d frames,"63 " at most %d can be written at once\n", kind, path, write, max_size);64 can_write = max_size;65 }66 67 if (can_write > write_data_length) {68 AUBIO_WRN("%s: partial write to %s, trying to write %d frames,"69 " but found input of length %d\n", kind, path, write,70 write_data_length);71 can_write = write_data_length;72 }73 74 return can_write;75 }76 77 uint_t78 aubio_sink_validate_input_channels(const char_t *kind, const char_t *path,79 uint_t sink_channels, uint_t write_data_height)80 {81 uint_t channels = sink_channels;82 if (write_data_height < sink_channels) {83 AUBIO_WRN("%s: partial write to %s, trying to write %d channels,"84 " but found input of height %d\n", kind, path, sink_channels,85 write_data_height);86 channels = write_data_height;87 }88 return channels;89 } -
TabularUnified src/io/ioutils.h ¶
r0440778 re6a5aa5 54 54 uint_t channels); 55 55 56 /** validate length of input57 58 \param kind the object kind to report on59 \param path the path to report on60 \param max_size maximum number of frames that can be written61 \param write_data_length actual length of input vector/matrix62 \param write number of samples asked63 64 \return write or the maximum number of frames that can be written65 */66 uint_t67 aubio_sink_validate_input_length(const char_t *kind, const char_t *path,68 uint_t max_size, uint_t write_data_length, uint_t write);69 70 /** validate height of input71 72 \param kind the object kind to report on73 \param path the path to report on74 \param max_size maximum number of channels that can be written75 \param write_data_height actual height of input matrix76 77 \return write_data_height or the maximum number of channels78 */79 uint_t80 aubio_sink_validate_input_channels(const char_t *kind, const char_t *path,81 uint_t sink_channels, uint_t write_data_height);82 83 56 #ifdef __cplusplus 84 57 } -
TabularUnified src/io/sink.c ¶
r0440778 re6a5aa5 103 103 AUBIO_ERROR("sink: failed creating '%s' at %dHz (no sink built-in)\n", uri, samplerate); 104 104 #endif 105 del_aubio_sink(s);105 AUBIO_FREE(s); 106 106 return NULL; 107 107 } … … 136 136 137 137 void del_aubio_sink(aubio_sink_t * s) { 138 AUBIO_ASSERT(s); 139 if (s->s_del && s->sink) 140 s->s_del((void *)s->sink); 138 if (!s) return; 139 s->s_del((void *)s->sink); 141 140 AUBIO_FREE(s); 141 return; 142 142 } -
TabularUnified src/io/sink_apple_audio.c ¶
r0440778 re6a5aa5 62 62 s->async = false; 63 63 64 if ( (uri == NULL) || (str nlen(uri, PATH_MAX) < 1) ) {64 if ( (uri == NULL) || (strlen(uri) < 1) ) { 65 65 AUBIO_ERROR("sink_apple_audio: Aborted opening null path\n"); 66 66 goto beach; 67 67 } 68 68 if (s->path != NULL) AUBIO_FREE(s->path); 69 69 s->path = AUBIO_ARRAY(char_t, strnlen(uri, PATH_MAX) + 1); 70 70 strncpy(s->path, uri, strnlen(uri, PATH_MAX) + 1); … … 92 92 return s; 93 93 beach: 94 del_aubio_sink_apple_audio(s);94 AUBIO_FREE(s); 95 95 return NULL; 96 96 } … … 103 103 s->samplerate = samplerate; 104 104 // automatically open when both samplerate and channels have been set 105 if ( /* s->samplerate != 0 && */s->channels != 0) {105 if (s->samplerate != 0 && s->channels != 0) { 106 106 return aubio_sink_apple_audio_open(s); 107 107 } … … 116 116 s->channels = channels; 117 117 // automatically open when both samplerate and channels have been set 118 if (s->samplerate != 0 /* && s->channels != 0 */) {118 if (s->samplerate != 0 && s->channels != 0) { 119 119 return aubio_sink_apple_audio_open(s); 120 120 } … … 176 176 UInt32 c, v; 177 177 short *data = (short*)s->bufferList.mBuffers[0].mData; 178 uint_t length = aubio_sink_validate_input_length("sink_apple_audio", s->path, 179 s->max_frames, write_data->length, write); 180 181 for (c = 0; c < s->channels; c++) { 182 for (v = 0; v < length; v++) { 183 data[v * s->channels + c] = FLOAT_TO_SHORT(write_data->data[v]); 184 } 185 } 186 187 aubio_sink_apple_audio_write(s, length); 178 if (write > s->max_frames) { 179 AUBIO_WRN("sink_apple_audio: trying to write %d frames, max %d\n", write, s->max_frames); 180 write = s->max_frames; 181 } 182 smpl_t *buf = write_data->data; 183 184 if (buf) { 185 for (c = 0; c < s->channels; c++) { 186 for (v = 0; v < write; v++) { 187 data[v * s->channels + c] = 188 FLOAT_TO_SHORT(buf[ v * s->channels + c]); 189 } 190 } 191 } 192 aubio_sink_apple_audio_write(s, write); 188 193 } 189 194 … … 191 196 UInt32 c, v; 192 197 short *data = (short*)s->bufferList.mBuffers[0].mData; 193 uint_t channels = aubio_sink_validate_input_channels("sink_apple_audio", 194 s->path, s->channels, write_data->height); 195 uint_t length = aubio_sink_validate_input_length("sink_apple_audio", s->path, 196 s->max_frames, write_data->length, write); 197 198 for (c = 0; c < channels; c++) { 199 for (v = 0; v < length; v++) { 200 data[v * s->channels + c] = FLOAT_TO_SHORT(write_data->data[c][v]); 201 } 202 } 203 204 aubio_sink_apple_audio_write(s, length); 198 if (write > s->max_frames) { 199 AUBIO_WRN("sink_apple_audio: trying to write %d frames, max %d\n", write, s->max_frames); 200 write = s->max_frames; 201 } 202 smpl_t **buf = write_data->data; 203 204 if (buf) { 205 for (c = 0; c < s->channels; c++) { 206 for (v = 0; v < write; v++) { 207 data[v * s->channels + c] = 208 FLOAT_TO_SHORT(buf[c][v]); 209 } 210 } 211 } 212 aubio_sink_apple_audio_write(s, write); 205 213 } 206 214 … … 250 258 251 259 void del_aubio_sink_apple_audio(aubio_sink_apple_audio_t * s) { 252 AUBIO_ASSERT(s); 253 if (s->audioFile) 254 aubio_sink_apple_audio_close (s); 255 if (s->path) 256 AUBIO_FREE(s->path); 260 if (s->audioFile) aubio_sink_apple_audio_close (s); 261 if (s->path) AUBIO_FREE(s->path); 257 262 freeAudioBufferList(&s->bufferList); 258 263 AUBIO_FREE(s); 264 return; 259 265 } 260 266 -
TabularUnified src/io/sink_sndfile.c ¶
r0440778 re6a5aa5 59 59 if (path == NULL) { 60 60 AUBIO_ERR("sink_sndfile: Aborted opening null path\n"); 61 goto beach; 62 } 63 61 return NULL; 62 } 63 64 if (s->path) AUBIO_FREE(s->path); 64 65 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 65 66 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 97 98 s->samplerate = samplerate; 98 99 // automatically open when both samplerate and channels have been set 99 if ( /* s->samplerate != 0 && */s->channels != 0) {100 if (s->samplerate != 0 && s->channels != 0) { 100 101 return aubio_sink_sndfile_open(s); 101 102 } … … 110 111 s->channels = channels; 111 112 // automatically open when both samplerate and channels have been set 112 if (s->samplerate != 0 /* && s->channels != 0 */) {113 if (s->samplerate != 0 && s->channels != 0) { 113 114 return aubio_sink_sndfile_open(s); 114 115 } … … 147 148 /* allocate data for de/interleaving reallocated when needed. */ 148 149 if (s->scratch_size >= MAX_SIZE * AUBIO_MAX_CHANNELS) { 149 AUBIO_ERR("sink_sndfile: %d x %d exceeds maximum buffer size %d\n", 150 abort(); 151 AUBIO_ERR("sink_sndfile: %d x %d exceeds maximum aubio_sink_sndfile buffer size %d\n", 150 152 s->max_size, s->channels, MAX_SIZE * AUBIO_MAX_CHANNELS); 151 153 return AUBIO_FAIL; … … 157 159 158 160 void aubio_sink_sndfile_do(aubio_sink_sndfile_t *s, fvec_t * write_data, uint_t write){ 159 uint_t i, j; 161 uint_t i, j, channels = s->channels; 162 int nsamples = 0; 163 smpl_t *pwrite; 160 164 sf_count_t written_frames; 161 uint_t channels = s->channels; 162 uint_t length = aubio_sink_validate_input_length("sink_sndfile", s->path, 163 s->max_size, write_data->length, write); 164 int nsamples = channels * length; 165 166 if (write > s->max_size) { 167 AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n", 168 write, s->max_size); 169 write = s->max_size; 170 } 171 172 nsamples = channels * write; 165 173 166 174 /* interleaving data */ 167 175 for ( i = 0; i < channels; i++) { 168 for (j = 0; j < length; j++) { 169 s->scratch_data[channels*j+i] = write_data->data[j]; 176 pwrite = (smpl_t *)write_data->data; 177 for (j = 0; j < write; j++) { 178 s->scratch_data[channels*j+i] = pwrite[j]; 170 179 } 171 180 } … … 180 189 181 190 void aubio_sink_sndfile_do_multi(aubio_sink_sndfile_t *s, fmat_t * write_data, uint_t write){ 182 uint_t i, j; 191 uint_t i, j, channels = s->channels; 192 int nsamples = 0; 193 smpl_t *pwrite; 183 194 sf_count_t written_frames; 184 uint_t channels = aubio_sink_validate_input_channels("sink_sndfile", s->path, 185 s->channels, write_data->height); 186 uint_t length = aubio_sink_validate_input_length("sink_sndfile", s->path, 187 s->max_size, write_data->length, write); 188 int nsamples = channels * length; 195 196 if (write > s->max_size) { 197 AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n", 198 write, s->max_size); 199 write = s->max_size; 200 } 201 202 nsamples = channels * write; 189 203 190 204 /* interleaving data */ 191 for ( i = 0; i < channels; i++) { 192 for (j = 0; j < length; j++) { 193 s->scratch_data[channels*j+i] = write_data->data[i][j]; 205 for ( i = 0; i < write_data->height; i++) { 206 pwrite = (smpl_t *)write_data->data[i]; 207 for (j = 0; j < write; j++) { 208 s->scratch_data[channels*j+i] = pwrite[j]; 194 209 } 195 210 } … … 216 231 217 232 void del_aubio_sink_sndfile(aubio_sink_sndfile_t * s){ 218 AUBIO_ASSERT(s); 219 if (s->handle) 220 aubio_sink_sndfile_close(s); 221 if (s->path) 222 AUBIO_FREE(s->path); 223 if (s->scratch_data) 224 AUBIO_FREE(s->scratch_data); 233 if (!s) return; 234 if (s->path) AUBIO_FREE(s->path); 235 aubio_sink_sndfile_close(s); 236 AUBIO_FREE(s->scratch_data); 225 237 AUBIO_FREE(s); 226 238 } -
TabularUnified src/io/sink_vorbis.c ¶
r0440778 re6a5aa5 36 36 #include <errno.h> // errno 37 37 #include <time.h> // time 38 39 #define MAX_SIZE 204840 38 41 39 struct _aubio_sink_vorbis_t { … … 69 67 aubio_sink_vorbis_t * s = AUBIO_NEW(aubio_sink_vorbis_t); 70 68 71 if (!uri) {72 AUBIO_ERROR("sink_apple_audio: Aborted opening null path\n");73 goto failure;74 }75 76 69 s->path = AUBIO_ARRAY(char_t, strnlen(uri, PATH_MAX) + 1); 77 70 strncpy(s->path, uri, strnlen(uri, PATH_MAX) + 1); … … 117 110 118 111 s->fid = fopen((const char *)s->path, "wb"); 119 if (!s->fid) { 120 AUBIO_ERR("sink_vorbis: Error opening file %s (%s)\n", 121 s->path, strerror(errno)); 122 return AUBIO_FAIL; 123 } 112 if (!s->fid) return AUBIO_FAIL; 124 113 125 114 vorbis_info_init(&s->vi); … … 145 134 { 146 135 int ret = 0; 147 size_t wrote;148 136 ogg_packet header; 149 137 ogg_packet header_comm; … … 162 150 ret = ogg_stream_flush(&s->os, &s->og); 163 151 if (ret==0) break; 164 wrote = fwrite(s->og.header, 1, s->og.header_len, s->fid); 165 ret = (wrote == (unsigned)s->og.header_len); 166 wrote = fwrite(s->og.body, 1, s->og.body_len, s->fid); 167 ret &= (wrote == (unsigned)s->og.body_len); 168 if (ret == 0) { 169 AUBIO_ERR("sink_vorbis: failed writing \'%s\' to disk (%s)\n", 170 s->path, strerror(errno)); 171 return AUBIO_FAIL; 172 } 152 fwrite(s->og.header, 1, s->og.header_len, s->fid); 153 fwrite(s->og.body, 1, s->og.body_len, s->fid); 173 154 } 174 155 } … … 183 164 return AUBIO_FAIL; 184 165 s->samplerate = samplerate; 185 if ( /* s->samplerate != 0 && */s->channels != 0)166 if (s->samplerate != 0 && s->channels != 0) 186 167 return aubio_sink_vorbis_open(s); 187 168 return AUBIO_OK; … … 196 177 s->channels = channels; 197 178 // automatically open when both samplerate and channels have been set 198 if (s->samplerate != 0 /* && s->channels != 0 */) {179 if (s->samplerate != 0 && s->channels != 0) { 199 180 return aubio_sink_vorbis_open(s); 200 181 } … … 214 195 void aubio_sink_vorbis_write(aubio_sink_vorbis_t *s) 215 196 { 216 int result;217 size_t wrote;218 197 // pre-analysis 219 198 while (vorbis_analysis_blockout(&s->vd, &s->vb) == 1) { … … 227 206 228 207 while (1) { 229 result = ogg_stream_pageout (&s->os, &s->og);208 int result = ogg_stream_pageout (&s->os, &s->og); 230 209 if (result == 0) break; 231 wrote = fwrite(s->og.header, 1, s->og.header_len, s->fid); 232 result = (wrote == (unsigned)s->og.header_len); 233 wrote = fwrite(s->og.body, 1, s->og.body_len, s->fid); 234 result &= (wrote == (unsigned)s->og.body_len); 235 if (result == 0) { 236 AUBIO_WRN("sink_vorbis: failed writing \'%s\' to disk (%s)\n", 237 s->path, strerror(errno)); 238 } 210 fwrite(s->og.header, 1, s->og.header_len, s->fid); 211 fwrite(s->og.body, 1, s->og.body_len, s->fid); 239 212 if (ogg_page_eos(&s->og)) break; 240 213 } … … 247 220 { 248 221 uint_t c, v; 249 uint_t length = aubio_sink_validate_input_length("sink_vorbis", s->path, 250 MAX_SIZE, write_data->length, write); 251 float **buffer = vorbis_analysis_buffer(&s->vd, (long)length); 222 float **buffer = vorbis_analysis_buffer(&s->vd, (long)write); 252 223 // fill buffer 253 224 if (!write) { … … 258 229 } else { 259 230 for (c = 0; c < s->channels; c++) { 260 for (v = 0; v < length; v++) {231 for (v = 0; v < write; v++) { 261 232 buffer[c][v] = write_data->data[v]; 262 233 } 263 234 } 264 235 // tell vorbis how many frames were written 265 vorbis_analysis_wrote(&s->vd, (long) length);236 vorbis_analysis_wrote(&s->vd, (long)write); 266 237 } 267 238 // write to file … … 273 244 { 274 245 uint_t c, v; 275 uint_t channels = aubio_sink_validate_input_channels("sink_vorbis", s->path, 276 s->channels, write_data->height); 277 uint_t length = aubio_sink_validate_input_length("sink_vorbis", s->path, 278 MAX_SIZE, write_data->length, write); 279 float **buffer = vorbis_analysis_buffer(&s->vd, (long)length); 246 uint_t channels = MIN(s->channels, write_data->height); 247 float **buffer = vorbis_analysis_buffer(&s->vd, (long)write); 280 248 // fill buffer 281 249 if (!write) { … … 286 254 } else { 287 255 for (c = 0; c < channels; c++) { 288 for (v = 0; v < length; v++) {256 for (v = 0; v < write; v++) { 289 257 buffer[c][v] = write_data->data[c][v]; 290 258 } … … 299 267 uint_t aubio_sink_vorbis_close (aubio_sink_vorbis_t *s) 300 268 { 301 if (!s->fid) return AUBIO_FAIL;302 269 //mark the end of stream 303 270 vorbis_analysis_wrote(&s->vd, 0); … … 305 272 aubio_sink_vorbis_write(s); 306 273 307 if ( s->fid &&fclose(s->fid)) {274 if (fclose(s->fid)) { 308 275 AUBIO_ERR("sink_vorbis: Error closing file %s (%s)\n", 309 276 s->path, strerror(errno)); 310 277 return AUBIO_FAIL; 311 278 } 312 s->fid = NULL;313 279 return AUBIO_OK; 314 280 } -
TabularUnified src/io/sink_wavwrite.c ¶
r0440778 re6a5aa5 88 88 goto beach; 89 89 } 90 90 if ((sint_t)samplerate < 0) { 91 AUBIO_ERR("sink_wavwrite: Can not create %s with samplerate %d\n", path, samplerate); 92 goto beach; 93 } 94 95 if (s->path) AUBIO_FREE(s->path); 91 96 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 92 97 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 131 136 s->samplerate = samplerate; 132 137 // automatically open when both samplerate and channels have been set 133 if ( /* s->samplerate != 0 && */s->channels != 0) {138 if (s->samplerate != 0 && s->channels != 0) { 134 139 return aubio_sink_wavwrite_open(s); 135 140 } … … 144 149 s->channels = channels; 145 150 // automatically open when both samplerate and channels have been set 146 if (s->samplerate != 0 /* && s->channels != 0 */) {151 if (s->samplerate != 0 && s->channels != 0) { 147 152 return aubio_sink_wavwrite_open(s); 148 153 } … … 229 234 230 235 void aubio_sink_wavwrite_do(aubio_sink_wavwrite_t *s, fvec_t * write_data, uint_t write){ 231 uint_t c = 0, i = 0, written_frames = 0; 232 uint_t length = aubio_sink_validate_input_length("sink_wavwrite", s->path, 233 s->max_size, write_data->length, write); 234 235 for (c = 0; c < s->channels; c++) { 236 for (i = 0; i < length; i++) { 237 s->scratch_data[i * s->channels + c] = HTOLES(FLOAT_TO_SHORT(write_data->data[i])); 238 } 239 } 240 written_frames = fwrite(s->scratch_data, 2, length * s->channels, s->fid); 236 uint_t i = 0, written_frames = 0; 237 238 if (write > s->max_size) { 239 AUBIO_WRN("sink_wavwrite: trying to write %d frames to %s, " 240 "but only %d can be written at a time\n", write, s->path, s->max_size); 241 write = s->max_size; 242 } 243 244 for (i = 0; i < write; i++) { 245 s->scratch_data[i] = HTOLES(FLOAT_TO_SHORT(write_data->data[i])); 246 } 247 written_frames = fwrite(s->scratch_data, 2, write, s->fid); 241 248 242 249 if (written_frames != write) { … … 251 258 uint_t c = 0, i = 0, written_frames = 0; 252 259 253 uint_t channels = aubio_sink_validate_input_channels("sink_wavwrite", s->path, 254 s->channels, write_data->height); 255 uint_t length = aubio_sink_validate_input_length("sink_wavwrite", s->path, 256 s->max_size, write_data->length, write); 257 258 for (c = 0; c < channels; c++) { 259 for (i = 0; i < length; i++) { 260 if (write > s->max_size) { 261 AUBIO_WRN("sink_wavwrite: trying to write %d frames to %s, " 262 "but only %d can be written at a time\n", write, s->path, s->max_size); 263 write = s->max_size; 264 } 265 266 for (c = 0; c < s->channels; c++) { 267 for (i = 0; i < write; i++) { 260 268 s->scratch_data[i * s->channels + c] = HTOLES(FLOAT_TO_SHORT(write_data->data[c][i])); 261 269 } 262 270 } 263 written_frames = fwrite(s->scratch_data, 2, length* s->channels, s->fid);271 written_frames = fwrite(s->scratch_data, 2, write * s->channels, s->fid); 264 272 265 273 if (written_frames != write * s->channels) { … … 290 298 291 299 void del_aubio_sink_wavwrite(aubio_sink_wavwrite_t * s){ 292 AUBIO_ASSERT(s); 293 if (s->fid) 294 aubio_sink_wavwrite_close(s); 295 if (s->path) 296 AUBIO_FREE(s->path); 297 if (s->scratch_data) 298 AUBIO_FREE(s->scratch_data); 300 if (!s) return; 301 aubio_sink_wavwrite_close(s); 302 if (s->path) AUBIO_FREE(s->path); 303 AUBIO_FREE(s->scratch_data); 299 304 AUBIO_FREE(s); 300 305 } -
TabularUnified src/io/source.c ¶
r0440778 re6a5aa5 122 122 " (no source built-in)\n", uri, samplerate, hop_size); 123 123 #endif 124 del_aubio_source(s);124 AUBIO_FREE(s); 125 125 return NULL; 126 126 } … … 139 139 140 140 void del_aubio_source(aubio_source_t * s) { 141 AUBIO_ASSERT(s); 142 if (s->s_del && s->source) 143 s->s_del((void *)s->source); 141 if (!s) return; 142 s->s_del((void *)s->source); 144 143 AUBIO_FREE(s); 145 144 } -
TabularUnified src/io/source.h ¶
r0440778 re6a5aa5 60 60 61 61 \example io/test-source.c 62 \example io/test-source_multi.c 62 63 63 64 */ -
TabularUnified src/io/source_apple_audio.c ¶
r0440778 re6a5aa5 60 60 aubio_source_apple_audio_t * s = AUBIO_NEW(aubio_source_apple_audio_t); 61 61 62 if (path == NULL || strnlen(path, PATH_MAX) < 1) {62 if (path == NULL) { 63 63 AUBIO_ERROR("source_apple_audio: Aborted opening null path\n"); 64 64 goto beach; … … 86 86 87 87 beach: 88 del_aubio_source_apple_audio(s);88 AUBIO_FREE(s); 89 89 return NULL; 90 90 } … … 95 95 UInt32 propSize; 96 96 97 if (s->path) AUBIO_FREE(s->path); 97 98 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 98 99 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 293 294 294 295 void del_aubio_source_apple_audio(aubio_source_apple_audio_t * s){ 295 AUBIO_ASSERT(s);296 296 aubio_source_apple_audio_close (s); 297 297 if (s->path) AUBIO_FREE(s->path); 298 298 freeAudioBufferList(&s->bufferList); 299 299 AUBIO_FREE(s); 300 return; 300 301 } 301 302 -
TabularUnified src/io/source_avcodec.c ¶
r0440778 re6a5aa5 45 45 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57,0,0) 46 46 #define HAVE_AUBIO_LIBAVCODEC_DEPRECATED 1 47 #endif48 49 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58,3,102)50 #define HAVE_AUBIO_LIBAVCODEC_TIMEBASE_FIX 151 47 #endif 52 48 … … 148 144 s->channels = 1; 149 145 146 if (s->path) AUBIO_FREE(s->path); 150 147 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 151 148 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 243 240 goto beach; 244 241 } 245 #if HAVE_AUBIO_LIBAVCODEC_TIMEBASE_FIX246 // avoids 'skipped frames warning' with avecodec < 58, deprecated after247 av_codec_set_pkt_timebase(avCodecCtx,248 avFormatCtx->streams[selected_stream]->time_base);249 #endif250 242 #endif 251 243 … … 639 631 640 632 void del_aubio_source_avcodec(aubio_source_avcodec_t * s){ 641 AUBIO_ASSERT(s);633 if (!s) return; 642 634 aubio_source_avcodec_close(s); 643 635 if (s->output != NULL) { -
TabularUnified src/io/source_sndfile.c ¶
r0440778 re6a5aa5 87 87 s->channels = 1; 88 88 89 if (s->path) AUBIO_FREE(s->path); 89 90 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 90 91 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 331 332 332 333 void del_aubio_source_sndfile(aubio_source_sndfile_t * s){ 333 AUBIO_ASSERT(s);334 if (!s) return; 334 335 aubio_source_sndfile_close(s); 335 336 #ifdef HAVE_SAMPLERATE -
TabularUnified src/io/source_wavread.c ¶
r0440778 re6a5aa5 92 92 } 93 93 94 if (s->path) AUBIO_FREE(s->path); 94 95 s->path = AUBIO_ARRAY(char_t, strnlen(path, PATH_MAX) + 1); 95 96 strncpy(s->path, path, strnlen(path, PATH_MAX) + 1); … … 471 472 472 473 void del_aubio_source_wavread(aubio_source_wavread_t * s) { 473 AUBIO_ASSERT(s);474 if (!s) return; 474 475 aubio_source_wavread_close(s); 475 476 if (s->short_output) AUBIO_FREE(s->short_output); -
TabularUnified tests/src/io/test-sink.c ¶
r0440778 re6a5aa5 2 2 #include "utils_tests.h" 3 3 4 int test_wrong_params(void); 4 int main (int argc, char **argv) 5 { 6 sint_t err = 0; 5 7 6 int main(int argc, char **argv) 7 { 8 uint_t err = 0; 9 if (argc < 3 || argc >= 6) { 10 PRINT_ERR("wrong number of arguments, running tests\n"); 11 err = test_wrong_params(); 12 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", 13 argv[0]); 8 if (argc < 3) { 9 PRINT_ERR("not enough arguments, running tests\n"); 10 err = run_on_default_source_and_sink(main); 11 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 14 12 return err; 15 13 } … … 24 22 if ( argc >= 4 ) samplerate = atoi(argv[3]); 25 23 if ( argc >= 5 ) hop_size = atoi(argv[4]); 24 if ( argc >= 6 ) { 25 err = 2; 26 PRINT_ERR("too many arguments\n"); 27 return err; 28 } 26 29 27 30 fvec_t *vec = new_fvec(hop_size); 31 if (!vec) { err = 1; goto beach_fvec; } 28 32 29 33 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 34 if (!i) { err = 1; goto beach_source; } 35 30 36 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 31 37 32 38 aubio_sink_t *o = new_aubio_sink(sink_path, samplerate); 33 34 if (!vec || !i || !o) { err = 1; goto failure; } 39 if (!o) { err = 1; goto beach_sink; } 35 40 36 41 do { … … 40 45 } while ( read == hop_size ); 41 46 42 PRINT_MSG(" %d frames read at %dHz (%d blocks) from %s andwritten to %s\n",47 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 43 48 n_frames, samplerate, n_frames / hop_size, 44 49 source_path, sink_path); 45 50 46 // close sink now (optional) 47 aubio_sink_close(o); 48 49 failure: 50 if (o) 51 del_aubio_sink(o); 52 if (i) 53 del_aubio_source(i); 54 if (vec) 55 del_fvec(vec); 56 51 del_aubio_sink(o); 52 beach_sink: 53 del_aubio_source(i); 54 beach_source: 55 del_fvec(vec); 56 beach_fvec: 57 57 return err; 58 58 } 59 60 int test_wrong_params(void)61 {62 fvec_t *vec;63 fmat_t *mat;64 aubio_sink_t *s;65 char_t sink_path[PATH_MAX] = "tmp_aubio_XXXXXX";66 uint_t samplerate = 44100;67 uint_t hop_size = 256;68 uint_t oversized_hop_size = 4097;69 uint_t oversized_samplerate = 192000 * 8 + 1;70 uint_t channels = 3;71 uint_t oversized_channels = 1025;72 // create temp file73 int fd = create_temp_sink(sink_path);74 75 if (!fd) return 1;76 77 if (new_aubio_sink( 0, samplerate)) return 1;78 if (new_aubio_sink("\0", samplerate)) return 1;79 if (new_aubio_sink(sink_path, -1)) return 1;80 81 s = new_aubio_sink(sink_path, 0);82 83 // check setting wrong parameters fails84 if (!aubio_sink_preset_samplerate(s, oversized_samplerate)) return 1;85 if (!aubio_sink_preset_channels(s, oversized_channels)) return 1;86 if (!aubio_sink_preset_channels(s, -1)) return 1;87 88 // check setting valid parameters passes89 if (aubio_sink_preset_samplerate(s, samplerate)) return 1;90 if (aubio_sink_preset_channels(s, 1)) return 1;91 92 // check writing a vector with valid length93 vec = new_fvec(hop_size);94 aubio_sink_do(s, vec, hop_size);95 // check writing more than in the input96 aubio_sink_do(s, vec, hop_size+1);97 // check write 0 frames98 aubio_sink_do(s, vec, 0);99 del_fvec(vec);100 101 // check writing an oversized vector102 vec = new_fvec(oversized_hop_size);103 aubio_sink_do(s, vec, oversized_hop_size);104 del_fvec(vec);105 106 // test delete without closing107 del_aubio_sink(s);108 109 s = new_aubio_sink(sink_path, 0);110 111 // preset channels first112 if (aubio_sink_preset_channels(s, channels)) return 1;113 if (aubio_sink_preset_samplerate(s, samplerate)) return 1;114 115 if (aubio_sink_get_samplerate(s) != samplerate) return 1;116 if (aubio_sink_get_channels(s) != channels) return 1;117 118 mat = new_fmat(channels, hop_size);119 // check writing a vector with valid length120 aubio_sink_do_multi(s, mat, hop_size);121 // check writing 0 frames122 aubio_sink_do_multi(s, mat, 0);123 // check writing more than in the input124 aubio_sink_do_multi(s, mat, hop_size+1);125 del_fmat(mat);126 127 // check writing oversized input128 mat = new_fmat(channels, oversized_hop_size);129 aubio_sink_do_multi(s, mat, oversized_hop_size);130 del_fmat(mat);131 132 // check writing undersized input133 mat = new_fmat(channels - 1, hop_size);134 aubio_sink_do_multi(s, mat, hop_size);135 del_fmat(mat);136 137 aubio_sink_close(s);138 // test closing twice139 aubio_sink_close(s);140 141 del_aubio_sink(s);142 143 // delete temp file144 close_temp_sink(sink_path, fd);145 146 return run_on_default_source_and_sink(main);147 } -
TabularUnified tests/src/io/test-sink_apple_audio.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "apple_audio"6 7 #ifdef HAVE_SINK_APPLE_AUDIO8 #define HAVE_AUBIO_SINK_CUSTOM9 #define aubio_sink_custom_t aubio_sink_apple_audio_t10 #define new_aubio_sink_custom new_aubio_sink_apple_audio11 #define del_aubio_sink_custom del_aubio_sink_apple_audio12 #define aubio_sink_custom_do aubio_sink_apple_audio_do13 #define aubio_sink_custom_do_multi aubio_sink_apple_audio_do_multi14 #define aubio_sink_custom_close aubio_sink_apple_audio_close15 #define aubio_sink_custom_preset_samplerate aubio_sink_apple_audio_preset_samplerate16 #define aubio_sink_custom_preset_channels aubio_sink_apple_audio_preset_channels17 #define aubio_sink_custom_get_samplerate aubio_sink_apple_audio_get_samplerate18 #define aubio_sink_custom_get_channels aubio_sink_apple_audio_get_channels19 #endif /* HAVE_SINK_APPLE_AUDIO */20 21 #include "base-sink_custom.h"22 4 23 5 // this file uses the unstable aubio api, please use aubio_sink instead … … 26 8 int main (int argc, char **argv) 27 9 { 28 return base_main(argc, argv); 10 sint_t err = 0; 11 12 if (argc < 3) { 13 PRINT_ERR("not enough arguments, running tests\n"); 14 err = run_on_default_source_and_sink(main); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_SINK_APPLE_AUDIO 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_apple_audio_t *o = new_aubio_sink_apple_audio(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_apple_audio_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_apple_audio(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else /* HAVE_SINK_APPLE_AUDIO */ 63 err = 0; 64 PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); 65 #endif /* HAVE_SINK_APPLE_AUDIO */ 66 return err; 29 67 } -
TabularUnified tests/src/io/test-sink_sndfile.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "sndfile"6 7 #ifdef HAVE_SNDFILE8 #define HAVE_AUBIO_SINK_CUSTOM9 #define aubio_sink_custom_t aubio_sink_sndfile_t10 #define new_aubio_sink_custom new_aubio_sink_sndfile11 #define del_aubio_sink_custom del_aubio_sink_sndfile12 #define aubio_sink_custom_do aubio_sink_sndfile_do13 #define aubio_sink_custom_do_multi aubio_sink_sndfile_do_multi14 #define aubio_sink_custom_close aubio_sink_sndfile_close15 #define aubio_sink_custom_preset_samplerate aubio_sink_sndfile_preset_samplerate16 #define aubio_sink_custom_preset_channels aubio_sink_sndfile_preset_channels17 #define aubio_sink_custom_get_samplerate aubio_sink_sndfile_get_samplerate18 #define aubio_sink_custom_get_channels aubio_sink_sndfile_get_channels19 #endif /* HAVE_SNDFILE */20 21 #include "base-sink_custom.h"22 4 23 5 // this file uses the unstable aubio api, please use aubio_sink instead … … 26 8 int main (int argc, char **argv) 27 9 { 28 return base_main(argc, argv); 10 sint_t err = 0; 11 12 if (argc < 3) { 13 PRINT_ERR("not enough arguments, running tests\n"); 14 err = run_on_default_source_and_sink(main); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_SNDFILE 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_sndfile_t *o = new_aubio_sink_sndfile(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_sndfile_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_sndfile(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else 63 err = 0; 64 PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); 65 #endif /* HAVE_SNDFILE */ 66 return err; 29 67 } -
TabularUnified tests/src/io/test-sink_vorbis.c ¶
r0440778 re6a5aa5 3 3 #include "utils_tests.h" 4 4 5 #define aubio_sink_custom "vorbis" 6 7 #ifdef HAVE_VORBISENC 8 // functions not exposed in the headers, declared here 5 #if 1 // test without inclusion in headers 9 6 typedef struct _aubio_sink_vorbis_t aubio_sink_vorbis_t; 10 7 extern aubio_sink_vorbis_t * new_aubio_sink_vorbis(const char_t *uri, … … 12 9 extern void del_aubio_sink_vorbis (aubio_sink_vorbis_t *s); 13 10 extern uint_t aubio_sink_vorbis_open(aubio_sink_vorbis_t *s); 14 extern uint_t aubio_sink_vorbis_close(aubio_sink_vorbis_t *s);15 11 extern uint_t aubio_sink_vorbis_preset_channels(aubio_sink_vorbis_t *s, 16 12 uint_t channels); 17 13 extern uint_t aubio_sink_vorbis_preset_samplerate(aubio_sink_vorbis_t *s, 18 14 uint_t samplerate); 19 extern void aubio_sink_vorbis_do(aubio_sink_vorbis_t *s, fvec_t *write_data,20 uint_t write);21 extern void aubio_sink_vorbis_do_multi(aubio_sink_vorbis_t *s,22 fmat_t *write_data, uint_t write);23 15 extern uint_t aubio_sink_vorbis_get_channels(aubio_sink_vorbis_t *s); 24 16 extern uint_t aubio_sink_vorbis_get_samplerate(aubio_sink_vorbis_t *s); 17 extern void aubio_sink_vorbis_do_multi(aubio_sink_vorbis_t *s, fmat_t* 18 write_data, uint_t write); 19 #endif 25 20 26 #define HAVE_AUBIO_SINK_CUSTOM 27 #define aubio_sink_custom_t aubio_sink_vorbis_t 28 #define new_aubio_sink_custom new_aubio_sink_vorbis 29 #define del_aubio_sink_custom del_aubio_sink_vorbis 30 #define aubio_sink_custom_do aubio_sink_vorbis_do 31 #define aubio_sink_custom_do_multi aubio_sink_vorbis_do_multi 32 #define aubio_sink_custom_close aubio_sink_vorbis_close 33 #define aubio_sink_custom_preset_samplerate aubio_sink_vorbis_preset_samplerate 34 #define aubio_sink_custom_preset_channels aubio_sink_vorbis_preset_channels 35 #define aubio_sink_custom_get_samplerate aubio_sink_vorbis_get_samplerate 36 #define aubio_sink_custom_get_channels aubio_sink_vorbis_get_channels 37 #endif /* HAVE_VORBISENC */ 38 39 #include "base-sink_custom.h" 40 41 // this file uses the unstable aubio api, please use aubio_sink instead 42 // see src/io/sink.h and tests/src/sink/test-sink.c 21 // this file uses the unstable aubio api to test aubio_sink_vorbis, please 22 // use aubio_sink instead see src/io/sink.h and tests/src/sink/test-sink.c 43 23 44 24 int main (int argc, char **argv) 45 25 { 46 return base_main(argc, argv); 26 sint_t err = 0; 27 28 if (argc < 3) { 29 PRINT_ERR("not enough arguments, running tests\n"); 30 err = run_on_default_source_and_sink(main); 31 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [channels] [hop_size]\n", argv[0]); 32 return err; 33 } 34 35 #ifdef HAVE_VORBISENC 36 uint_t samplerate = 0; 37 uint_t channels = 0; 38 uint_t hop_size = 512; 39 uint_t n_frames = 0, read = 0; 40 41 char_t *source_path = argv[1]; 42 char_t *sink_path = argv[2]; 43 44 if ( argc >= 4 ) samplerate = atoi(argv[3]); 45 if ( argc >= 5 ) channels = atoi(argv[4]); 46 if ( argc >= 6 ) hop_size = atoi(argv[5]); 47 if ( argc >= 7 ) { 48 err = 2; 49 PRINT_ERR("too many arguments\n"); 50 return err; 51 } 52 53 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 54 if (!i) { err = 1; goto beach_source; } 55 56 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 57 if (channels == 0 ) channels = aubio_source_get_channels(i); 58 59 fmat_t *mat = new_fmat(channels, hop_size); 60 if (!mat) { err = 1; goto beach_fmat; } 61 62 aubio_sink_vorbis_t *o = new_aubio_sink_vorbis(sink_path, 0); 63 if (!o) { err = 1; goto beach_sink; } 64 err = aubio_sink_vorbis_preset_samplerate(o, samplerate); 65 if (err) { goto beach; } 66 err = aubio_sink_vorbis_preset_channels(o, channels); 67 if (err) { goto beach; } 68 69 do { 70 aubio_source_do_multi(i, mat, &read); 71 aubio_sink_vorbis_do_multi(o, mat, read); 72 n_frames += read; 73 } while ( read == hop_size ); 74 75 PRINT_MSG("read %d frames at %dHz in %d channels (%d blocks) from %s written to %s\n", 76 n_frames, samplerate, channels, n_frames / hop_size, 77 source_path, sink_path); 78 PRINT_MSG("wrote %s with %dHz in %d channels\n", sink_path, 79 aubio_sink_vorbis_get_samplerate(o), 80 aubio_sink_vorbis_get_channels(o) ); 81 82 beach: 83 del_aubio_sink_vorbis(o); 84 beach_sink: 85 del_fmat(mat); 86 beach_fmat: 87 del_aubio_source(i); 88 beach_source: 89 #else /* HAVE_VORBISENC */ 90 err = 0; 91 PRINT_ERR("aubio was not compiled with aubio_sink_vorbis\n"); 92 #endif /* HAVE_VORBISENC */ 93 return err; 47 94 } -
TabularUnified tests/src/io/test-sink_wavwrite.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_sink_custom "wavwrite"6 7 #ifdef HAVE_WAVWRITE8 #define HAVE_AUBIO_SINK_CUSTOM9 #define aubio_sink_custom_t aubio_sink_wavwrite_t10 #define new_aubio_sink_custom new_aubio_sink_wavwrite11 #define del_aubio_sink_custom del_aubio_sink_wavwrite12 #define aubio_sink_custom_do aubio_sink_wavwrite_do13 #define aubio_sink_custom_do_multi aubio_sink_wavwrite_do_multi14 #define aubio_sink_custom_close aubio_sink_wavwrite_close15 #define aubio_sink_custom_preset_samplerate aubio_sink_wavwrite_preset_samplerate16 #define aubio_sink_custom_preset_channels aubio_sink_wavwrite_preset_channels17 #define aubio_sink_custom_get_samplerate aubio_sink_wavwrite_get_samplerate18 #define aubio_sink_custom_get_channels aubio_sink_wavwrite_get_channels19 #endif /* HAVE_WAVWRITE */20 21 #include "base-sink_custom.h"22 4 23 5 // this file uses the unstable aubio api, please use aubio_sink instead … … 26 8 int main (int argc, char **argv) 27 9 { 28 return base_main(argc, argv); 10 sint_t err = 0; 11 12 if (argc < 3) { 13 PRINT_ERR("not enough arguments, running tests\n"); 14 err = run_on_default_source_and_sink(main); 15 PRINT_MSG("usage: %s <input_path> <output_path> [samplerate] [hop_size]\n", argv[0]); 16 return err; 17 } 18 19 #ifdef HAVE_WAVWRITE 20 uint_t samplerate = 0; 21 uint_t hop_size = 512; 22 uint_t n_frames = 0, read = 0; 23 24 char_t *source_path = argv[1]; 25 char_t *sink_path = argv[2]; 26 27 if ( argc >= 4 ) samplerate = atoi(argv[3]); 28 if ( argc >= 5 ) hop_size = atoi(argv[4]); 29 if ( argc >= 6 ) { 30 err = 2; 31 PRINT_ERR("too many arguments\n"); 32 return err; 33 } 34 35 fvec_t *vec = new_fvec(hop_size); 36 if (!vec) { err = 1; goto beach_fvec; } 37 38 aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); 39 if (!i) { err = 1; goto beach_source; } 40 41 if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); 42 43 aubio_sink_wavwrite_t *o = new_aubio_sink_wavwrite(sink_path, samplerate); 44 if (!o) { err = 1; goto beach_sink; } 45 46 do { 47 aubio_source_do(i, vec, &read); 48 aubio_sink_wavwrite_do(o, vec, read); 49 n_frames += read; 50 } while ( read == hop_size ); 51 52 PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", 53 n_frames, samplerate, n_frames / hop_size, 54 source_path, sink_path); 55 56 del_aubio_sink_wavwrite(o); 57 beach_sink: 58 del_aubio_source(i); 59 beach_source: 60 del_fvec(vec); 61 beach_fvec: 62 #else 63 err = 0; 64 PRINT_ERR("aubio was not compiled with aubio_sink_wavwrite\n"); 65 #endif /* HAVE_WAVWRITE */ 66 return err; 29 67 } -
TabularUnified tests/src/io/test-source.c ¶
r0440778 re6a5aa5 2 2 #include "utils_tests.h" 3 3 4 int test_wrong_params(void); 5 6 int main(int argc, char **argv) 4 int main (int argc, char **argv) 7 5 { 8 6 uint_t err = 0; 9 7 if (argc < 2) { 10 8 PRINT_ERR("not enough arguments, running tests\n"); 11 err = test_wrong_params();9 err = run_on_default_source(main); 12 10 PRINT_MSG("read a wave file as a mono vector\n"); 13 11 PRINT_MSG("usage: %s <source_path> [samplerate] [hop_size]\n", argv[0]); … … 30 28 char_t *source_path = argv[1]; 31 29 30 32 31 aubio_source_t* s = 33 32 new_aubio_source(source_path, samplerate, hop_size); 33 if (!s) { err = 1; goto beach; } 34 34 fvec_t *vec = new_fvec(hop_size); 35 if (!s || !vec) { err = 1; goto beach; }36 35 37 36 uint_t n_frames_expected = aubio_source_get_duration(s); … … 51 50 // close the file (optional) 52 51 aubio_source_close(s); 53 54 beach:55 if (vec)56 del_fvec(vec);57 if (s)58 del_aubio_source(s);59 return err;60 }61 62 int test_wrong_params(void)63 {64 char_t *uri = DEFINEDSTRING(AUBIO_TESTS_SOURCE);65 uint_t samplerate = 44100;66 uint_t hop_size = 512;67 uint_t channels, read = 0;68 fvec_t *vec;69 fmat_t *mat;70 aubio_source_t *s;71 72 if (new_aubio_source(0, samplerate, hop_size)) return 1;73 if (new_aubio_source("\0", samplerate, hop_size)) return 1;74 if (new_aubio_source(uri, -1, hop_size)) return 1;75 if (new_aubio_source(uri, 0, 0)) return 1;76 77 s = new_aubio_source(uri, samplerate, hop_size);78 if (!s) return 1;79 channels = aubio_source_get_channels(s);80 81 // vector to read downmixed samples82 vec = new_fvec(hop_size);83 // matrix to read individual channels84 mat = new_fmat(channels, hop_size);85 86 if (aubio_source_get_samplerate(s) != samplerate) return 1;87 88 // read first hop_size frames89 aubio_source_do(s, vec, &read);90 if (read != hop_size) return 1;91 92 // seek to 093 if(aubio_source_seek(s, 0)) return 1;94 95 // read again as multiple channels96 aubio_source_do_multi(s, mat, &read);97 if (read != hop_size) return 1;98 99 // close the file (optional)100 aubio_source_close(s);101 52 // test closing the file a second time 102 53 aubio_source_close(s); 103 54 104 del_aubio_source(s); 105 del_fmat(mat); 106 del_fvec(vec); 107 108 return run_on_default_source(main); 55 del_fvec (vec); 56 del_aubio_source (s); 57 beach: 58 return err; 109 59 } -
TabularUnified tests/src/io/test-source_apple_audio.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "apple_audio"6 7 #ifdef HAVE_SOURCE_APPLE_AUDIO8 #define HAVE_AUBIO_SOURCE_CUSTOM9 #define aubio_source_custom_t aubio_source_apple_audio_t10 #define new_aubio_source_custom new_aubio_source_apple_audio11 #define del_aubio_source_custom del_aubio_source_apple_audio12 #define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate13 #define aubio_source_custom_get_duration aubio_source_apple_audio_get_duration14 #define aubio_source_custom_do aubio_source_apple_audio_do15 #define aubio_source_custom_do_multi aubio_source_apple_audio_do_multi16 #define aubio_source_custom_seek aubio_source_apple_audio_seek17 #define aubio_source_custom_close aubio_source_apple_audio_close18 #define aubio_source_custom_get_channels aubio_source_apple_audio_get_channels19 #define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate20 #endif /* HAVE_SOURCE_APPLE_AUDIO */21 22 #include "base-source_custom.h"23 4 24 5 // this file uses the unstable aubio api, please use aubio_source instead … … 27 8 int main (int argc, char **argv) 28 9 { 29 return base_main(argc, argv); 10 uint_t err = 0; 11 if (argc < 2) { 12 PRINT_ERR("not enough arguments, running tests\n"); 13 err = run_on_default_source(main); 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.aif at 32000Hz\n"); 20 PRINT_MSG(" %s file.aif 32000\n", argv[0]); 21 PRINT_MSG(" - read file.mp3 at original samplerate with 4096 blocks\n"); 22 PRINT_MSG(" %s file.mp3 0 4096 \n", argv[0]); 23 return err; 24 } 25 26 #if HAVE_SOURCE_APPLE_AUDIO 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc >= 3 ) samplerate = atoi(argv[2]); 31 if ( argc >= 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 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; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_apple_audio_get_duration(s); 42 43 samplerate = aubio_source_apple_audio_get_samplerate(s); 44 45 do { 46 aubio_source_apple_audio_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_apple_audio (s); 57 beach: 58 #else /* HAVE_SOURCE_APPLE_AUDIO */ 59 err = 0; 60 PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); 61 #endif /* HAVE_SOURCE_APPLE_AUDIO */ 62 return err; 30 63 } -
TabularUnified tests/src/io/test-source_avcodec.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "avcodec"6 7 #ifdef HAVE_LIBAV8 #define HAVE_AUBIO_SOURCE_CUSTOM9 #define aubio_source_custom_t aubio_source_avcodec_t10 #define new_aubio_source_custom new_aubio_source_avcodec11 #define del_aubio_source_custom del_aubio_source_avcodec12 #define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate13 #define aubio_source_custom_get_duration aubio_source_avcodec_get_duration14 #define aubio_source_custom_do aubio_source_avcodec_do15 #define aubio_source_custom_do_multi aubio_source_avcodec_do_multi16 #define aubio_source_custom_seek aubio_source_avcodec_seek17 #define aubio_source_custom_close aubio_source_avcodec_close18 #define aubio_source_custom_get_channels aubio_source_avcodec_get_channels19 #define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate20 #endif /* HAVE_LIBAV */21 22 #include "base-source_custom.h"23 4 24 5 // this file uses the unstable aubio api, please use aubio_source instead … … 27 8 int main (int argc, char **argv) 28 9 { 29 return base_main(argc, argv); 10 uint_t err = 0; 11 if (argc < 2) { 12 PRINT_ERR("not enough arguments, running tests\n"); 13 err = run_on_default_source(main); 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]); 23 return err; 24 } 25 26 #ifdef HAVE_LIBAV 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc >= 3 ) samplerate = atoi(argv[2]); 31 if ( argc >= 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_avcodec_t * s = 37 new_aubio_source_avcodec(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_avcodec_get_duration(s); 42 43 samplerate = aubio_source_avcodec_get_samplerate(s); 44 45 do { 46 aubio_source_avcodec_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_avcodec (s); 57 beach: 58 #else /* HAVE_LIBAV */ 59 err = 0; 60 PRINT_ERR("aubio was not compiled with aubio_source_avcodec\n"); 61 #endif /* HAVE_LIBAV */ 62 return err; 30 63 } -
TabularUnified tests/src/io/test-source_sndfile.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "sndfile"6 7 #ifdef HAVE_SNDFILE8 #define HAVE_AUBIO_SOURCE_CUSTOM9 #define aubio_source_custom_t aubio_source_sndfile_t10 #define new_aubio_source_custom new_aubio_source_sndfile11 #define del_aubio_source_custom del_aubio_source_sndfile12 #define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate13 #define aubio_source_custom_get_duration aubio_source_sndfile_get_duration14 #define aubio_source_custom_do aubio_source_sndfile_do15 #define aubio_source_custom_do_multi aubio_source_sndfile_do_multi16 #define aubio_source_custom_seek aubio_source_sndfile_seek17 #define aubio_source_custom_close aubio_source_sndfile_close18 #define aubio_source_custom_get_channels aubio_source_sndfile_get_channels19 #define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate20 #endif /* HAVE_LIBAV */21 22 #include "base-source_custom.h"23 4 24 5 // this file uses the unstable aubio api, please use aubio_source instead … … 27 8 int main (int argc, char **argv) 28 9 { 29 return base_main(argc, argv); 10 uint_t err = 0; 11 if (argc < 2) { 12 PRINT_ERR("not enough arguments, running tests\n"); 13 err = run_on_default_source(main); 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]); 23 return err; 24 } 25 26 #ifdef HAVE_SNDFILE 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc >= 3 ) samplerate = atoi(argv[2]); 31 if ( argc >= 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_sndfile_t * s = 37 new_aubio_source_sndfile(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_sndfile_get_duration(s); 42 43 samplerate = aubio_source_sndfile_get_samplerate(s); 44 45 do { 46 aubio_source_sndfile_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_sndfile (s); 57 beach: 58 #else 59 err = 0; 60 PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); 61 #endif /* HAVE_SNDFILE */ 62 return err; 30 63 } -
TabularUnified tests/src/io/test-source_wavread.c ¶
r0440778 re6a5aa5 2 2 #include <aubio.h> 3 3 #include "utils_tests.h" 4 5 #define aubio_source_custom "wavread"6 7 #ifdef HAVE_WAVREAD8 #define HAVE_AUBIO_SOURCE_CUSTOM9 #define aubio_source_custom_t aubio_source_wavread_t10 #define new_aubio_source_custom new_aubio_source_wavread11 #define del_aubio_source_custom del_aubio_source_wavread12 #define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate13 #define aubio_source_custom_get_duration aubio_source_wavread_get_duration14 #define aubio_source_custom_do aubio_source_wavread_do15 #define aubio_source_custom_do_multi aubio_source_wavread_do_multi16 #define aubio_source_custom_seek aubio_source_wavread_seek17 #define aubio_source_custom_close aubio_source_wavread_close18 #define aubio_source_custom_get_channels aubio_source_wavread_get_channels19 #define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate20 #endif /* HAVE_WAVREAD */21 22 #include "base-source_custom.h"23 4 24 5 // this file uses the unstable aubio api, please use aubio_source instead … … 27 8 int main (int argc, char **argv) 28 9 { 29 return base_main(argc, argv); 10 uint_t err = 0; 11 if (argc < 2) { 12 PRINT_ERR("not enough arguments, running tests\n"); 13 err = run_on_default_source(main); 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]); 23 return err; 24 } 25 26 #ifdef HAVE_WAVREAD 27 uint_t samplerate = 0; 28 uint_t hop_size = 256; 29 uint_t n_frames = 0, read = 0; 30 if ( argc >= 3 ) samplerate = atoi(argv[2]); 31 if ( argc >= 4 ) hop_size = atoi(argv[3]); 32 33 char_t *source_path = argv[1]; 34 35 36 aubio_source_wavread_t * s = 37 new_aubio_source_wavread(source_path, samplerate, hop_size); 38 if (!s) { err = 1; goto beach; } 39 fvec_t *vec = new_fvec(hop_size); 40 41 uint_t n_frames_expected = aubio_source_wavread_get_duration(s); 42 43 samplerate = aubio_source_wavread_get_samplerate(s); 44 45 do { 46 aubio_source_wavread_do(s, vec, &read); 47 fvec_print (vec); 48 n_frames += read; 49 } while ( read == hop_size ); 50 51 PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", 52 n_frames, n_frames_expected, samplerate, n_frames / hop_size, 53 source_path); 54 55 del_fvec (vec); 56 del_aubio_source_wavread (s); 57 beach: 58 #else 59 err = 0; 60 PRINT_ERR("aubio was not compiled with aubio_source_wavread\n"); 61 #endif /* HAVE_WAVREAD */ 62 return err; 30 63 } -
TabularUnified tests/utils_tests.h ¶
r0440778 re6a5aa5 56 56 #endif 57 57 58 #if defined(HAVE_WIN_HACKS) 58 // are we on windows ? or are we using -std=c99 ? 59 #if defined(HAVE_WIN_HACKS) || defined(__STRICT_ANSI__) 60 // http://en.wikipedia.org/wiki/Linear_congruential_generator 61 // no srandom/random on win32 59 62 60 // use srand/rand on windows 61 #define srandom srand 62 #define random rand 63 uint_t srandom_seed = 1029; 63 64 64 #elif defined(__STRICT_ANSI__) 65 void srandom(uint_t new_seed) { 66 srandom_seed = new_seed; 67 } 65 68 66 // workaround to build with -std=c99 (for instance with older cygwin), 67 // assuming libbc is recent enough to supports these functions. 68 extern void srandom(unsigned); 69 extern int random(void); 70 extern char mkstemp(const char *pat); 71 69 uint_t random(void) { 70 srandom_seed = 1664525 * srandom_seed + 1013904223; 71 return srandom_seed; 72 } 72 73 #endif 73 74 -
TabularUnified wscript ¶
r0440778 re6a5aa5 576 576 target = bld.path.find_or_declare('api/index.html'), 577 577 cwd = bld.path.find_dir('doc')) 578 # evaluate nodes lazily to prevent build directory traversal warnings579 578 bld.install_files('${DATAROOTDIR}/doc/libaubio-doc/api', 580 bld.path.find_or_declare('api').ant_glob('**/*' ,581 generator=True),cwd=bld.path.find_or_declare('api'),579 bld.path.find_or_declare('api').ant_glob('**/*'), 580 cwd=bld.path.find_or_declare('api'), 582 581 relative_trick=True) 583 582 … … 601 600 source = bld.path.find_dir('doc').ant_glob('*.rst'), 602 601 target = bld.path.find_or_declare('manual/index.html')) 603 # evaluate nodes lazily to prevent build directory traversal warnings604 602 bld.install_files('${DATAROOTDIR}/doc/libaubio-doc/manual', 605 bld.path.find_or_declare('manual').ant_glob('**/*' ,606 generator=True),cwd=bld.path.find_or_declare('manual'),603 bld.path.find_or_declare('manual').ant_glob('**/*'), 604 cwd=bld.path.find_or_declare('manual'), 607 605 relative_trick=True) 608 606
Note: See TracChangeset
for help on using the changeset viewer.