我致力于将音符与数字音频进行比较的应用程序。我的第一个想法是使用一些复音音高算法分析wav文件(或实时声音)并从该文件中获取音符和和弦,然后与数据集中的音符进行比较。我经历了很多页面,这似乎是一项艰苦的工作,因为现有的实现和算法主要是/只专注于单声道声音。
现在,我有了以相反的方式做到这一点的想法。在数据集中我有例如注释:A4或更好的示例和弦:A4 B4 H4。我的想法是用这个音符或和弦制作一些波形(或者我不知道的是什么),然后将它与数字音频进行比较。
这是个好主意吗?这是更好/更难的解决方案吗? 如果是,你能推荐我怎么做吗?
答案 0 :(得分:1)
最简单的解决方案是采用波形的FFT(快速傅里叶变换):所有音符(及其谐波)都将出现在信号中。然后,您可以查找与音符对应的频率,这是您的解决方案。
注意 - 为了获得合适的频率分辨率,您需要足够长的样本和足够高的采样率。但试试吧,你会看到。
以下是我坐在钢琴前面的一款名为SpectraWave的应用程序的屏幕截图。第一个是中间的A(你知道f = 440赫兹):
,第二个是A-minor和弦(你可以看到,我的中指有点强,而C则显示为音量最大的音符)。谐波很快就会让人难以看到更多的音符......
答案 1 :(得分:0)
你的“解决方案”最有可能使匹配变得更加困难,因为你不知道每个音符要做什么波形。大多数乐器和声音不仅产生与单个正弦波或任何其他熟悉波形明显不同的波形,而且这些波形随时间演变。因此猜测正确 用于匹配的每个音符的波形极不可能。