Я создаю игру, в которой игрок перемещается на определенное расстояние по сравнению с объемом игроков.Например.Если игрок шепчет в реальной жизни, персонаж в игре немного двигается, и если игрок кричит, персонаж будет много двигаться.У меня работает код, но он дает много противоречивых результатов.
Иногда шепот явно громче, чем крик, и наоборот.Я использовал этот код, который я нашел в Интернете, но я не понимаю математику, которая в нем.Кто-нибудь может мне помочь?
private void Awake()
{
//init microphone input
if (Microphone.devices.Length > 0)
{
microphoneInput = Microphone.Start(Microphone.devices[0], true, 999, 44100);
microphoneInitialized = true;
}
else
{
print("There is no mic availiable");
}
}
private void Update()
{
if (microphoneInitialized == true)
{
// get mic volume
int dec = 128;
float[] waveData = new float[dec];
int micPosition = Microphone.GetPosition(null) - (dec + 1); // null means the first microphone
microphoneInput.GetData(waveData, micPosition);
//Getting a peak on the last 128 samples
float levelMax = 0;
for (int i = 0; i < dec; i++)
{
float wavePeak = waveData[i] * waveData[i];
if (levelMax < wavePeak)
{
levelMax = wavePeak;
}
}
float db = Mathf.Abs(levelMax) ;
micInputVolume = db;// Mathf.Sqrt(Mathf.Sqrt(levelMax) * 100);
}
//print("Mic volume = " + micInputVolume);
}