Чтение информации в формате MP3 с использованием объектива c

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

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

Ответ 1

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

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

edit: Исходная ссылка теперь отключена. InformIT имеет несколько похожих примеров кода, но это не так полно.

Ответ 2

Посмотрите на среду 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

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

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