Comment obtenir la durée d'un fichier audio dans iOS?
NSDictionary* fileAttributes =
[[NSFileManager defaultManager] attributesOfItemAtPath:filename
error:nil]
De l'attribut de fichier de clés, vous pouvez obtenir la date, la taille, etc. Mais comment voulez-vous obtenir la durée?
- Où obtenez-vous le NSDictionary à partir de?
- il est construit dans le type de données dans iOS. il contient des paires clé-valeur pour la date, la taille, etc pour un fichier.
- Je sais ce qu'est un NSDictionary est. Où en êtes-vous de la récupération de l'instance de cette NSDictionary à partir de? Vous avez besoin de donner beaucoup plus d'informations à propos de ce que vous essayez de faire dans votre question.
- p.s. Un NSDictionary ne contiennent pas nécessairement des valeurs pour les données et la taille d'un fichier en particulier, il ne contient qu'un 1-de-1 la cartographie d'un ensemble de clés à un ensemble de valeurs.
- J'ai édité ma question d'inclure cette info. Merci et désolé pour la gêne occasionnée.
- la durée ne semble pas faire partie de la NSDictionary qui est retourné par attributesOfItemAtPath
- Pourquoi ne pas accepter James réponse ?
Vous devez vous connecter pour publier un commentaire.
Dans le 'Attribut de fichier de Clés" de la NSFileManager de la classe de référence vous pouvez voir qu'il n'y a pas de clé à utiliser qui sera de retour la durée d'une chanson. Toutes les informations que le NSFileManager instance bénéficie d'un fichier est de le faire avec les propriétés du fichier lui-même dans le système d'exploitation, tels que des fichiers de taille. Le NSFileManager ne fait pas interpréter le fichier.
Afin d'obtenir la durée du fichier, vous avez besoin d'utiliser une classe qui sait comment interpréter le fichier. Le AVFoundation cadre fournit exactement la classe dont vous avez besoin, AVAsset. Vous pouvez instancier une instance de cette classe abstraite à l'aide de la sous-classe concrète AVURLAsset, et ensuite fournir une NSURL qui pointe vers le fichier audio que vous souhaitez obtenir la durée. Vous pouvez ensuite obtenir la durée de la AVAsset exemple en interrogeant son
duration
propriété.Par exemple:
Noter que AVFoundation est conçu comme un très asynchrone cadre afin d'améliorer les performances et l'expérience globale de l'utilisateur. Même à accomplir des tâches simples telles que l'interrogation d'un fichier multimédia durée peut prendre une longue période de temps et peut causer votre demande à accrocher. Vous devez utiliser le AVAsynchronousKeyValueLoading protocole asynchrone charge la durée de la chanson, et ensuite mettre à jour votre INTERFACE utilisateur dans un gestionnaire d'achèvement bloc. Vous devriez jeter un oeil à la "Bloquer Le Guide De Programmation' ainsi que la WWDC2010 vidéo intitulée, "Découvrir AV Foundation", qui est disponible gratuitement à l' https://developer.apple.com/videos/wwdc/2010.
FigByteFlumeCustomURLOpen signalled err=-12936 (kFigByteFlumeError_BadState) (no provider) at /SourceCache/CoreMedia/CoreMedia-1562.235/Prototypes/FigHTTP/FigByteFlumeCustomURL.c line 1486
. Réponse par John Goodstadt ci-dessous fonctionne pour moi.AVAsset
etAVAssetTrack
accès avec les méthodesAVAsynchronousKeyValueLoading
.Pour l'intégralité - Il est un autre moyen d'obtenir la durée d'un fichier mp3:
J'ai utilisé cette avec pas permis de retard.
Vous pouvez obtenir le même dans Swift à l'aide de :
Pour ceux qui sont encore à la recherche de ce.
En fonction de la réponse, le code de Swift 4 (y compris le chargement asynchrone de valeurs prises à partir de la documentation d'Apple):
Swift 5.0 + iOS 12: C'est la seule façon dont il a travaillé pour moi (@John Goodstadt solution Swift). Actuellement, je ne sais pas pourquoi, mais il y a une différence de moyenne de 0,2 secondes entre un fichier audio enregistré (dans mon cas un mémo vocal) et le reçu fichier audio à l'aide du code suivant.