在C#中实现FftPitchDetector

本文关键字:FftPitchDetector 实现 | 更新日期: 2023-09-27 18:00:30

我已经在我的项目中添加了FftPitchDetector.cs,但我不知道如何使用它。

我的代码:

private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
        {
            if (waveWriter == null) return;
            byte[] buffer = e.Buffer;
            float sample32 = 0;
            int bytesRecorded = e.BytesRecorded;
            float[] floats = new float[buffer.Length];

            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(XXXXXX, XXXXXXXXXXX);**
           }
        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;
        }

我应该在PitchDetect.DetectPitch(XXXXXXXXXX,XXXXXXXXXX)中放入哪些参数??

如何使用FftPitchDetector.cs获取输入频率?

谢谢!

在C#中实现FftPitchDetector

我已经写了一篇附带的文章,解释了这些代码是如何工作的,可以在这里访问。基本上,您传入的是一个样本数组,以及一个指示该数组中有多少样本的数字(以防与数组的长度不同)。它返回以Hz为单位的频率。然而,请记住,这个代码只是试图选择一个音符,这样它就可以计算出自动调谐效果的音高偏移量,所以它只是在寻找特定范围内的值,实际上可能不会返回传入信号中最响亮的频率。

相关文章:
  • 没有找到相关文章