我正在 Python 上启动一个项目,我需要开发一个音高检测系统,基本上我要做的就是录制来自吉他弦的声音,然后识别哪个是那个声音的音调。
我已经阅读并搜索了网站(包括 stackoverflow),因此我可以理解重要事物的主要思想,例如:FFT、时域、频域、谐波、音高检测算法、八度误差等。
经过研究,我发现我可以使用 HPS(谐波乘积谱)算法,并且该算法属于频域方法,这意味着我必须(在一般步骤中):
- 录制吉他的声音(避免外部噪音)。
- 使用 FFT 函数,这样我就可以将该音频从时域转换为频域(这就是 FFT 所做的)。
- 在我得到那个数据(一个数组)之后,我必须使用 HPS,这样我才能找到最高音调,这将是音调字符串的声音。
我的问题从最后一步开始,我已经阅读了 HPS 的 ecuation 和一些关于它的讲座,但我仍然无法理解它并开发自己的功能。
我是否遗漏了一些我不理解的东西或某些东西,而我认为我知道了?我只是找不到编写自己的 HPS 算法的方法。