理由はわかりません。floatval= 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);
}
}
マイクから入力のピッチを抽出できるはずです。
問題はこれです:
for (int i = 0; i <= spectrum.Length; i++)
// ----------------^
次の256
ようにアクセスできるfloatの配列を定義しています。
spectrum[0]
spectrum[1]
spectrum[255]
あなたのループがどうかを確認するためにテストされたようi
未満かであるに等しい spectrum.Length
私たちが知っているおり、256
これは、ある要素にアクセスしようとする効果を持っているspectrum[256]
範囲外です。
ループ内の比較を以下に変更します。
for (int i = 0; i < spectrum.Length; i++)
そしてこれはあなたの問題を解決します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加