すごい雑ですが、UnityとVOICEROID+でMMDモデルの口パクをするサンプルです。
口パクの元音はNETDUETTOを使ってます。(最初にログ見て手書きで選びます。)
定数は私の環境下での調整値です。
using UnityEngine;
public class Mouth : MonoBehaviour
{
void Start()
{
foreach (string device in Microphone.devices)
{
Debug.Log("Microphone.devices = " + device);
}
AudioSource audio = GetComponent<AudioSource>();
audio.clip = Microphone.Start(Microphone.devices[1], true, 10, 44100);
}
void Update()
{
AudioSource audio = GetComponent<AudioSource>();
float[] samples = new float[audio.clip.samples * audio.clip.channels];
audio.clip.GetData(samples, 0);
float vol = 0;
for(int i = 0; i < samples.Length; i++)
{
vol += Mathf.Abs(samples[i]);
samples[i] = samples[i] * 0.5F;
}
audio.clip.SetData(samples, 0);
MMD4MecanimModel model = GetComponent<MMD4MecanimModel>();
MMD4MecanimModelImpl.Morph morph = model.GetMorph("\u3042");
morph.weight = Mathf.Min(1, vol / 50);
print("vol = " + vol / 50);
}
}
Microphone.devicesは日本語が読めないみたいなので、録音デバイスの名前から日本語を消してます。(私は空にした。)
これをしないと挙動がおかしかったり色々あるのでハマる可能性高いかもしれません。あと、要再起動です。
※不確かな話なのでご注意ください。
参考
http://www.jonki.net/entry/20130607/1370622815
http://tips.hecomi.com/entry/2014/11/11/021147
※もっと他にも色々見て回った気がするんですが、ごちゃごちゃで思い出せません……。みなさんありがとう。