11

我有mp3文件存储在 iPhone 上,我的应用程序应该能够读取ID3信息,即以秒为单位的长度、艺术家等。有谁知道如何做到这一点或在 Objective-C 中使用什么库?

非常感谢您的想法。

4

3 回答 3

19

可以使用AudioToolbox 框架kAudioFilePropertyInfoDictionary的功能读取 ID3 信息以检索音频文件的属性。AudioFileGetProperty

iphonedevbook.com上提供了详细说明

编辑:原始链接现已关闭。InformIT有一些类似的示例代码,但并不完整。

于 2009-08-13T00:22:46.337 回答
5

查看媒体播放器框架:

这要求有问题的 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

在不通过媒体播放器框架的情况下这样做会有些困难,并且需要一个外部框架。

于 2009-08-11T23:06:59.930 回答
3

没有多少没有 GPL 的 ID3 解析库。有一个 Objective-C框架可能被修改为在静态链接时在 iPhone 上工作,但它是 LGPL。为了使用静态链接的二进制文件满足 LGPL 的条款,您必须提供足够多的中间组件,以便有人可以将其与他们自己的库版本重新链接,这对于 iPhone 应用程序来说是困难的(但并非不可能)。当然,由于我没有处于必须这样做的位置,因此我实际上没有与律师讨论过,而且由于我不是律师,因此您不应该将其视为权威。

如果您不想咨询律师,最好的选择是使用更自由许可的 C 库,例如libID3,并将其包装在一些 Objective C 类中。我还建议直接包含代码而不是处理所有静态库构建和链接问题,但这只是个人风格的事情。

于 2009-08-11T08:51:18.000 回答