iOS

【Swift4】MPMusicPlayerControllerの使い方。ミュージックプレイヤーを作るには【iOS】

まに
まに
せっかくアプリ開発やってるんだし、オリジナルの音楽アプリで音楽聴きたいなぁ

そう思い立って開発しようとしたら

iPhoneに入ってる音楽データってどうやって取得して再生するんだ…?そもそもどこに入ってるんだ…?

とわかんなくなったので、これを機にMPMusicPlayerControllerの使い方をまとめておこうと思います。

参考にした記事は以下4記事↓

iOSでミュージックプレイヤーを作る

iOSデバイス(iPhone,iPadなど)に入っている音楽データを取得して、音楽を再生できるようにするには、調べたところ方法は

  • MPMusicPlayerControllerを使う
  • AVAudioPlayerを使う
  • AVPlayerを使う

この3つがあるらしい。(参考:[iOS][Swift]ミュージックライブラリにアクセスして音楽を再生する(MPMusicPlayerController使用)

いろいろ調べてみるとMPMusicPlayerControllerが解説されてる記事が多くてやりやすかったので、今回はMPMusicPlayerControllerを使って実装してみます。

他2つの方法もそのうち試したい。そのうち()

MPMusicPlayerControllerを使う

さて、MPMusicPlayerControllerを使った音楽プレイヤーの大まかな仕組みはこんな感じ。

  1. ミュージックライブラリにアクセスする
  2. ミュージックライブラリに入っている再生したいオーディオファイルを取得
  3. 選択したオーディオファイルを再生する(一時停止・終了の再生操作ができる)

MPMusicPlayerControllerを使うために、まずは「MediaPlayer」をimport

ミュージックライブラリで再生したいオーディオファイルを取得→再生するために、「MPMediaPickerControllerDelegate」を忘れずに設定しておこう。

画面構成

音楽プレイヤーを作るには「再生したい音楽を選択するプレイリスト画面」「再生音楽の操作をするプレイ画面」の2画面が最低限でも必要。

まずはStoryboardでプレイ画面のUIを簡単に作成していく。

  • 選曲ボタン(プレイリスト画面に遷移する)
  • 再生ボタン
  • 一時停止ボタン
  • 停止ボタン

の4つをUIButtonで適当に配置。ちなみにさっきの参考記事を参考にしながら作らせてもらってます。

音楽を選ぶプレイリスト画面は、「メディアアイテムピッカー」というiOSで予めUIが用意されているViewControllerを使うのでStoryboardでは作らなくてOK。

ここまでで下準備は完了。これから「音楽を選んで再生する処理」を書いていく。

選択した曲を再生する「Player」

音楽を再生するにはまず最初に「MPMediaPickerController」でミュージックライブラリからオーディオファイルを取得してくる必要がありますが、先にその取得してきたオーディオファイルを再生する再生機「MPMusicPlayerController」を作ります。

MPMusicPlayerControllerには2つのモードがあり、

  • applicationMusicPlayer
  • systemMusicPlayer

この2つのうちどちらかを選ぶことになりますが、使い分けとしては、

  • 前者は「アプリ内だけで音楽を再生させたい場合に使用」、つまりはアプリ内でのみ使えるプレイヤー。
  • 後者は「iOS自体が持つシステムプレイヤー」を使用するので、ロック画面でのプレイヤー操作やシャッフル、リピートなどが使えるモードになってます。

音楽プレイヤーアプリを作るなら後者ですが、今回は導入編なので前者を使ってみました。

あとはStoryboardで作成したボタンをそれぞれ@IBActionで紐づけて、それぞれボタンを押した時に対応した再生操作が実行されるようにしておきます。

ミュージックライブラリにある曲をリスト表示する「Picker」

さて、音楽を再生する準備は整ったので、あとは再生する「オーディオファイル」を持ってくるのみ。

iOSデバイスに保存されているオーディオファイルを取得するには、ミュージックライブラリにアクセスして取ってこなければなりません。

そこで使うのがこの「メディアアイテムピッカー」。

iOSで予め用意されているもので、簡単にミュージックライブラリにアクセス→オーディオファイル取得ができます。

ただこれがライブラリ的な扱いになるのか、設定済みのUIをカスタマイズするのは難しい気がする。自分好みのUIで作るなら多分他の方法があると思うので要調査。

というわけで、

  1. 選曲ボタンタップ
  2. 「メディアアイテムピッカー」を開いてミュージックライブラリにアクセス
  3. 再生したい音楽を選択して、playerにセットする

までの処理を書いていく。

ここまででコードは完成です。

注意すること

今回いろんな記事を参考にしながら音楽プレイヤーを作ってて、うまく処理が作動せずハマったところがあったので2つほど注意点を。

info.plistにプロパティを追加しなきゃいけない

選曲ボタンを押した後、メディアアイテムピッカーに移動するところが真っ白な画面しか出てこなくてハマりました。

原因は、「ミュージックライブラリにアクセスする際のアクセス許可を取ってなかったため」

カメラや写真アルバムを使う時と同じように、ミュージックライブラリも使用する際はinfo.plistにプロパティを追加しないといけないようです。

ということでinfo.plistに下記を追加。

Privacy – Media Library Usage Description

これをしたら無事にメディアアイテムピッカーが表示されました。

MPMediaPickerControllerDelegateの各メソッドにアンダースコアが抜けている

こちらの記事を参考にして作ってたんですが、エラーでビルド出来ないという事態が起きました。

Delegateの設定も忘れてない、タイプミスもない、なんでだ…?と思ってたら、各デリゲートメソッドにアンダースコアが抜けてました

このアンダースコアの有無で、引数の呼び出し方が変わるみたいなので、それが原因だったのかな?

とりあえず、ここまでをきっちり出来ていれば簡単な音楽プレイヤーアプリが出来てるはずです!こんぐらちゅれーしょん。

Tips

バックグラウンド再生に対応する

音楽をバッググラウンド再生できずに何が音楽プレイヤーだ糞アプリやんけって言われそうなので、バックグラウンド再生のやり方を。

実はバックグラウンド再生はコードを書く必要はなくて、Xcodeの「Capabilities」→「Background Modes」にある「Audio, Airplay, and Picture in Picture」にチェックを入れるだけ。簡単。

もしかすると他の方法があるのかもしれないけど、これでもバッチリバックグラウンド再生できました。

というわけで今回は、他の方が書いてくれた記事をいくつか参考にしながら、簡単な音楽プレイヤーアプリを作るチュートリアルをやってみました。

このチュートリアルで勉強したことをもとに、今制作中の音楽プレイヤーアプリを完成させてリリースまでもっていくつもり。リリースしたら報告します!

それでは!

ABOUT ME
まに / mani
まに / mani
21歳のミニマリスト。 余白・インテリアとITが好きでWebやアプリを作ったりしてるエンジニア志望大学生。無駄を省いて「好き」を最大化するミニマリズムを研究中。