じゃ、今回は iOS デバイスでのマイク使用に必要な、パーミッションについて!
前回までのコードで、Editor 上ではとてもいい感じで動いてたんで、デバイスに持ってきて動作させたんですが、録音を開始した瞬間、デバイスがハードクラッシュしましたよ。ハハハハハッ
ま、Unity あるあるですよね。
でも、原因は Unity にある訳じゃなくて、当然自分のコードなんですが、2箇所問題がありました。(でもハードクラッシュはどうかと思いますが...)
一つ目は、前にもちょっと書いた サンプリングレートの問題。デバイス上では、サンプリングレートの制限が無くて、
Microphone.GetDeviceCaps()
が、min も max も 0 で帰ってくるんですよね。なんで、適当な数値を渡してやって、この問題はクリア!
で、二つ目が、今回の本題のマイク使用のパーミッションです。
ここ、特に大きく宣伝されてるわけではないんですが、Unity で全て処理できる様になってるみたいなんですよねー
お世話になるのは、おなじみの Application class で、リファレンスや、コミュニティのやりとりを見てると、もともとWeb Player だけの対応だったみたいなんですが、今はどうやら iOS デバイスも対応している様なので、試しに下みたいな感じで読んでみました。
Line 699 で、マイク使用許可済みかどうかチェックして、許可がなければ、Line 710 で許可をもらうコルーチンを始動!
で、コルーチン側も、Unity の Aplication class から簡単にこれだけ。
Line 984 の
yieldreturnApplication.RequestUserAuthorization(UserAuthorization.Microphone);
で、許可をもらうポップアップを表示してるだけ。
後もう一つ!
Xcode での設定です。リサーチをしてみると、どうやらこれがハードクラッシュの原因なのかな?
Xcode の info.plist に、マイクの使用を明示してやんないとダメみたいですね。
なんで、Xcode で info.plist を開いて、この Privacy 設定を追加しましょう!
これでデバイスで実行すると、
こんな感じで、許可を求めるポップアップが出る様になりました。
ちなみに Editor 上では、常に許可を持った状態になるみたいです。
これを実装して以降は、録音開始してもアプリがクラッシュしなくなりました。
やっぱりこれらが原因だったみたいです♪