访问歌曲的 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 不起作用)的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中检测歌曲的BPM [关闭]

在 mac 中检测 mp3 和 m4a 格式歌曲的每分钟节拍数 (bpm)

歌曲的BPM (Beat Per Minute)--每分钟节拍数

怎么把一首自己喜欢的普通歌曲变成DJ 混合DJ?

BPM Analyzer安装教程

如何在 Python 中获取 BPM 和节奏音频功能 [关闭]