我目前正在从事我的第四年项目(计算机科学),其中涉及音乐 -> 乐谱的自动转录。我目前正在 Matlab 中进行,但在某个阶段必须转换为 java。
我的问题:
我的程序返回纯正弦音的正确音符,现在在从自然乐器演奏的音符中检索基频时遇到了问题。对于某些音符,代表音符基音的峰值似乎完全缺失。例如,当我从车库乐队演奏 G3 音符时,它显示为 G4,因为我的图中仅出现第 1、第 3、第 5 和第 7 和声。我尝试添加图像,但由于这是我的第一篇文章,所以不允许我添加。任何正确方向的指示将不胜感激。
这并不罕见。对于男声、大型弦乐器和许多其他音调声源来说,基音缺失或几乎缺失是很常见的。
与正弦波函数发生器相比,这使得仅使用 FFT 峰值结果在确定实际乐器的音符方面效果极差。这是因为音调与峰值频谱频率不同。音高是一种心理声学感知现象。这就是您需要阅读的内容。关于这个主题有大量的研究论文。
所以你需要看看一套完全不同的算法。尝试倒谱(倒谱分析)、谐波乘积谱、自相关和类似的(AMDF、ASDF 等滞后)、RAPT(稳健的音调跟踪算法)、YAAPT 等。
补充:我写了更详细的博客文章中对缺少基础知识的音高的解释.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)