トップ > 【Unity】キャプチャーボードを利用して映像と音声をキャプチャーする方法を紹介します!
更新日 2023/3/27

【Unity】キャプチャーボードを利用して映像と音声をキャプチャーする方法を紹介します!

Unityからキャプチャーボードを利用して映像と音声をキャプチャーする方法をまとめます。今回利用するキャプチャーボードはMiraBoxで、任天堂スイッチの映像と音声をキャプチャーしたいと思います。

Captureboard_NintendoSwitch

映像キャプチャー

Unityで映像デバイスから映像をキャプチャーするにはWebCamTextureクラスを利用します。クラス名からウェブカメラ専用のクラスに見えますが、一般的な映像デバイスにも利用できます。


最初に利用可能な映像デバイス名を調べます。

foreach(var device in WebCamTexture.devices)
{
Debug.Log(device.name);
}

結果は以下の通りです。

Captureboard_WebCamTextureDevices

上から2番目のMiraBox Video Captureデバイスを利用します。


続いてWebCamTextureを作成します。コンストラクタにはデバイス名、解像度とFPSを指定します。任天堂スイッチはフルHD解像度(1920x1080)で60FPSで動作するのでコンストラクタの引数は以下のようになります。

string videoDeviceName = WebCamTexture.devices[1].name;
WebCamTexture webCamTexture = new WebCamTexture(videoDeviceName, 1920, 1080, 60);

WebCamTexture.Playメソッドでキャプチャーを開始します。

webCamTexture.Play();

最後にWebCamTextureをスクリーンに描画します。処理を簡単にするためにOnGUIをオーバーライドしてGUI.DrawTextureメソッドで描画します。

void OnGUI()
{
GUI.DrawTexture(new Rect(0, 0, 1920, 1080), webCamTexture);
}

音声キャプチャー

Unityで音声デバイスから音声をキャプチャーするにはMicrophoneクラスを利用します。クラス名からマイク専用のクラスに見えますが、一般的なオーディオデバイスにも利用できます。


最初に利用可能な音声デバイスを調べます。

foreach (var device in Microphone.devices)
{
Debug.Log(device);
}

結果は以下の通りです。

Captureboard_MicrophoneDevices

上から4番目のデジタル オーディオ インターフェース(MiraBox Video Capture)を利用します。


続いてMicrophone.GetDeviceCapsで利用可能な帯域の最小周波数と最大周波数を調べます。

string audioDeviceName = Microphone.devices[3];
int minFreq, maxFreq;
Microphone.GetDeviceCaps(audioDeviceName, out minFreq, out maxFreq);
Debug.Log("MinFreq:" + minFreq + ", MaxFreq:" + maxFreq);
Captureboard_Microphone_GetDeviceCaps

周波数は48000を利用します。


Microphone.Startでオーディオクリップに音声の録音を開始します。引数はデバイス名、ループ録音をするかどうか、録音するオーディオクリップの長さ、録音する周波数になります。

Microphone.Start(audioDeviceName, true, 1, 48000)

音声を再生するためにAudioSourceをゲームオブジェクトに追加します。Microphone.Startで作成したクリップを設定してループ再生をオンにします。最後にAudioSouce.Playを呼び出して音声を再生します。

AudioSource audioSource = gameObject.AddComponent<AudioSource>();
audioSource.clip = Microphone.Start(audioDeviceName, true, 1, 48000);
audioSource.loop = true;
audioSource.Play();

スクリプトの実装

映像キャプチャーと音声キャプチャーで説明したことを踏まえてスクリプトを実装します。

using UnityEngine;

public class CaptureboardTest : MonoBehaviour
{
WebCamTexture webCamTexture;

void Start()
{
string videoDeviceName = WebCamTexture.devices[1].name;
webCamTexture = new WebCamTexture(videoDeviceName, 1920, 1080, 60);
webCamTexture.Play();

string audioDeviceName = Microphone.devices[3];
AudioSource audioSource = gameObject.AddComponent<AudioSource>();
audioSource.clip = Microphone.Start(audioDeviceName, true, 1, 48000);
audioSource.loop = true;
audioSource.Play();
}

void OnGUI()
{
GUI.DrawTexture(new Rect(0, 0, 1920, 1080), webCamTexture);
}
}

シーンの構成と実行

ヒエラルキーにゲームオブジェクトを作成してインスペクターからスクリプトを追加します。

Captureboard_Scene

実行して確認します。

Captureboard_NintendoSwitch

映像は遅延なく60FPSで動くのでゲームビューを見ながら操作しても快適にプレイできます。音声は0.5秒くらい遅延があり違和感が少しありました。音声の遅延に関して良い解決方法があれば更新したいと思います。

キャプチャーボードの映像と音声をキャプチャーする方法を紹介しました。
キャプチャーデバイスを利用したコンテンツの開発などに使えそうですね。


関連ページ


Copyright ©2022 - 2024 うにぉらぼ