11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

仙台iOS開発者勉強会(SWWDC)Advent Calendar 2014

Day 14

[iOS] MPMusicPlayerController を利用する際の注意点

Last updated at Posted at 2014-12-14

MPMusicPlayerController を使って iPod の音楽を再生

MPMusicPlayerController を利用すると、簡単に iPod の音楽を再生できる。例えば、以下のようなコードを記述すれば、iPod 内の全ての音楽を読み込んで再生できる。

self.musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[self.musicPlayer setQueueWithQuery:[MPMediaQuery songsQuery]];
[self.musicPlayer play];

また、前の曲への移動、あるいは次の曲への移動もできる。前の曲に移動するには、

[self.musicPlayer skipToPreviousItem];

とするだけである。同様に次の曲に移動するには、

[self.musicPlayer skipToNextItem];

である。

ここで注意しないといけないのは、上記の skipToPreviousItemskipToNextItem は、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 プロパティと勘違いしていたのが、なかなか解決できなかった原因なんだけどね。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?