0

我致力于将音符与数字音频进行比较的应用程序。我的第一个想法是使用一些复音音高算法分析 wav 文件(或实时声音),并从该文件中获取音符和和弦,然后与数据集中的音符进行比较。我浏览了很多页面,这似乎是一项艰巨的工作,因为现有的实现和算法主要/仅关注单声道声音。

现在,我想到了以相反的方式来做这件事。在数据集中,我有例如注释:A4 或更好的示例和弦:A4 B4 H4。我的想法是从这个音符或和弦中产生一些波浪(或任何我不知道的东西),然后与一段数字音频进行比较。

这是个好主意吗?它是更好/更难的解决方案吗?如果是的话,你能推荐我怎么做吗?

4

2 回答 2

1

最简单的解决方案是对波形进行 FFT(快速傅立叶变换):所有音符(及其谐波)都将出现在信号中。然后你寻找与音符对应的频率,这就是你的解决方案。

注意 - 为了获得不错的频率分辨率,您需要足够长的样本和足够高的采样率。但是试试看,你会看到的。

这是我坐在钢琴前拍摄的名为 SpectraWave 的应用程序的几个屏幕截图。第一个是中间 A(如您所知,f = 440 Hz):

在此处输入图像描述

第二个是 A 小和弦(如您所见,我的中指稍强一些,C 显示为音量最大的音符)。谐波很快就会让人很难看到不仅仅是几个音符……</p>

在此处输入图像描述

于 2013-11-03T15:18:37.167 回答
0

您的“解决方案”很可能使匹配更加困难,因为您不知道为每个音符制作什么波形。大多数乐器和声音不仅产生与单个正弦波或任何其他熟悉的波形显着不同的波形,而且这些波形随着时间的推移而演变。因此,猜测匹配的每个音符使用的正确波形是极不可能的。

于 2013-11-03T21:51:54.173 回答