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

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

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

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

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

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

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

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

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

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

  • NSFetchRequest и predicateWithBlock
  • Слабая переменная NSString не равна нулю после установки единственной сильной ссылки на nil
  • В чем разница между ссылкой __weak и __block?
  • Измененный массив в области файлов
  • Цепи анимации анимации ядра
  • Пользовательский блок завершения для моего собственного метода
  • Когда для доступа к свойствам с помощью «self»
  • Реализация -hash / -isEqual: / -isEqualTo ...: для коллекций Objective-C
  • Когда я должен использовать @synthesize явно?
  • IBOutlet и IBAction
  • Как включить ARC для одного файла
  • Давайте будем гением компьютера.