访问歌曲上的BPM字段(MPMediaItemPropertyBeatsPerMinute不起作用)

我正在构build一个有媒体播放器的应用程序(我正在使用iOS SDK 4.2)。 当播放给定的歌曲时,我可以访问几乎所有的属性,但是我无法访问MPMediaItemPropertyBeatsPerMinute。

它每次都返回null。

苹果文件指出:

媒体项目的每分钟音乐节拍数,对应于iTunes中“获取信息”对话框的“信息”选项卡中的“BPM”字段。 Value是表示NSUInteger数据types的NSNumber对象。

在iOS 4.0及更高版本中可用。

在MPMediaItem.h中声明。

请注意,我正在使用的歌曲在BPM字段中包含BPM数据。 我知道这不是默认设置。

我一直在尝试的代码是:

MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; // ... MPMediaItem *currentItem = [musicPlayer nowPlayingItem]; if (currentItem != NULL) { NSLog([NSString stringWithFormat:@"%@", [currentItem valueForProperty:MPMediaItemPropertyBeatsPerMinute]]); } 

上面的代码为每首歌曲吐出“(null)”。

由于我能够以这种方式访问​​当前歌曲的所有其他属性,我相信这可能是SDK中的一个错误。

所以,我的问题有两点。

  1. 我是否做错了,或者这是SDK中的一个已知的错误?
  2. 我还可以怎样去检索歌曲上的BPM数据?

我已经使用iOS SDK 4.3testing过这个问题,并且可以确认它是否有效。 你的代码看起来不错。

这可能是4.3 SDK中已经修复的一个bug。 我也可以想象,旧版本的iTunes不能正确同步BPM属性。

您可以尝试使用string@"beatsPerMinute"而不是MPMediaItemPropertyBeatsPerMinute (在iOS 4.3中工作),但我想这不会解决您的问题。