凹みさんのNewリップシンク「uLipSync」を触ってみる!
VRMでやるぞ
LipSyncの種類
今まではOVRLipSyncが主流?だった
ただiOSでストアに出せないという問題があった。(今どうかは知らない)
OVRLipSync以外だとSALSAという有料アセットがある。使ってないけど、これはOVRと違って音量から口パクをしているらしい(ソースは忘れた)
マイク音量から単純に口パクさせるならアセット使わなくてもできる
環境準備
Unity2019.4
こちらからUnityPackageをダウンロード
いれる
Burst、Mathmaticsというパッケージを検索して入れる
VRMも入れる
uLipSyncセットアップ
uLipSyncBlendShape
VRMにuLipSyncBlendShapeをつける
FindFromChildrenにチェックを入れるとSkinnedMeshRendererを持つものを探してくれるので、Faceを選んで、AIUEOにそれぞれの口の形をセットする。
(最初blendshapeがドロップダウンに出てこなかったけど、FaceをBodyとかに変えたあと戻ったら出てきた)
ULipSync+AudioSource
適当なオブジェクトにAudioSourceとULipSyncをつける
そしてCallBackにVRMモデルを付けてOnLipSyncUpdateを選ぶ
マイク
マイクからリアルタイムに口パクさせるにはAudioSourceと同じ場所に、uLipSyncMicrophoneをつける。
実行中にデバイスを変えたり、マイク入力をストップさせたり、リピートさせたりいろいろできる(ありがたい)
マイクを使わないならAudioSourceに音声を入れたらいい
これで口パクする!
調整
デフォルトの設定だと、何もしゃべっていないのに雑音でパクパクしてた。
パラメーターのMiniVolumeの値を少し上げたら無音のときの口パクなくなった。
あとOutputを0にしたら、マイクの自分の声がOutputされなくなる!
Visualizer
どの母音判定かをリアルタイムで示してくれる!
iOSビルド
iOSで動くかが大事!
ビルドついでにMacで動くことは確認した。
AirPodsで動いたけど、MacだとMinVolumeは0にしないとダメだった
あとパーミッションを出す必要がありそう。わからないけど
それでも反応しない
検索したらいくつか設定が必要そう
下記の修正で、凹み先生のuLipSyncがiPhoneでも動く事を確認しました。
— あるしおうね (@AmadeusSVX) 2021年1月18日
- Burst周りのオプションを全て無効にする
- iPhoneのマイクデバイスはmaxFreqに0を返す(任意の周波数に対応する場合は0になるらしい)ので、そのままMicrophone.Startするとエラーになる。適当に96000などの値を入れる pic.twitter.com/0qIfycTOrl
Burstエラーでビルドできないとあったけど、私の環境ではそれはなかった。これはM1の問題なのかな?
ううむ、M1 MacでiOS向けビルドを試しましたが、BurstコンパイラがSDKを見つけられない、というエラーで上手くビルド出来ないですね…。uLipSyncでなく、純粋にBurst側の問題と思うのですが(uLipSyncを入れてなくてもこうなる)。SDKの場所を指定する設定項目は無かったような… pic.twitter.com/Iiny8OatzA
— あるしおうね (@AmadeusSVX) 2021年1月17日
maxFreqは周波数
uLipSyncMicrophone.csのここのことだと思う。
ここを96000にしてビルドしたら動くけど、無音の時もずっとぱくぱくするようになった><
(minVolumeパラメーターの調整をiOSでもできるようにしたほうがいいかな)
とりあえずminVolumeを0.01とかにして再ビルドしたら動いた!
「アイウエオ」って言ってます
ulipsync、iPhoneで動いた pic.twitter.com/yJIhIL4QbF
— トマシープ (@tomasheep) 2021年1月25日
ただ、口の形が一定。「あ」の形だけ?
後ちょっと遅れてる感じがするかも
最後に
良さそう〜〜
凹みさんも認識しているみたいだし、次のアップデートを待っていいかも!
引き続きご検証ありがとうございます!Burst 効いてないかもですが、思ってたよりは速いですね…。Microphone 周りの知見ありがとうございます。アップデートで修正するようにします。
— 凹 (@hecomi) 2021年1月18日
他にも精度改善するらしいし
フォルマントを求めるのをやめて事前に録音した包絡線同士の比較にしたらとても精度が上がったのでまずはこれベースで修正しよう...。終わったら LPC で求めてる包絡線の比較を MFCC の比較に変えてみます。
— 凹 (@hecomi) 2021年1月12日