[英]IndexOutOfRangeException - Audio Spectrum Question
我不知道为什么:float val = spectrum [i]; 正在产生数组的索引超出范围。 请帮忙...! 我是这个游戏的完全初学者。
public class InputScript : MonoBehaviour{
void Start()
{
float[] spectrum = new float[256];
AudioSource aud = GetComponent<AudioSource>();
aud.clip = Microphone.Start(null, true, 10, 44100);
aud.Play();
float maxIndex = 0;
float maxValue = 0.0f;
for (int i = 0; i <= spectrum.Length; i++)
{
float val = spectrum[i];
if (val > maxValue)
{
maxValue = val;
maxIndex = i;
}
}
var freq = maxIndex * AudioSettings.outputSampleRate / 2 / spectrum.Length;
}
void Update()
{
float[] spectrum = new float[256];
AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular);
}
}
我应该能够从麦克风中提取输入的音高。
在.net数组中有索引从0到spectrum.Length
exclusive:
for (int i = 0; i < spectrum.Length; i++)
问题是这样的:
for (int i = 0; i <= spectrum.Length; i++)
// ----------------^
您正在定义一个包含256
浮点数的数组,可以像这样访问:
spectrum[0]
spectrum[1]
spectrum[255]
当你的循环正在测试i
是否小于或等于 spectrum.Length
,我们知道它是256
,这会导致尝试访问spectrum[256]
的元素,这超出了范围。
将循环中的比较更改为小于:
for (int i = 0; i < spectrum.Length; i++)
这将解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.