【问题标题】:IndexOutOfRangeException while running FFTPitchDetector运行 FFTPitchDetector 时出现 IndexOutOfRangeException
【发布时间】:2013-02-21 16:39:15
【问题描述】:

我在实施FFTPitchDetector 时遇到了一些问题。我真正想做的是从吉他输入中获取实时频率,我不太确定如何使用FftPitchDetector.cs 中的功能。有什么想法吗?

private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{    
   if (waveWriter == null) return;

    byte[] buffer = e.Buffer;
    float[] floats = new float[buffer.Length];
    float sample32 = 0;
    int bytesRecorded = e.BytesRecorded;

    waveWriter.Write(buffer, 0, bytesRecorded);

    for (int index = 0; index < e.BytesRecorded; index += 2)
    {
        short sample = (short)((buffer[index + 1] << 8) |
                                buffer[index + 0]);
        sample32 = sample / 32768f;
        sampleAggregator.Add(sample32);
    }

    floats = bytesToFloats(buffer);

    FftPitchDetector PitchDetect = new FftPitchDetector(sample32);
    PitchDetect.DetectPitch(floats, bytesRecorded);

    Console.WriteLine("{0}",sample32);
}

private static float[] bytesToFloats(byte[] bytes)
{
    float[] floats = new float[bytes.Length / 2];

    for (int i = 0; i < bytes.Length; i += 2)
    {
        floats[i / 2] = bytes[i] | (bytes[i + 1] << 8);
    }

    return floats;
}

当我执行代码时,有一个错误IndexOutOfRangeException was unhandled 指向该行

fftBuffer[n * 2] = buffer[n-inFrames] * window(n, frames);

fftPitchDetector.cs。我的代码有什么问题?

C# Guitar Tuner 有开源代码吗?我希望将其外包到我的项目中。

【问题讨论】:

    标签: c# fft naudio


    【解决方案1】:

    问题是在fftBuffer[]buffer[] 中,您试图访问数组中不存在的索引。

    因此,如果 fftBuffer[] 有 4 个项目,而 n * 2 总共有 6 个项目,那么您正在尝试访问不存在的 fftBuffer[6]

    所以基本上你需要在尝试访问它们的值之前检查每个数组中有多少项。

    您需要在代码中放置检查,例如:

    if ((n * 2) < fftBuffer.length && (n - inFrames) < buffer.length) {
        fftBuffer[n * 2] = buffer[n-inFrames] * window(n, frames);
    }
    

    您首先确保您将要用于每个数组的索引不大于数组的项目数。

    【讨论】:

    • 从上面的代码你能找出问题所在吗?我找不到哪一个是问题:(
    猜你喜欢
    • 2013-02-07
    • 2013-02-16
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多