2012年6月16日土曜日

iPod Library表示



Playerが表示するiPod Library画面の呼び出し方法です。
SimulatorではiPod Libraryにアクセスできないため、実機を接続する必要があります。
iPhone simulatorで実行すると次のエラーでクラッシュします。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to load iPodUI.framework'

MediaPlayer.framework追加


.hファイル
#import <MediaPlayer/MediaPlayer.h>

@interface MyViewController : UIViewController <MPMediaPickerControllerDelegate>
- (IBAction)someMethod:(id)sender;
@end

.mファイル
@implementation MyViewController

//MPMediaPickerController呼び出し.
- (IBAction)showLibrary:(id)sender {
    MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio];
    [picker setDelegate: self];
    //複数選択を許す場合YES、一曲のみ選択の場合NO
    [picker setAllowsPickingMultipleItems: YES];
    [self presentModalViewController:picker animated: YES];
}

//Pickerの[Cancel]ボタンタップ. 
- (void)mediaPickerDidCancel: (MPMediaPickerController *)mediaPicker
{
    // モーダルビュー解除.
    [self dismissModalViewControllerAnimatedYES];
}

//Pickerの[Done]ボタンタップ.
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker
 didPickMediaItems:(MPMediaItemCollection *)collection
{
    [self dismissModalViewControllerAnimated: YES];
    [self doSomethingWithCollection: collection];
}

//collectionを使った処理
- (void)doSomethingWithCollection:(MPMediaItemCollection *)collection
{
    //MusicPlayer作成
    MPMusicPlayerController* musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
    //collectionをセット
    [musicPlayer setQueueWithItemCollection: collection];
    //演奏開始
    [musicPlayer play];
}

//曲名等の取得
MPMediaItem * mediaItem = [[collection items] objectAtIndex:index];
[mediaItem valueForProperty:MPMediaItemPropertyArtist];
[mediaItem valueForProperty:MPMediaItemPropertyAlbumTitle];
[mediaItem valueForProperty:MPMediaItemPropertyTitle];

//歌詞の取得
[mediaItem valueForProperty: MPMediaItemPropertyLyrics];

ただし、MPMediaItemの場合はPlayerで一度再生した曲でないと歌詞データが取得できない(Xcode 4.3.2)。AVAssetからは取得できる。
AVFoundation.framework追加

#import <AVFoundation/AVFoundation.h>

NSURL *url = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
AVAsset *asset = [AVAsset assetWithURL:url];
NSString *lyrics = asset.lyrics;  

参考:iPodライブラリアクセスプログラミングガイド

0 件のコメント: