嗨,我对这件事很陌生,所以请多多包涵。我正在尝试将 WAV 文件转换为频谱图,但不确定如何开始。我阅读了一些内容,上面写着要读取 PCM 数据(我认为这是我的 WAV 文件)并将其存储在 WavReader 类中的数组中,然后再对其应用 FFT 并将其转换为 GUI。我目前使用 Naudio 来实现这一点,但找不到任何显示如何将 WAV 文件转换为频谱图的内容。谢谢
编辑: 我发现了关于使用 Nadio 将 PCM 转换为 FFT 并且我卡住了。
using (var reader = new AudioFileReader("test1.wav"))
{
// test1.wav is my file to process
// test0.wav is my temp file
IWaveProvider stream16 = new WaveFloatTo16Provider(reader);
using (WaveFileWriter converted = new WaveFileWriter("test0.wav", stream16.WaveFormat))
{
// buffer length needs to be a power of 2 for FFT to work nicely
// however, make the buffer too long and pitches aren't detected fast enough
// successful buffer sizes: 8192, 4096, 2048, 1024
// (some pitch detection algorithms need at least 2048)
byte[] buffer = new byte[8192];
int bytesRead;
do
{
bytesRead = stream16.Read(buffer, 0, buffer.Length);
converted.WriteData(buffer, 0, bytesRead);
} while (bytesRead != 0 && converted.Length < reader.Length);
}
}
编辑:我还想知道是否可以以编程方式比较 2 个不同文件的 2 个频谱图。