使用目标c阅读MP3信息

时间:2009-08-06 14:56:52

标签: iphone objective-c xcode metadata mpnowplayinginfocenter

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

非常感谢您的想法。

3 个答案:

答案 0 :(得分:19)

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

iphonedevbook.com

提供详细说明

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

答案 1 :(得分: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

不经过媒体播放器框架这样做会有些困难,需要一个外部框架。

答案 2 :(得分:3)

没有很多ID3解析库没有GPL。在Objective-C framework上有可能被修改为在静态链接时可以在iPhone上运行,但它是LGPL。为了满足LGPL与静态链接二进制文件的条款,您必须提供足够的中间组件,以便有人可以使用他们自己的库版本重新链接它,这对于iPhone应用程序来说很难(但并非不可能)。当然,因为我没有做过必须这样做的事情,所以我实际上并没有和律师讨论过这个问题,因为我不是一个律师,所以你不应该把它作为权威。

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