音调检测结果错误

Pitch detection results wrong

我正在使用 here (I haven't changed the code). My input is an audio filefreq_from_crossings 和原声吉他 E2 音符,没有别的(因为我的麦克风很糟糕,声音不是很清晰)。

这是波形:

这是我得到的频谱图:

从频谱图中可以很清楚地看出,最响亮的泛音对应于 E2 音符。但是,freq_from_crossings returns 415.461966359 根本就没有上场。哪些组件可能出了问题?

谢谢

不是单个纯正弦波的波形在每个音调周期中的零交叉可能多于一次。在一个周期内,它可以包含许多过零的 "wiggles"。吉他音符频谱图的谐波含量表明总波形远非单一的纯正弦波。它也在随着时间而改变。

因此,从零交叉点估计音高频率不适用于这些类型的吉他声音。

根据我的经验,过零和自相关是尝试音高检测的糟糕方法——即使是在单声道信号上也是如此。考虑使用采用 FFT 或 DFT 变换的方法来获取初始频率 activity。

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

https://github.com/CreativeDetectors/PitchScope_Player