【发布时间】:2012-07-09 01:10:13
【问题描述】:
我正在编写一个程序来帮助人们学习吉他。为此,我需要能够查看时间样本并查看他们演奏的音符。我查看了 FFTW,但我不明白如何让它工作。我也试图弄清楚 Goertzel 算法,但它似乎只适用于像拨号音这样的单频音符(虽然不确定)。需要明确的是,我确实需要能够检测多个音符(以查看是否演奏了一个和弦),但如果其中也有一些泛音也没关系。
我正在用 C++ 编写代码,并且更喜欢跨平台的解决方案。
更新:我意识到检测特定音符并不重要;我真正需要的是检查某些频率是否存在,而其他频率不存在。例如,如果有人弹奏 C,我想检查是否存在 C 频率(大约 262 Hz),以及可能是 524 Hz 和 786 Hz,并检查附近的音符是否不是泛音系列中的近音(如 B 和 D)不存在。
【问题讨论】:
-
这是一个巨大的要求。你能把它缩小到你需要的一小部分吗?
-
当然。基本上,我需要能够判断样本中是否存在特定频率,并检查其他频率是否存在(或至少数量相对较低)。
-
我和你一样在做某事。我从转录(教计算机“听”)开始,然后是老师……我使用现有的 VAMP 插件来进行频率工作。欢迎联系/加入!!!
-
恕我直言您的更新:检查注释很重要。在最终程序中,很可能要播放的音乐以音符形式呈现(例如 musicxml)。您不想将音符与频率进行比较。无论如何计算很容易:freq = 440 * 2 ^ i/12