访问歌曲的 BPM 字段(MPMediaItemPropertyBeatsPerMinute 不起作用)
Posted
技术标签:
【中文标题】访问歌曲的 BPM 字段(MPMediaItemPropertyBeatsPerMinute 不起作用)【英文标题】:Access BPM field on a song (MPMediaItemPropertyBeatsPerMinute not working) 【发布时间】:2011-03-09 19:12:06 【问题描述】:我正在构建一个包含媒体播放器的应用程序(我使用的是 ios SDK 4.2)。在播放给定歌曲时,我可以访问几乎所有属性,但无法访问 MPMediaItemPropertyBeatsPerMinute。
每次都返回null。
Apple doc 声明:
媒体项目每分钟的音乐节拍数,对应于 iTunes 中“获取信息”对话框中“信息”选项卡中的“BPM”字段。 Value 是一个表示 NSUInteger 数据类型的 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 中的一个错误。
所以,我的问题有两个方面。
-
这是我做错了吗,还是 SDK 中的一个已知错误?
我还能如何检索歌曲的 BPM 数据?
【问题讨论】:
我看到一些帖子说这在 iOS 4.2+ 中发生了变化。你可以测试构建一个较旧的 iOS 测试,看看它是否有效。 iphonedevsdk.com/forum/iphone-sdk-development/… 不是答案,但不应该是NSLog(@"%@", [currentItem valueForProperty:MPMediaItemPropertyBeatsPerMinute]);
【参考方案1】:
我已经用 iOS SDK 4.3 测试过这个问题,并且可以确认它有效。不过,您的代码看起来还不错。
这可能是 4.2 SDK 中的错误,已在 4.3 中修复。我还可以想象,旧版本的 iTunes 无法正确同步 BPM 属性。
您可以尝试使用字符串 @"beatsPerMinute"
而不是 MPMediaItemPropertyBeatsPerMinute
(适用于 iOS 4.3),但我想这不会解决您的问题。
【讨论】:
感谢您签入 4.3。我认为这是 4.2 中的错误。再次感谢!以上是关于访问歌曲的 BPM 字段(MPMediaItemPropertyBeatsPerMinute 不起作用)的主要内容,如果未能解决你的问题,请参考以下文章
在 mac 中检测 mp3 和 m4a 格式歌曲的每分钟节拍数 (bpm)