環境
・Unity5.3.4p1
・CRI Atom Craft 2.17.03
・CRIWARE Unity Plug-in for Smartphone 2.77
・Live2D Cubism SDK2 Unity 2.0
前置き
・Live2Dをボイスに合わせてリップシンクしたいと思った。
・Live2Dさん側で、事前にリップシンク用のモーションを出力するツールがある。
けど、全ボイスに対してそんなんできない……
・Unityのオーディオ機能の波形の振幅使えばできそう……!
・でもCRIでは……
CRIで音の大きさ(振幅)を取得
CRI Atom Craftのバスセンドを利用すればできそう
CRI Atom Craft側
Unity側(バス情報の取得)
①CriAtom(スクリプト)コンポーネントのDSPBusSettingで、CRI Atom Craftで設定したバス設定名をInspector上で設定する
②スクリプトで
SoundManager.cs
public const string DspBusSettingName = "DspBusSetting_0";
public const int SendBusVoiceIndex = 3; //★3=バスのIndex(例だとBUS_Voice)
public void Start()
{
//バス解析器の設定
CriAtomEx.AttachDspBusSetting(DspBusSettingName);
CriAtom.SetBusAnalyzer(true);
}
public float GetVoicePeakLevel()
{
return CriAtom.GetBusAnalyzerInfo(SendBusVoiceIndex).peakLevels[0];
}
Live2Dのお口の制御
Live2Dのサンプル「SampleApp1」がベース。
L2DBaseModel.setLipSyncValueを用いることで、リップシンク制御が可能。
抜粋コード
//★それぞれLAppModelの基底クラス「L2DBaseModel」のメソッド
live2dModel.setLipSync(true);
live2dModel.setLipSyncValue(SoundManager.GetInstance().GetVoicePeakLevel()); //★_live2dModelはL2DBaseModelのサブクラスのオブジェクト