2011-03-09 20 views
2

我正在構建一個包含媒體播放器的應用程序(我正在使用iOS SDK 4.2)。當播放給定的歌曲時,我可以訪問幾乎所有的屬性,但我無法訪問MPMediaItemPropertyBeatsPerMinute。在歌曲上訪問BPM字段(MPMediaItemPropertyBeatsPerMinute不工作)

每次都返回null。

Apple doc狀態:

每分鐘的媒體項的音樂節拍,對應於「BPM」領域在iTunes中獲取信息對話框中的信息選項卡的數量。 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]]); 
} 

上面的代碼吐出「(空)」,每首歌曲。

由於我能夠以這種方式訪問​​當前歌曲的所有其他屬性,我相信這可能是SDK中的一個錯誤。

所以,我的問題稍微有兩點。

  1. 我這樣做是錯誤的,還是這是SDK中的一個已知錯誤?
  2. 我還可以怎樣去檢索歌曲上的BPM數據?
+0

我已經看到了幾個貼子,說這在iOS 4.2+中有所變化。您可能會測試構建一個較舊的iOS測試,看看它是否有效。 http://www.iphonedevsdk.com/forum/iphone-sdk-development/65342-mpmediaitempropertybeatsperminute-does-not-work-4-2-a.html – NWCoder 2011-03-18 17:28:47

+0

不是答案,但不應該是'NSLog(@ 「%@」,[currentItem valueForProperty:MPMediaItemPropertyBeatsPerMinute]);' – 2011-03-19 14:57:17

回答

3

我已經用iOS SDK 4.3測試過這個問題,並且可以確認它的工作原理。然而你的代碼看起來不錯。

這可能是4.2 SDK中的一個bug,在4.3中已經修復。我也可以想象舊版本的iTunes不能正確同步BPM屬性。

您可以嘗試使用字符串@"beatsPerMinute"而不是MPMediaItemPropertyBeatsPerMinute(適用於iOS 4.3),但我想這不會解決您的問題。

+0

感謝您檢查4.3。我會認爲這是4.2中的一個bug。再次感謝! – venables 2011-03-22 01:52:41