2009-08-06 20 views
11

Mam pliki mp3 zapisane na iPhone i ja, moja aplikacja powinna być w stanie odczytać informacje o ID3, tj. Długość w sekundach, wykonawca itp. Czy ktoś wie, jak to zrobić? biblioteka do użycia w Objective-C?Odczytywanie informacji w formacie MP3 przy użyciu celu c

Twoje myśli są bardzo cenne.

+2

Kiedy mówisz, że masz pliki mp3 zapisane w telefonie, masz na myśli, że twoja aplikacja ma pliki mp3 gdzieś w piaskownicy (albo w twoim pakiecie, albo to, co pobrałeś), czy masz na myśli, że użytkownik załadował je przez iTunes? Odpytywanie odtwarzacza multimedialnego o informacje o utworach na urządzeniu jest zupełnie innym problemem niż przetwarzanie plików z informacjami. –

+0

Witaj Louis, Pliki mp3 to pliki pobrane z Internetu i zapisane w folderze dokumentów mojej aplikacji. Dzięki za wskazanie zamieszania. Tony – TonyNeallon

+0

Ta odpowiedź została już udzielona na to pytanie: [http://stackoverflow.com/questions/1138118/how-to-extract-id-tags-from-mp3-files-in-cocoa](http://to stackoverflow.com/questions/1138118/how-to-extract-id-tags-from-mp3-files-in-cocoa) –

Odpowiedz

19

Informacje o ID3 można odczytać, pobierając właściwość kAudioFilePropertyInfoDictionary pliku audio, korzystając z funkcji AudioFileGetProperty struktury AudioToolbox.

szczegółowe wyjaśnienie jest dostępny na iphonedevbook.com

EDIT: Oryginalny link jest teraz w dół. InformIT ma podobny kod przykładowy, ale nie jest kompletny.

+0

Podany link wymaga uprawnień :( –

+1

Strona nie jest już dostępna. Zastąpiłem podobny, ale mniej kompletny link. – rpetrich

+2

[Ta odpowiedź StackOverflow jest jasna i daje kod źródłowy.] (Http://stackoverflow.com/a/17478117/59913) –

3

Istnieje niewiele bibliotek analizujących ID3, które nie są oznaczone GPL. Jest na Objective-C framework, który prawdopodobnie mógłby zostać zmodyfikowany do pracy na iPhonie, gdy jest statycznie połączony, ale jest to LGPL. Aby spełnić warunki LGPL z statycznie połączonym binarnym, musisz zapewnić wystarczającą ilość pośrednich komponentów, aby ktoś mógł połączyć je z własną wersją biblioteki, co jest trudne (ale nie niemożliwe) dla aplikacji na iPhone'a. Oczywiście, ponieważ nie byłem w sytuacji, w której musiałem to zrobić, nie rozmawiałem o tym z adwokatem, a ponieważ nie jestem jednym z nich, nie powinieneś brać tego jako autorytatywny.

Najlepszym wyjściem, jeśli nie masz ochoty skonsultować się z adwokatem, jest użycie bardziej liberalnie licencjonowanej biblioteki C, takiej jak libID3 i zawijanie jej w niektórych klasach Celu C. Poleciłabym tylko bezpośrednie włączenie kodu, a nie zajmowanie się wszystkimi problemami związanymi z kompilacją biblioteki statycznej i linkami, ale to tylko kwestia osobistego stylu.

+1

http://www.id3.org miał przegląd dostępnych bibliotek. Ale wygląda na to, że obecnie są na dole. Możesz wypróbować wersję z pamięci podręcznej Google: http://209.85.135.132/search?q=cache:khgjN7xyYeoJ:www.id3.org/Implementations+id3+c&hl=de&client=safari&strip=1 –

+0

Podczas łączenia biblioteki LGPL całe źródło wniosku powinno zostać wydane w celu przestrzegania warunków licencji LGPL. – rpetrich

+1

LGPLv2.1 nie wymaga wydania kodu źródłowego, wymaga obiektów pośrednich "Jeśli łączysz inny kod z biblioteką, musisz dostarczyć odbiorcom kompletne pliki obiektów, aby po wprowadzeniu zmian móc połączyć je z biblioteką. biblioteki i rekompilacji, i musisz pokazać im te warunki, aby znały swoje prawa." –

5

Look w ramach Media Player:

Wymaga to MP3 w pytaniu jest częścią biblioteki iPod w telefonie.

Na przykład określenie nazwy każdego pliku multimedialnego w telefonie (w tym filmów, podcastów itp.)

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

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

Wydaje się, że dostępne są następujące właściwości:

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

Robi to bez przechodzenia przez ram odtwarzacza multimedialnego będzie nieco trudne, i będzie musiał ramy zewnętrznej.

+2

Nie można użyć programu e Media Player, ponieważ pliki są plikami MP3 w folderze dokumentów aplikacji, a nie muzyką, która jest częścią kolekcji muzyki systemowej –