MPMusicPlayerController を使って iPod の音楽を再生
MPMusicPlayerController を利用すると、簡単に iPod の音楽を再生できる。例えば、以下のようなコードを記述すれば、iPod 内の全ての音楽を読み込んで再生できる。
self.musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[self.musicPlayer setQueueWithQuery:[MPMediaQuery songsQuery]];
[self.musicPlayer play];
また、前の曲への移動、あるいは次の曲への移動もできる。前の曲に移動するには、
[self.musicPlayer skipToPreviousItem];
とするだけである。同様に次の曲に移動するには、
[self.musicPlayer skipToNextItem];
である。
ここで注意しないといけないのは、上記の skipToPreviousItem と skipToNextItem は、play を実行しないと機能しない点である。つまり、[self.musicPlayer setQueueWithQuery:[MPMediaQuery songsQuery]];
の実行後に、[self.musicPlayer skipToNextItem];
を実行しても次の曲を選択できない。
理由は、self.musicPlayer.nowPlayingItem の値が nil だから。これは通常、play を実行することで設定される。
MPMusicPlayerController 使用時の基本形
MPMusicPlayerController を利用する際に、とりあえず次のようなコードを実装すれば、上記のような問題に遭遇し、解決まで半日も費さずに済む。
self.musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
MPMediaQuery * query = [MPMediaQuery songsQuery];
[self.musicPlayer setQueueWithQuery:query];
self.musicPlayer.nowPlayingItem = query.items[0]; // ここで初期設定を実施!
解決方法を見れば、すごく当然のことだ。しかしながら、GUI 経由の簡易音楽プレイヤーを実装して、起動後に再生せずに次の曲を選択して期待通りに機能しない場合、原因究明までかなりの時間を浪費する。
実際は、nowPlayingItem を readonly プロパティと勘違いしていたのが、なかなか解決できなかった原因なんだけどね。