【Unity】 iOS端末のミュージックライブラリから曲を取得して再生させる

Apple

UnityでiOS端末のミュージックライブラリの曲が必要になったのですがあんまり参考になるサイトの情報が不足してエラーまみれになったり記事自体が古かったので備忘録としてまとめます。

Objective-Cは触って4日間の超初心者クオリティなので無駄なところがあるかもしれません。

AppleMusicの曲はDRMで保護がかかった曲は再生できないのでご了承ください。
(iTunesで購入した曲やCDからインポートした曲の再生は確認済み)

取得までの流れ

  1. 直接はUnityからアクセス出来ないのでObjective-Cでミュージックライブラリにアクセス
  2. Objective-Cでアクセスできても曲自体は直接取ることができないのでアプリのDocumentsフォルダ以下に曲をwav形式でエクスポート
  3. DocumentsフォルダならUnityから直接アクセス出来るのでエクスポートしたwavファイルをWWWを用いてAudioClipに変換
  4. 取得したAudioClipをAudioSourceにセットして再生!

今回はミュージックライブラリから1曲だけランダムで取得して再生するまでやっていきたいと思います。

ミュージックライブラリにアクセスしてエクスポートするObjective-Cのファイルを準備

まずは、Unityのプロジェクトを作成して「Asset」フォルダの中に「Plugins」フォルダを作成しその中に「iOS」フォルダを作成、そしてその中に今回は「MusicLibraryMediaPicker.mm」と言う名前のファイルを作成します。
(.mmファイルは直接作成できないと思うので一旦外部のテキストエディタでファイルを作成してドラッグ&ドロップしてインポートする方がいいと思います。)

f:id:reishisu:20181222163033p:plain
Objective-Cファイルの準備

Objective-Cファイルを操作するC#のファイルを作成

そのままでは直接Objective-Cのファイルは操作できないので今回は操作する用のC#スクリプトを「Asset」フォルダ直下に「MediaController.cs」と言う名前で作成します。

f:id:reishisu:20181222163745p:plain
MediaController.csを作成

曲を再生するAudioSourceと曲名を表示するTextを作成

画像のようにAudioSourceとTextを作成します。
(CanvasとTextはそのままでは小さすぎるので画像の様に設定します)

f:id:reishisu:20181222234609p:plain
Canvasの設定
f:id:reishisu:20181222234712p:plain
Textの設定

Objective-Cの中身を作成

次はミュージックライブラリからアプリのDocumentsフォルダにエクスポートする処理を先ほど作成したObjective-Cのファイル(MusicLibraryMediaPicker.mm)に下記のソースをコピペしましょう。
こちらのサイトを参考にして私がエラー&バグを修正+加筆したソースを載せます。記事が8年前とかなり古めですがとても参考になりました。
(そのままではエラーが出るかもしれないですが今は放置で大丈夫です)

このままではUnityから呼び出す事ができないので次はC#Objective-Cと連携させる処理を作成します。

C#の中身を作成

ここでは、Objective-Cのコードを実行させたいので先ほど作成したC#のファイル(MediaController.cs)に下記のソースをコピペして実行できるようにしましょう。

これでソースコードの準備は完了です!!

C#とゲームオブジェクトを連携

先ほどObjective-Cを動かす為のC#ソースコードを作成しましたが、そのままでは動いてくれないのでUnityのオブジェクトにアタッチしてアプリ起動時に実行されるようにします。
なので今回は「Main Camera」のゲームオブジェクトにC#スクリプトをアタッチしましょう!

f:id:reishisu:20181222231042p:plain
Main CameraにMediaController.csをアタッチ

ビルド!

これでもうUnityでの準備は完了なので、「PlayerSettings」を各自の環境に設定してビルドしましょう!!
(PlatformがiOSになってない方は先にiOSにSwitch Platformで切り替えてからビルドしてください)

f:id:reishisu:20181222231910p:plain
PlatformとBuild

実行!!

そのままでは実行できないので、いくつか設定する必要があります。

  • Info.plistにミュージックライブラリにアクセスする為の設定を追加
    1. 左にあるInfo.plistを選択して、「Information Property List」の右にある「+」を押す
    2. すると入力ボックスが現れるのでそこに「Privacy – Media Library Usage Description」を入力して右側に適当な文字列を入力します。

これで、アプリ起動時に端末のミュージックライブラリへアクセス許可を選択させるポップアップを表示させる事ができます。

f:id:reishisu:20181222232452p:plain
Info.plistに設定を追加する
  • 作成したObjective-CファイルのARCを無効にする

次は設定がちょっと厄介で画像のように、左の「Unity-iPhone」を押し真ん中上部付近の「Build Phases」を押して「Compile Sources」のボタンを押しましょう。

f:id:reishisu:20181222233308p:plain
Build Phases

下にスクロールすると先ほど作成した「MusicLibraryMediaPicker.mm」があるのでダブルクリックして画像のように「-fno-objc-arc」と入力しましょう。

f:id:reishisu:20181222233746p:plain
ARCを無効化

これで、準備は完了であとは自分の開発者アカウントでSigningして実行しましょう!!

動かした様子

作成したソースコード&プロジェクト

作成したソースコードとプロジェクトは、githubにアップので良かったらどうぞ。
github.com

コメント

タイトルとURLをコピーしました