我工作的应用程序,将比较音符与数字音频。我的第一个想法是用一些复调算法分析wav文件(或实时声音),从这个文件中提取音符和和弦,然后与数据集中的音符进行比较。我浏览了很多页面,这似乎是一项艰巨的工作,因为现有的实现和算法主要/仅专注于单声道声音。
现在,我想到了用相反的方式来做这件事。在数据集中,我有例如注释: A4或更好的示例chord: A4,B4,H4。我的想法是从这个音符或和弦中产生一些波(或者其他我不知道的东西),然后与一段数字音频进行比较。
这是个好主意吗?它是更好/更难的解决方案吗?如果是,你能推荐我怎么做吗?
发布于 2013-11-03 23:18:37
最简单的解决方案是对波形进行FFT (快速傅立叶变换):所有的音符(及其谐波)都会出现在信号中。然后你寻找与音符相对应的频率,这就是你的解决方案。
注意-为了获得良好的频率分辨率,您需要足够长的采样和足够高的采样率。但是试一试,你就会明白了。
这是我坐在钢琴前拍摄的一款名为SpectraWave的应用程序的几个屏幕截图。第一个是中A(如你所知,f= 440 Hz ):

第二个是A小调和弦(如你所见,我的中指稍强一些,C音符显示为音量最大的音符)。谐波很快就会使人很难看到更多的东西,而不仅仅是几个音符…

发布于 2013-11-04 05:51:54
你的“解决方案”很可能会使匹配变得更加困难,因为你不知道为每个音符制作什么波形。大多数乐器和声音不仅产生与单个正弦波或任何其他熟悉的波形显著不同的波形,而且这些波形还会随着时间的推移而演变。因此,猜测用于匹配的每个音符的适当波形是非常不可能的。
https://stackoverflow.com/questions/19754469
复制相似问题