src/io/source_apple_audio.h: add _get_duration
authorPaul Brossier <piem@piem.org>
Mon, 25 Apr 2016 14:26:39 +0000 (16:26 +0200)
committerPaul Brossier <piem@piem.org>
Mon, 25 Apr 2016 14:26:39 +0000 (16:26 +0200)
src/io/source_apple_audio.c
src/io/source_apple_audio.h

index 126058b..a86d4a3 100644 (file)
@@ -311,10 +311,7 @@ uint_t aubio_source_apple_audio_seek (aubio_source_apple_audio_t * s, uint_t pos
     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 );
@@ -363,4 +360,19 @@ uint_t aubio_source_apple_audio_get_channels(const aubio_source_apple_audio_t *
   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 */
index bfd315c..0ad5569 100644 (file)
@@ -109,6 +109,16 @@ uint_t aubio_source_apple_audio_get_channels(const aubio_source_apple_audio_t *
 
 /**
 
+  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