[Swift3]再生中の曲が変わったことを検知する(+曲情報を表示する)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

音楽プレイヤーなどを作る場合、再生中の曲が変わった時に特定の処理を行いたいことがある。

通知センター(NotificationCenter)を使って処理を実現することができるが、一部どハマりする箇所があるので注意が必要。

NotificationCenterで曲の変更を検知する

通知センターで実現可能、だが…

通知センターで受け取る通知の中に「MPMusicPlayerControllerNowPlayingItemDidChange」というものがある。その名の通り、現在再生中の曲が変わったという通知だ。

これを使用すると、再生中の曲が変わった時にある処理を行うというコードは以下のように書ける。

が、残念ながらこのままでは再生中の曲が変わっても処理(ここではdoSomething)が動いてくれない。

MPMusicPlayerControllerクラスの設定が必要

ではどうすれば良いかというと、以下の手順が必要となる。

  • MediaPlayerをインポートする
  • システムの再生状況を取得するインスタンス(MPMusicPlayerController.systemMusicPlayer)を作成する
  • 作成したインスタンスのbeginGeneratingPlaybackNotificationsメソッドを実行して、音楽再生周りの通知を受け取れる状態にする

これを踏まえて先のコードを修正すると、以下のようになる。

これで無事、再生中の曲が変わった時に処理が行われるようになる。

応用してみる(再生中の曲情報を表示する)

「ミュージック」アプリの操作パネルのように、再生中の曲のアルバムアートワーク・曲名・アーティスト名・アルバム名を表示させてみる。

ストーリーボード上でUI部品をささっと配置。

曲情報を表示するアプリの部品配置

配置した部品は全てOutlet接続して、コードはこんな感じで。

これで、再生中の曲情報が画面に表示される。

実行イメージはこのような感じ。

ここに再生ボタンとか音量つまみとかを置けばそれっぽい音楽プレイヤーができると思います。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。