我的目的只是获取语音输入电平
我搜索并找到了这段代码 - 但无论我的语音输入级别如何,它总是返回 0 - 我一直在喊,但总是返回 0
这是代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mic : MonoBehaviour {
public float sens = 100;
public float loud = 0;
AudioSource audio;
void Start()
{
audio = GetComponent<AudioSource> ();
audio.clip = Microphone.Start (null, true, 10, 44100);
audio.loop = true;
audio.mute = true;
while (!(Microphone.GetPosition (null) > 0)) {}
audio.Play ();
}
void Update()
{
loud = GetAvgVol () * sens;
Debug.Log (loud); //always debug 0
}
float GetAvgVol()
{
float [] data = new float[256];
float a = 0;
audio.GetOutputData (data, 0);
foreach(float s in data)
{
a += Mathf.Abs (s);
}
return a / 256;
}
}
如何在 unity 中实现我的目的?
假设 Unity 在编辑器中没有抛出任何错误,这些是 AudioSource.GetOutputData
可能返回 0 的原因:
1。AudioSource
音量设置为 0
。
例如,AudioSourceInstance.volume = 0
。
2。AudioSource
静音设置为 true
。
例如,AudioSourceInstance.mute = true;
3.AudioSource没有播放音频
例如AudioSourceInstance.Play()
没有被调用,AudioSourceInstance.Pause()
被调用或者AudioSourceInstance.Stop()
有在那个 AudioSource
上被调用。
4.音频文件或麦克风静音。
在您的情况下,原因是#2。
如果您只想从麦克风中捕获数据而不是现场回放,请参阅 this回答提到了两种方法
此外,我建议您在 GetAvgVol
函数中将 return a/256;
替换为 return a/256f;
。
我是一名优秀的程序员,十分优秀!