LoginSignup
3

More than 5 years have passed since last update.

Live2Dキャラにボイスに合わせて口パクさせたい(CRIでの実装メモ)

Posted at

環境

・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側

①バスの追加
 SS_Cri1.PNG

②バスセンド設定(キューに対して)
 SS_Cri2.PNG

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のサブクラスのオブジェクト

参考

Unity のオーディオの再生・エフェクト・解析周りについてまとめてみた
サウンド助け合い所 @ ウィキ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3