CRI LipSync V for Unity Manual  Last Updated: 2021-11-01
マイクデバイスの選択

サンプル内容

概要

cri4u_samples_crilips_scene03_screen.png

端末に接続されているマイクデバイスから指定のものに接続し、リップシンクを行うサンプルです。
ドロップダウンからデバイスとチャンネル数を指定して [Start Device] ボタンを押すと、指定したマイクデバイスに入力された音声に基いたリップシンクが始まります。
接続中に [Channel Select] ドロップダウンで、指定デバイスのどのチャンネルに対してリップシンクするかが選択できます。
実行中にマイクデバイスを繋ぎ直した場合などは、 [Stop Device] ボタンを押して解析を停止した状態で [Update] ボタンを押せば、ドロップダウンリストの内容が更新されます。

サンプルシーンの解説

シンプルなマイク入力リップシンク 」シーンと同じ3つのCRI Lips コンポーネントが配置されていますが、若干設定が異なります。
cri4u_samples_crilips_scene03_setting.png
・CriLipsSamplerForAtomMicの [Auto Connect] が無効
スクリプトから接続先デバイスを指定したいので、 [Auto Connect] を無効にします。
・CriLipsAnalyzerとCriLipsSamplerForAtomMicの [Num Channels] が最大値
どのようなデバイスに接続しても対応できるように、CriLipsAnalyzerのチャンネル数を最大に設定しています。
これに合わせてCriLipsSamplerForAtomMicのチャンネル数も最大にしていますが、実際のチャンネル数はデバイスと接続する際に指定します。
この他に、CanvasゲームオブジェクトにサンプルスクリプトコンポーネントであるSampleDeviceSelectがアタッチされています。
以下のプログラムの解説はこちらのスクリプトと合わせて確認してください。

プログラムの解説

リップシンク解析の入力に用いるデバイスを選択したい場合、 CriLipsSamplerForAtomMic を利用するのに変わりはありませんが、スクリプトから設定を行う必要があります。
また、デバイスの列挙や接続するデバイスの指定には、CRIWAREプラグインのCriAtomExMicクラスを利用します。

マイクデバイスの列挙

以下のように、CriAtomExMic.DeviceInfoのリストを取得します。
DeviceInfoにはデバイス名の他、サポートするチャンネル数/サンプリングレートなどの情報が含まれています。
CriAtomExMic.DeviceInfo[] deviceInfos = CriAtomExMic.GetDevices();

デバイスを指定してマイクとの接続を開始

取得したデバイス情報リストからひとつを選択し、 接続用コンフィグ を作成してCriLipsSamplerForAtomMicに渡します。
このとき、接続するチャンネル数やサンプリングレートはCriAtomExMic.DeviceInfoに記述された最大値以下となるように設定します。
var deviceInfo = deviceInfos[0];
var config = new CriLipsSamplerForAtomMic.MicrophoneConfig();
config.deviceName = deviceInfo.deviceName;
config.numChannels = deviceInfo.maxChannels;
config.samplingRate = deviceInfo.maxSamplingRate;
bool result = atomMicSampler.ConnectMicrophone(config);
ConnectMicrophone の返り値がtrueなら、接続成功です。
falseが返った場合はコンフィグでのデバイス情報指定が正しくない可能性を疑いましょう。

モデルに反映するチャンネルの指定

CriLipsSamplerForAtomMicは指定されたチャンネル数の入力を扱い、CriLipsAnalyzerはその全てのチャンネルに対して解析を行っています。
どのチャンネルの解析結果をモデルへの動作に反映するかは、CriLipsDeformerForAnalyzerに対して指定します。
// [SerializeField]
// CriLipsDeformerForAnalyzer deformer = null;
deformer.SetChannel(0);