ref: a41b1ef7244c43a11ede91e4ffccce358c94e580
parent: 8bffcff3eaa566300b61e6e03138645b68cb8b2a
author: Paul Brossier <piem@piem.org>
date: Mon Apr 25 12:26:39 EDT 2016
src/io/source_apple_audio.h: add _get_duration
--- a/src/io/source_apple_audio.c
+++ b/src/io/source_apple_audio.c
@@ -311,10 +311,7 @@
goto beach;
}
// check if we are not seeking out of the file
- SInt64 fileLengthFrames = 0;
- UInt32 propSize = sizeof(fileLengthFrames);
- ExtAudioFileGetProperty(s->audioFile,
- kExtAudioFileProperty_FileLengthFrames, &propSize, &fileLengthFrames);
+ uint_t fileLengthFrames = aubio_source_apple_audio_get_duration(s);
// compute position in the source file, before resampling
smpl_t ratio = s->source_samplerate * 1. / s->samplerate;
SInt64 resampled_pos = (SInt64)ROUND( pos * ratio );
@@ -361,6 +358,21 @@
uint_t aubio_source_apple_audio_get_channels(const aubio_source_apple_audio_t * s) {
return s->channels;
+}
+
+uint_t aubio_source_apple_audio_get_duration(const aubio_source_apple_audio_t * s) {
+ SInt64 fileLengthFrames = 0;
+ UInt32 propSize = sizeof(fileLengthFrames);
+ OSStatus err = ExtAudioFileGetProperty(s->audioFile,
+ kExtAudioFileProperty_FileLengthFrames, &propSize, &fileLengthFrames);
+ if (err) {
+ char_t errorstr[20];
+ AUBIO_ERROR("source_apple_audio: Failed getting %s duration, "
+ "error in ExtAudioFileGetProperty (%s)\n", s->path,
+ getPrintableOSStatusError(errorstr, err));
+ return err;
+ }
+ return (uint_t)fileLengthFrames;
}
#endif /* HAVE_SOURCE_APPLE_AUDIO */
--- a/src/io/source_apple_audio.h
+++ b/src/io/source_apple_audio.h
@@ -109,6 +109,16 @@
/**
+ get the duration of source object, in frames
+
+ \param s source object, created with ::new_aubio_source_apple_audio
+ \return number of frames in file
+
+*/
+uint_t aubio_source_apple_audio_get_duration(const aubio_source_apple_audio_t * s);
+
+/**
+
seek source object
\param s source object, created with ::new_aubio_source