MPMusicPlayerControllerを使ってiPhoneで再生中の曲情報を取得する方法です。
ヘッダ/プロパティ追加
#import <MediaPlayer/MediaPlayer.h>
// + MediaPlayer.frameworkをリンクライブラリに追加
@interface HogeVC ()
@property(nonatomic, strong) MPMusicPlayerController *player;
@end
iPodMusicPlayerはアプリ独自ではなくOS共通のプレイヤーを返します。なのでiPhone標準のMusicアプリで曲を再生した状態で、実装したアプリを起動するとMusicアプリの曲がそのまま取得できます。
前処理
-(void) viewDidLoad {
[super viewDidLoad];
self.player = [MPMusicPlayerController iPodMusicPlayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onNowPlayingItemChanged:)
name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object:self.player];
[self.player beginGeneratingPlaybackNotifications];
}
後処理
-(void) viewDidUnload {
[super viewDidUnload];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.player endGeneratingPlaybackNotifications];
}
MPMusicPlayerControllerNowPlayingItemDidChangeNotificationで曲が変わったことを検知できます。
最新の曲情報はMPMusicPlayerController.nowPlayingItemにアクセスして取得します。
曲変更時
-(void) onNowPlayingItemChanged:(NSNotification*)ntf {
MPMediaItem *mediaItem = [self.player nowPlayingItem];
NSInteger mediaType = [[mediaItem valueForProperty:MPMediaItemPropertyMediaType] integerValue];
if (mediaType == MPMediaTypeMusic) {
// 曲名
_title = [mediaItem valueForProperty:MPMediaItemPropertyTitle];
// アルバム名
_albumTitle = [mediaItem valueForProperty:MPMediaItemPropertyAlbumTitle];
// アーティスト名
_artistName = [mediaItem valueForProperty:MPMediaItemPropertyArtist];
// アートワーク(ジャケット写真)
MPMediaItemArtwork *artwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
_artworkImage = [artwork imageWithSize:CGSizeMake(80.0, 80.0)];
// 再生時間
_duration = [[mediaItem valueForProperty:MPMediaItemPropertyPlaybackDuration] floatValue];
}
}