我正在尝试编写一个语音/口哨驱动的合成器,但我正在努力进行音高检测。作为一个前提,我必须说我在 dsp 编码方面非常熟练和经验丰富,而且我已经阅读了我在文献中可以找到的关于这个非常棘手的主题的几乎所有内容,并且我知道不存在单一的强大解决方案。基于谐波序列或 HPS 及其变化的分析,我尝试并发明了频域中的所有可能和奇特的方法,但我仍然受到倍频程误差的困扰,加上缺乏一个可靠的标准来区分音高和非音高帧(即包含噪音)。最后,我决定放弃频谱方法并使用时域自相关(通过 FFT、平方幅度加 IFFT),即使仍然不是 100% 容易出错,这也是所有方法中最可靠的方法。但又一次,
我发现了一个名为 Autotalent 的插件的源代码,我认为它很有趣,那里的作者依赖于一个“置信度”值,该值是通过将自相关中最高峰的高度乘以用于窗口的自相关的相应位置的值而获得的窗口处理的帧,但我真的无法理解其背后的逻辑。我出于好奇尝试使用相同的技巧,但我得到的是一个似乎与框架倾斜或不倾斜的事实完全无关的值。
请问我应该从哪里开始寻找一个不太复杂的解决方案(一切都是为了实时操作)。有什么提示吗?您是否知道任何可靠的方法来区分音调和非音调帧(在时域或频域中)?谢谢