2009-08-06 11 views
11

J'ai mp3 fichiers stockés sur l'iPhone et mon application doit pouvoir lire les informations ID3, c'est-à-dire la longueur en secondes, artiste, etc. Est-ce que quelqu'un sait comment faire cela ou quoi? bibliothèque à utiliser dans Objective-C?Lecture des informations MP3 en utilisant l'objectif c

Vos pensées sont très appréciées.

+2

Lorsque vous dites que vous avez des fichiers mp3 stockés sur le téléphone, voulez-vous dire que votre demande a des fichiers mp3, quelque part dans son bac à sable (soit dans votre forfait ou que vous avez téléchargé), ou voulez-vous dire que l'utilisateur les a chargés via iTunes? Interroger le lecteur multimédia pour obtenir des informations sur les chansons sur l'appareil est un problème complètement différent de l'analyse des fichiers. –

+0

Salut Louis, Les fichiers mp3 sont des fichiers téléchargés à partir de Web et stockés dans les documents dossier de ma demande. Merci d'avoir signalé la confusion. Tony – TonyNeallon

+0

Cela a été déjà répondu à cette question SO: [http://stackoverflow.com/questions/1138118/how-to-extract-id-tags-from-mp3-files-in-cocoa](http:// stackoverflow.com/questions/1138118/how-to-extract-id-tags-from-mp3-files-in-cocoa) –

Répondre

19

Les informations ID3 peuvent être lues en récupérant la propriété kAudioFilePropertyInfoDictionary d'un fichier audio à l'aide de la fonction AudioFileGetProperty de l'infrastructure AudioToolbox.

Une explication détaillée est disponible à iphonedevbook.com

edit: lien original est maintenant vers le bas. InformIT a un exemple de code similaire, mais ce n'est pas aussi complet.

+0

Lien fourni demande des autorisations :( –

+1

La page n'est plus disponible J'ai remplacé par un lien similaire, mais moins complet – rpetrich

+2

[Cette réponse de StackOverflow est claire et donne le code source.] (Http://stackoverflow.com/a/17478117/59913) –

3

Il n'y a pas beaucoup de bibliothèques d'analyse ID3 qui ne sont pas GPL. Il y a sur Objective-C framework qui pourrait probablement être modifié pour fonctionner sur l'iPhone lorsqu'il est lié statiquement, mais c'est LGPL. Afin de satisfaire les termes de la LGPL avec un binaire lié statiquement, vous devez fournir suffisamment de composants intermédiaires pour que quelqu'un puisse le relier avec sa propre version de la bibliothèque, ce qui est difficile (mais pas impossible) pour une application iPhone. Bien sûr, puisque je n'ai pas été dans une position où je devais le faire, je n'en ai pas discuté avec un avocat, et comme je n'en suis pas un, vous ne devriez pas considérer cela comme faisant autorité. Votre meilleur pari si vous n'avez pas envie de consulter un avocat est d'utiliser une bibliothèque C sous licence plus libérale comme libID3 et d'envelopper dans certaines classes Objective C. Je recommanderais également d'inclure directement le code plutôt que de traiter tous les problèmes de construction et de liaison de la bibliothèque statique, mais ce n'est qu'une question de style personnel.

+1

http://www.id3.org avait une vue d'ensemble des bibliothèques disponibles. Mais il semble qu'ils sont actuellement en panne. Vous pouvez essayer la version mise en cache de google: http://209.85.135.132/search?q=cache:khgjN7xyYeoJ:www.id3.org/Implementations+id3+c&hl=de&client=safari&strip=1 –

+0

Lors de la liaison d'une bibliothèque LGPL le Toute la source de votre application doit être publiée pour respecter les termes de la licence LGPL. – rpetrich

+1

LGPLv2.1 ne nécessite pas de code source pour être libéré, il faut des objets intermédiaires "Si vous liez autre code à la bibliothèque, vous devez fournir des fichiers objets complets aux destinataires, afin qu'ils puissent les lier avec la bibliothèque après avoir modifié la bibliothèque et la recompilation, et vous devez leur montrer ces termes afin qu'ils connaissent leurs droits." –

5

Regardez dans le cadre Media Player:

Cela nécessite que le MP3 en question fait partie de la bibliothèque iPod sur le téléphone. Par exemple, déterminer le nom de tous les fichiers multimédias sur le téléphone (y compris les films, les podcasts, etc.).

):

MPMediaQuery *everything = [[MPMediaQuery alloc] init]; 

NSArray *itemsFromGenericQuery = [everything items]; 
for (MPMediaItem *item in itemsFromGenericQuery) { 
    NSString *itemTitle = [item valueForProperty:MPMediaItemPropertyTitle]; 
    // ... 
} 

Il semble que les propriétés suivantes sont disponibles:

  • MPMediaItemPropertyMediaType
  • MPMediaItemPropertyTitle
  • MPMediaItemPropertyAlbumTitle
  • MPMediaItemPropertyArtist
  • MPMediaItemPropertyAlbumArtist
  • MPMediaItemPropertyGenre
  • MPMediaItemPropertyComposer
  • MPMediaItemPropertyPlaybackDuration
  • MPMediaItemPropertyAlbumTrackNumber
  • MPMediaItemPropertyAlbumTrackCount
  • MPMediaItemPropertyDiscNumber
  • MPMediaItemPropertyDiscCount
  • MPMediaItemPropertyArtwork
  • MPMediaItemPropertyLyrics
  • MPMediaItemPropertyIsCompilation

Faire cela sans passer par le cadre du lecteur multimédia sera un peu difficile, et aura besoin d'un cadre extérieur.

+2

Il ne peut pas utiliser e Media Player parce que les fichiers sont MP3 dans son dossier de documents apps, pas la musique qui fait partie de la collection de musique à l'échelle du système –