2009-08-06 6 views
11

Ich habe mp3 Dateien auf dem iPhone gespeichert und ich meine Anwendung sollte in der Lage sein, die ID3 Informationen zu lesen, dh die Länge in Sekunden, Künstler, etc. Weiß jemand, wie man dies oder was Bibliothek in Objective-C zu verwenden?Lesen von MP3-Informationen mit Ziel c

Ihre Gedanken werden sehr geschätzt.

+2

Wenn Sie sagen, Sie haben MP3-Dateien auf dem Telefon gespeichert, haben Sie Ihre Anwendung bedeuten hat MP3-Dateien irgendwo in seiner Sandbox (entweder in Ihrem Paket enthalten oder die Sie heruntergeladen haben), oder meinen Sie der Benutzer sie über iTunes geladen ist? Das Abfragen des Media Players nach Informationen zu Songs auf dem Gerät ist ein völlig anderes Problem als das Analysieren von Informationen aus Dateien. –

+0

Hallo Louis, Die mp3-Dateien sind Dateien aus dem Internet heruntergeladen und im Ordner Dokumente meiner Anwendung gespeichert. Danke, dass Sie auf Verwirrung hingewiesen haben. Tony – TonyNeallon

+0

Dies wurde bereits in dieser SO Frage beantwortet: [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) –

Antwort

19

ID3-Informationen können gelesen werden, indem die kAudioFilePropertyInfoDictionary-Eigenschaft einer Audiodatei unter Verwendung der AudioFileGetProperty-Funktion des AudioToolbox-Frameworks abgerufen wird.

Eine detaillierte Erklärung ist bei iphonedevbook.com

bearbeiten verfügbar: Original Link jetzt nach unten. InformIT hat einige ähnliche Beispielcode, aber es ist nicht so vollständig.

+0

Der angegebene Link fragt nach Berechtigungen :( –

+1

Die Seite ist nicht mehr verfügbar, ich habe sie durch einen ähnlichen, aber weniger vollständigen Link ersetzt – rpetrich

+2

[Diese StackOverflow-Antwort ist klar und enthält den Quellcode.] (Http://stackoverflow.com/a/17478117/59913) –

3

Es gibt nicht viele ID3-Parsing-Bibliotheken, die nicht GPLed sind. Es gibt auf Objective-C framework, das wahrscheinlich geändert werden könnte, um auf dem iPhone zu arbeiten, wenn es statisch verbunden ist, aber es ist LGPL. Um die Bedingungen der LGPL mit einer statisch verknüpften Binärdatei zu erfüllen, müssen Sie genügend Zwischenkomponenten bereitstellen, damit jemand sie mit ihrer eigenen Version der Bibliothek verbinden kann, was für eine iPhone App schwierig (aber nicht unmöglich) ist. Natürlich, da ich nicht in einer Position war, in der ich das tun musste, habe ich es nicht mit einem Anwalt besprochen, und da ich keiner bin, sollten Sie das nicht als maßgebend ansehen.

Ihre beste Wette, wenn Sie nicht Lust haben, einen Anwalt zu konsultieren, ist eine liberal lizensierte C-Bibliothek wie libID3 zu verwenden und diese in einigen Objective-C-Klassen einzubinden. Ich würde auch empfehlen, nur den Code direkt einzubeziehen, anstatt sich mit all den statischen Bibliothekserstellungs- und Verbindungsproblemen zu beschäftigen, aber das ist nur eine persönliche Stilsache.

+1

http://www.id3.org hatte einen Überblick über die verfügbaren Bibliotheken. Aber es scheint, dass sie derzeit down sind. Sie können die Google-Cached-Version versuchen: http://209.85.135.132/search?q=cache:khgjN7xyYeoJ:www.id3.org/Implementations+id3+c&hl=de&client=safari&strip=1 –

+0

Wenn Sie eine LGPL-Bibliothek verknüpfen Die gesamte Quelle Ihrer Bewerbung sollte freigegeben werden, um die Bedingungen der LGPL-Lizenz einzuhalten. – rpetrich

+1

LGPLv2.1 nicht Quellcode erfordern freigegeben werden, erfordert es Zwischenobjekte "Wenn Sie einen anderen Code mit der Bibliothek verknüpfen, können Sie komplette Objektdateien an die Empfänger zur Verfügung stellen müssen, damit sie sie mit der Bibliothek nach Änderungen neu verknüpfen können die Bibliothek und neu kompilieren.Und Sie müssen ihnen diese Begriffe zeigen, damit sie ihre Rechte kennen." –

5

Blick in die Media Player Framework:

Dies erfordert, dass die MP3 in Frage Teil der iPod-Bibliothek am Telefon ist.

Zum Beispiel, den Namen jeder Mediendatei auf dem Telefon (einschließlich Filme, Podcasts usw.)):

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

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

Es scheint, dass die folgenden Eigenschaften zur Verfügung:

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

tun dies ohne den Media Player Framework gehen durch etwas schwierig sein wird, und einen externen Rahmen benötigen.

+2

Er kann den e Media Player nicht verwenden, da die Dateien MP3s in seinem Ordner apps documents sind, nicht Musik, die Teil der systemweiten Musiksammlung ist. –