2011-01-07 20 views
5

(Objetivo C) Simplemente usando AudioServicesPlaySystemSoundID simple y sus contrapartes, pero no puedo encontrar en la documentación si ya hay una manera de encontrar la longitud de un archivo de audio .Cómo encontrar la longitud de un archivo de audio (en segundos)

Sé que hay AudioServicesGetPropertyInfo, pero parece que devuelve un búfer de bytes: ¿los archivos de audio incorporan su longitud en sí mismos y puedo extraerlos con esto?

¿O tal vez hay una fórmula basada en la tasa de bits * fileSize para convertir a la longitud de tiempo?

mIL3S

www.milkdrinkingcow.com

Respuesta

14

De acuerdo con una rápida búsqueda en Google, no existe una fórmula:

length-of-time (duration in seconds) = fileSize (in bytes)/bit-rate (bits/secs)*8 

¿Hay alguna razón en particular que está utilizando Servicios de sonido del sistema de tocar un sonido?

Si utiliza AVAudioPlayer para manejar sus sonidos que se podría hacer algo como:

AVAudioPlayer * sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; 
sound.delegate = self; 
sound.volume = 1; 
NSLog([NSString stringWithFormat:@"%f", sound.duration]); 
+0

Ya, supongo que debería utilizar sólo AVAudioPlayer. Supongo que ya que solo estaba tocando algunos pequeños sonidos, AudioServices estaba bien; ahora que necesito más información, probablemente debería cambiar. ¡Gracias por la fórmula! Pensé que podría haber algo así. mIL3S –

11

código de ejemplo de a nswer How to get the duration of an audio file in iOS?. Esta es la mejor respuesta.

AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil]; CMTime audioDuration = audioAsset.duration; float audioDurationSeconds = CMTimeGetSeconds(audioDuration);

+0

Esta es la mejor manera general de lograr este IMO. – theLastNightTrain

Cuestiones relacionadas