Unityやってるワン

Unityでのゲーム開発を備忘録として記事にしていきます

Unityでモバイル録音機能を実装

モバイル実機で動作する録音機能をUnityで実装してみました。
f:id:nsdeveloperman:20200620021020p:plain

UnityのMicrophon機能を使用することで、デバイスが使用可能なマイクを確認して音声の録音を行うことができます。
UnityEngine.Microphone - Unity スクリプトリファレンス

今回はこのMicrophonの機能を利用したスクリプトを作成してモバイル実機上で動かしてみました。
スクリプト内容は以下になります。

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(AudioSource))]
public class MobileSoundRecorder : MonoBehaviour
{
	[SerializeField] int m_frequency = 44100;
	[SerializeField, Range(1, 200)] int m_recordingTime = 10;
	[SerializeField] Button m_btnRecording = default;
	[SerializeField] Button m_btnPlay = default;

	private AudioClip m_clip = null;
	private AudioSource m_source = null;
	private string m_deviceName = string.Empty;

	private void Awake() => m_source =
		gameObject.GetComponent<AudioSource>();

	private void Start()
	{
		if (Microphone.devices.Length <= 0)
		{
			m_btnRecording.interactable = false;
			m_btnPlay.interactable = false;
			Debug.LogError("使用可能なマイクがありません");
		}
		else
		{
			m_deviceName = Microphone.devices[0];
		}
	}

	private void Update()
	{
		if (string.IsNullOrEmpty(m_deviceName)) { return; }
		m_btnRecording.interactable = !m_source.isPlaying;
		m_btnPlay.interactable = !Microphone.IsRecording(m_deviceName);
	}

	public void RecordingStart() => m_clip = Microphone.Start(
		m_deviceName, false, m_recordingTime, m_frequency);

	public void RecordingPlay()
	{
		if (m_clip == null) { return; }
		m_source.clip = m_clip;
		m_source.Play();
	}
}

使用できるマイクがデバイス上にない場合は、エラーログを表示して処理を行わないようにしています。
今回はマイクが複数ある場合、最初に検知したマイクで録音を行うようにします。

上記スクリプトを作成したら、シーン内の適当なオブジェクトにアタッチします。
録音と再生用のボタンを配置して作成したスクリプトに設定すれば、実装は完了です。
f:id:nsdeveloperman:20200620025519p:plain

スクリプトとシーンを作成して準備ができたら、最後にプロジェクトのPlayerSettingsでConfiguration項目のMicrophone Usage Descriptionにカメラを使用する際の同意テキストを入力します。
ここが未入力だと実機上でマイク機能を使用する際にアプリが落ちることがあるので忘れずに記入しましょう。
同意を求めるテキストは初回のみ表示されるようです。
f:id:nsdeveloperman:20200620025140p:plain
(とりあえず動かしたいときはテキスト内容は何でも良さそうです)

あとはビルドした内容を実機に転送して動かせば、モバイルの録音と再生機能が確認できます。
Unity側の実装のみでモバイル機能を利用できるのはありがたいですね。