Чтение информации в формате MP3 с использованием цели c - PullRequest
11 голосов
/ 06 августа 2009

У меня есть файлы mp3, хранящиеся на iPhone, и мое приложение должно иметь возможность считывать информацию ID3, т.е. длину в секундах, исполнителя и т. Д. Кто-нибудь знает, как это сделать или какую библиотеку использовать в Objective-C?

Ваши мысли очень ценятся.

Ответы [ 3 ]

19 голосов
/ 13 августа 2009

Информация ID3 может быть прочитана, получая свойство kAudioFilePropertyInfoDictionary аудиофайла с использованием функции AudioFileGetProperty платформы AudioToolbox.

Подробное объяснение доступно на iphonedevbook.com

edit: Исходная ссылка теперь недоступна. InformIT имеет некоторый подобный пример кода, но он не такой полный.

5 голосов
/ 12 августа 2009

Загляните в среду Media Player:

Для этого необходимо, чтобы данный MP3-файл был частью библиотеки iPod на телефоне.

Например, определение имени каждого мультимедийного файла на телефоне (включая фильмы, подкасты и т. Д.):

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

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

Похоже, что доступны следующие свойства:

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

Выполнение этого без прохождения каркаса медиаплеера будет несколько затруднительным, и для этого потребуется внешняя структура.

3 голосов
/ 11 августа 2009

Существует не так много библиотек разбора ID3, которые не подпадают под GPL. Существует в Objective-C framework , который, вероятно, может быть изменен для работы на iPhone при статической связи, но это LGPL. Чтобы выполнить условия LGPL со статически связанным двоичным файлом, вы должны предоставить достаточное количество промежуточных компонентов, чтобы кто-то мог связать его со своей собственной версией библиотеки, что сложно (но не невозможно) для приложения для iPhone. Конечно, поскольку я не был в состоянии, когда мне приходилось делать это, я фактически не обсуждал это с адвокатом, и, поскольку я не один, вы не должны воспринимать это как авторитетное.

Лучше всего, если вы не хотите консультироваться с юристом, - это использовать более свободно лицензированную библиотеку C, такую ​​как libID3 , и обернуть ее в некоторых классах Objective C. Я бы также порекомендовал просто включать код, а не решать все вопросы, связанные со сборкой статических библиотек и ссылками, но это просто личный стиль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...