videos ver transferir sonido recortar quitarle para imagen gratis garageband editar descargar como archivos app ios file audio nsdictionary duration

ver - ¿Cómo obtener la duración de un archivo de audio en iOS?



transferir archivos de pc a iphone (4)

En las ''Claves de atributos de archivo'' de la referencia de clase de NSFileManager , puede ver que no hay ninguna tecla para usar que devuelva la duración de una canción. Toda la información que obtiene la instancia NSFileManager sobre un archivo tiene que ver con las propiedades del archivo real en sí dentro del sistema operativo, como su tamaño de archivo. El NSFileManager en realidad no interpreta el archivo.

Para obtener la duración del archivo, debe usar una clase que sepa cómo interpretar el archivo. El marco AVFoundation proporciona la clase exacta que necesita, AVAsset . Puede instanciar una instancia de esta clase abstracta usando la subclase concreta AVURLAsset , y luego proporcionarle un NSURL que apunte al archivo de audio para el que desea obtener la duración. Luego puede obtener la duración de la instancia de AVAsset consultando su propiedad de duration .

Por ejemplo:

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

Tenga en cuenta que AVFoundation está diseñado como un marco fuertemente asíncrono para mejorar el rendimiento y la experiencia general del usuario. Incluso la realización de tareas simples, como consultar la duración de un archivo multimedia, puede tomar un largo período de tiempo y puede hacer que su aplicación se cuelgue. Debe usar el protocolo AVAsynchronousKeyValueLoading para cargar asincrónicamente la duración de la canción, y luego actualizar su UI en un bloque de controlador de finalización. Debería echar un vistazo a la ''Guía de programación de bloques'' , así como al video WWDC2010 titulado ''Descubriendo la Fundación AV'', que está disponible gratuitamente en https://developer.apple.com/videos/wwdc/2010 .

NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filename error:nil]

Desde las teclas de atributo de archivo, puede obtener la fecha, el tamaño, etc. ¿Pero cómo obtiene la duración?


Para completar: hay otra forma de obtener la duración de un archivo mp3:

NSURL * pathToMp3File = ... NSError *error = nil; AVAudioPlayer* avAudioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:pathToMp3File error:&error]; double duration = avAudioPlayer.duration; avAudioPlayer = nil;

Lo he usado sin retraso discernible.


Para cualquiera que todavía esté buscando esto. Según la respuesta, el código para Swift 4 (incluida la carga asincrónica de los valores tomados de la documentación de Apple):

let audioAsset = AVURLAsset.init(url: yourURL, options: nil) audioAsset.loadValuesAsynchronously(forKeys: ["duration"]) { var error: NSError? = nil let status = audioAsset.statusOfValue(forKey: "duration", error: &error) switch status { case .loaded: // Sucessfully loaded. Continue processing. let duration = audioAsset.duration let durationInSeconds = CMTimeGetSeconds(duration) print(Int(durationInSeconds)) break case .failed: break // Handle error case .cancelled: break // Terminate processing default: break // Handle all other cases } }


Puedes lograr lo mismo en Swift usando:

let audioAsset = AVURLAsset.init(url: audioFileURL, options: nil) let duration = audioAsset.duration let durationInSeconds = CMTimeGetSeconds(duration)