繁体   English   中英

IndexOutOfRangeException - 音频频谱问题

[英]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]
  • 第256个元素: spectrum[255]

当你的循环正在测试i是否小于或等于 spectrum.Length ,我们知道它是256 ,这会导致尝试访问spectrum[256]的元素,这超出了范围。

将循环中的比较更改为小于:

for (int i = 0; i < spectrum.Length; i++)

这将解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM