menu
Channels
Team

UnityのマイクAPIで音声が取得できない

January 8, 2020 at 3:54am

UnityのマイクAPIで音声が取得できない

January 8, 2020 at 3:54am (Edited 10 months ago)
いつもお世話になっております。 GateboxSDKのマイク機能ではなく、UnityのMicrophoneApi(https://docs.unity3d.com/jp/460/ScriptReference/Microphone.html)を利用して音声を取得したいのですが、上手く音声を取得できず苦戦しております。 私の方で行っている設定としましては以下がございます。
・AndroidManifestに以下の内容を記載
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />
・RuntimePermissionでマイクの権限を要求
Permission.RequestUserPermission(Permission.Microphone)
検証として、同様のコードをAndroidのモバイル端末(OPPO Reno A)で動かしたところ、期待した挙動(音声の録音と再生)となりました。 この差が分からず、もしGateboxで特別行わなければいけない設定や処理が思い当たるようでしたら、ご教示いただけますと幸いです。 何卒よろしくお願いいたします。
=================================== 追記:Unity2019.3.0f3 を利用しております。

January 8, 2020 at 9:23am
いつもお世話になっております。 御報告されたUnityのバージョンで試したのですが、 特に問題なく録音および再生が行われました。
Sceneに適当なAudioSourceを配置後、 ''' AudioSource asrc = GetComponent<AudioSource>(); asrc.clip = Microphone.Start("Android audio input", true, 10, 44100); asrc.Play(); '''
としたのですが、差異はありますでしょうか。
  • reply
  • like

January 9, 2020 at 1:46am
ありがとうございます。 私がテストのため用意したのは下のコードなのですが、あまり差異はないと思います。
public class mictest : MonoBehaviour
{
// Start is called before the first frame update
IEnumerator Start()
{
// Permission
#if !UNITY_EDITOR && UNITY_ANDROID
if (!Permission.HasUserAuthorizedPermission(Permission.Microphone))
{
Debug.Log("パーミッションリクエスト");
Permission.RequestUserPermission(Permission.Microphone);
while (!Permission.HasUserAuthorizedPermission(Permission.Microphone))
{
yield return null;
}
}
Debug.Log("パーミッション = " + Permission.HasUserAuthorizedPermission(Permission.Microphone));
#endif
// Device
Debug.Log("デバイス数 = " + Microphone.devices.Length);
foreach (var d in Microphone.devices)
{
Debug.Log(d);
}
var deviceName = Microphone.devices[0];
// Play
Debug.Log("Recording");
var clip = Microphone.Start(deviceName, false, 10, 44100);
while (!Input.GetMouseButtonDown(0)) yield return null;
Microphone.End(deviceName);
Debug.Log("Recorded");
Debug.Log("Play");
var audioSource = gameObject.AddComponent<AudioSource>();
audioSource.PlayOneShot(clip);
yield break;
}
}
Edited
  • reply
  • like
ソースのご提供有難う御座います。 キー入力待ちを行う処理についてなのですが、 GateboxのButtonを待機する場合、Input.GetMouseButtonDownではなく、 GateboxSDKのAPIを使用する必要が御座います。 SDK リファレンス 御検討のほど宜しくお願い致します。
  • reply
  • like
すみません。情報が不足していました。 Vysorで操作を行っていますので、入力はこれでも大丈夫だと思っております。
  • reply
  • like
頂いたUnityのプロジェクトで動作を確認したのですが、録音~再生は出来ている様でした。 試した手順ですが、 アプリ起動→Gatbox本体のマイク部分を叩く→Vysorで画面をクリック。 その後、再生がされていました。 尚、本体のボリュームは中程度です。
  • reply
  • like
ご確認ありがとうございます。 すみません。「Gatbox本体のマイク部分を叩く」はどのように行えばよいでしょうか?
  • reply
  • like
Gatebox本体の上部にある、二つのマイクを爪で叩いて確認しました。 もちろん声などでも同じだと思います。 他の可能性としては、バックグラウンドで起動しているアプリが マイクの機能を奪っていたりでしょうか。
  • reply
  • like
すみません。音を入れるために叩いたということでしたか。 バックグラウンドになっているアプリがマイクを使ってるのは懸念していて、他アプリはすべて落とした状態でテストしていました。
一度adbを使わずに、developerConsoleのサンドボックス環境を使い、正しい手順でアプリをインストールしてみた方がよかったりするのでしょうか?
  • reply
  • like
物理的に音を鳴らしたという意味でした。伝わりにくく申し訳ありません。 DeveloperConsoleからのInstallというのも一つの手かもしれません。 尚、こちらでは、Gateboxの起動アプリはGateboxVideoを設定しております。
  • reply
  • like
すみません。解決しました。 ご指摘いただいた通り、バックグラウンドのタスクが動作していたことが原因でした。
設定画面から動いているアプリをすべて強制終了させると、マイクを使えるようになりました。 これまで普通のスマホと同じ操作で裏で動いているアプリをスワイプすることで、バックグラウンドのタスクを終了させていたつもりでした。
Edited
  • reply
  • like
承知致しました。 引き続き宜しくお願い致します。
  • reply
  • like
この度はお手数をおかけし申し訳ございませんでした。 本当にありがとうございました。
おそらくなのですが、hardware-test-ts、hardware-test-marktのどちらかのアプリがマイクを使用した状態になっていたようです。 しかしその後、端末を再起動してもこちらのアプリは立ち上がらないのが気になっていて、どのようなタイミングで起動するかお聞きすることってできますでしょうか?
  • reply
  • like
解答に至るまで時間が掛かってしまい申し訳ありません。 hardware-test-*のアプリについてなのですが、 テストアプリですので通常、起動されるタイミングは無いと思われます。
  • reply
  • like

January 14, 2020 at 12:41am
ご回答ありがとうございます。承知いたしました。
  • reply
  • like