Tag: 音频处理

来自.wav文件的峰值频率

我有一个.wav文件,当我弹吉他音符时由我录制。 然后我使用下面的程序来读取我的.wav文件数据。 我使用了Naudio库。 AudioFileReader readertest = new AudioFileReader(@”E:\song\music.wav”); int bytesnumber = (int)readertest.Length; var buffer = new float[bytesnumber]; readertest.Read(buffer, 0, bytesnumber); for (int i = 0; i < buffer.Length; i++) { Console.Write(buffer[i] + "\n"); } 它输出如下。(输出的一部分)。 0.00567627 0.007659912 0.005187988 0.005706787 0.005218506 0.003051758 0.004669189 0.0007324219 0.004180908 -0.001586914 0.00402832 -0.003479004 0.003143311 -0.004577637 0.001037598 -0.005432129 -0.001800537 -0.005157471 我对这个输出数据包含的内容感到困惑。 我想拍摄音符的峰值频率。 […]

如何使用谐波产品频谱获得基频?

我正试图从麦克风输入中获得音高。 首先,我通过FFT将信号从时域分解到频域。 在执行FFT之前,我已将Hamming窗口应用于信号。 然后我得到了FFT的复杂结果。 然后我将结果传递给谐波产品光谱,其中结果被下采样,然后乘以下采样峰值,并给出一个复数值。 那我该怎么做才能获得基频? public float[] HarmonicProductSpectrum(Complex[] data) { Complex[] hps2 = Downsample(data, 2); Complex[] hps3 = Downsample(data, 3); Complex[] hps4 = Downsample(data, 4); Complex[] hps5 = Downsample(data, 5); float[] array = new float[hps5.Length]; for (int i = 0; i < array.Length; i++) { checked { array[i] = data[i].X * hps2[i].X * hps3[i].X […]