その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

SystemMediaPickerViewControllerでiPodライブラリ内の楽曲を選択する

このあたりのフレームワークは仕事であまり使う機会がないので存在すら知らなかったのですが、iPodアプリの楽曲選択のUIをそのまま使えるSystemMediaPickerViewControllerなる親切なクラスがあるのを知り、使ってみました。

1. 準備

  • MediaPlayer.frameworkをプロジェクトに追加する
  • ヘッダファイルで、
    • #import

2. MPMediaPickerController表示処理

MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
picker.delegate = self;		

picker.allowsPickingMultipleItems = NO; // YESなら複数選択可
picker.prompt = @"ピッカーのタイトル";

[self presentModalViewController:picker animated:YES];
[picker release];

3. MPMediaPickerControllerDelegateのメソッドを実装

// 曲を選択した時
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker 
  didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection {

	for (MPMediaItem *item in mediaItemCollection.items) {
		NSString *title = [item valueForProperty:MPMediaItemPropertyTitle];
		NSLog(@"selected title:%@", title);
	}
	
	[self dismissModalViewControllerAnimated:YES];
}

// 曲をキャンセルした時
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
	
	[self dismissModalViewControllerAnimated:YES];
}


ライブラリから選択された曲を再生するには、上記のMPMediaItemCollectionをMPMusicPlayerControllerなるプレイヤークラスのインスタンスに渡してやれば再生できます。

MPMusicPlayerController *player = [MPMusicPlayerController applicationMusicPlayer];
[player setQueueWithItemCollection:mediaItemCollection];


再生や停止は超シンプル。

- (IBAction)pressPlay {
	[player play];
}

- (IBAction)pressPause {
	[player pause];
}

- (IBAction)pressStop {
	[player stop];
}


iPodライブラリから取り出した曲をOpenALで再生、とかも実装したので、それはまた後日書こうと思います。