今回のチュートリアルは、ipod(iphone&ipad未検証)のミュージックプレイヤーで再生中の曲の情報を取り出して、表示させる方法を説明します。
XCode を起動し、View Based Application で新規プロジェクトを作成します。
このチュートリアル内では、「Song」という名前で保存しました。
音楽、動画などといったメディアアイテムは、ユーザがデスクトップのiTunesと同期した際にデバイス上にコピーされます。 デバイス上のメディアアイテムの一式をiPodライブラリ(iPod library)と呼びます。これらのアイテムを扱うために、MediaPlayerフレームワークを追加します。XCode 内のフレームワークに、「MediaPlayer.framework」を追加してください。
SongViewController.h を開き、以下のコードを追加してください。
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface SongViewController : UIViewController {
IBOutlet UILabel *songTitleLabel;
IBOutlet UILabel *songArtistLabel;
IBOutlet UILabel *songAlbumLabel;
}
@property (nonatomic, assign) IBOutlet UILabel *songTitleLabel;
@property (nonatomic, assign) IBOutlet UILabel *songArtistLabel;
@property (nonatomic, assign) IBOutlet UILabel *songAlbumLabel;
@end
上記のコードは、簡単かと思いますが、最初にMediaPlayer.framework が使えるようにインポートしています。そして、取得した曲情報を view上に表示させるために、ラベルを3つ設定しています。表示内容は、ラベル名を見れば分かりますが、曲のタイトル、アルバム名、アーティスト名です。
次に、
songViewController.m を開き、以下のコードを追加します。
#import “SongViewController.h”
@implementation SongViewController
@synthesize songArtistLabel, songTitleLabel, songAlbumLabel;
さらに、viewDidLoad メソッドを以下のように編集します。
MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer];
MPMediaItem *nowPlayingItem = [player nowPlayingItem];
songTitleLabel.text = [nowPlayingItem valueForProperty:MPMediaItemPropertyTitle];
songAlbumLabel.text = [nowPlayingItem valueForProperty:MPMediaItemPropertyAlbumTitle];
songArtistLabel.text = [nowPlayingItem valueForProperty:MPMediaItemPropertyArtist];
現在再生中のミュージックプレイヤーを設定し、再生中の曲情報を取得しています。
(今回は、取得していませんが、歌詞を表示する場合は、MPMediaItemPropertyLyrics を使います。MPMediaItem の各プロパティについて詳しく知りたい方は、一番下に参考サイトを載せているので、参照してください。)
ここで取得した曲情報を view 上に表示させるために、Interface Builder を起動(SongViewController.xib をダブルクリック)し、view 上にラベルを三つ配置します。
そして、配置したラベルとXCode上に宣言したIBOutlet を接続します。
ここまで完了したら、ビルド&実行します。デバイス上でアプリケーションを起動すると、プレイヤーで再生中の曲が表示されます。
注意点としては、シミュレータには、再生中の音楽情報がないので、何も表示されません。
また、再生中の曲に歌詞が設定されているにもかかわらず、歌詞が表示されないのは、ipodから一度貸し表示させることで、歌詞が取得可能になると思います。が、これでは、あまり実用的ではありませんね。。。AVURLAssetのlyricsプロパティなら取得可能(?)。
MPMediaItemクラス
参考サイト
http://developer.apple.com/library/ios/#documentation/MediaPlayer/Reference/MPMediaItem_ClassReference/Reference/Reference.html
http://blog.livedoor.jp/second_flush/archives/51141605.html#MPMediaItemPropertyPersistentID
songViewController.m
メソッドvalueForPropertyが必要ではありませんか?
これがないと警告がでます。
songTitleLabel.text
= [nowPlayingItem valueForProperty:MPMediaItemPropertyTitle];
songAlbumLabel.text
= [nowPlayingItem valueForProperty:MPMediaItemPropertyAlbumTitle];
songArtistLabel.text
= [nowPlayingItem valueForProperty:MPMediaItemPropertyArtist];
またまた見たひとより さん>ご訪問&貴重なコメントありがとうございます。
基本的には、私の手元で動作確認したものを記事にしているのですが、バージョンの違いなどに関する警告でしょうか。該当メソッドが実装されてないことに関する警告でしょうか。
先ほど、xcode3.2.5で動作確認してみましたが、私の手元のiphoneでは警告もなく正常に動きました。
ん〜なんででしょう。。。
本件とは関係ないかと思いますが、
[nowPlayingItem valueForProperty:MPMediaItemPropertyTitle];
などのvalue…の前にスペースが入ってなかったので、修正しました。