我正在开发一个系统来帮助音乐家进行转录。目的是在单个乐器单声道录音中执行自动音乐转录(它不一定是完美的,因为用户将在以后纠正错误/错误)。这里有没有人有自动音乐转录的经验?或一般的数字信号处理?无论您的背景如何,都非常感谢任何人的帮助。
到目前为止,我已经研究了使用快速傅立叶变换进行音调检测,并且MATLAB和我自己的Java测试程序中的大量测试表明它足够快速和准确以满足我的需求。需要解决的任务的另一个要素是以乐谱形式显示制作的MIDI数据,但这是我现在不关心的事情。
简而言之,我正在寻找的是一种用于音符开始检测的好方法,即信号中新音符开始的位置。由于慢速开启可能很难正确检测,我最初将使用带有钢琴录音的系统。这也部分归因于我弹钢琴的事实,应该处于更好的位置以获得合适的录音进行测试。如上所述,该系统的早期版本将用于简单的单声道录音,根据未来几周的进展,可能会在稍后进行更复杂的输入。
答案 0 :(得分:50)
答案 1 :(得分:4)
您想要做的通常被称为 WAV-to-MIDI (谷歌“wav-to-midi”)。在这个过程中有许多尝试,结果各不相同(注意开始是困难之一;复调很难处理)。我建议从彻底搜索现成的解决方案开始,只有在没有任何可接受的情况下才能自己开始工作。
你需要的过程的另一部分是将MIDI输出呈现为传统乐谱,但是有超过十亿的产品可以做到这一点。
另一个答案是:是的,我已经做了很多数字信号处理(参见我网站上的软件 - 这是一个用VB和C编写的无限语音软件合成器),我很感兴趣帮助你这个问题。 WAV-to-MIDI部分在概念上并不是那么困难,它只是让它在实践中可靠地运行起来很难。注意开始只是设置一个阈值 - 可以很容易地向前或向后调整错误,以补偿音符攻击差异。对于录音而言,音高检测比实时更容易进行,并且仅涉及实现自动关联例程。
答案 2 :(得分:4)
你应该看看MIRToolbox - 它是为Matlab编写的,并且内置了一个起始探测器 - 它工作得非常好。源代码是GPL,因此您可以使用适合您的任何语言实现该算法。您的生产代码将使用哪种语言?
答案 3 :(得分:3)
这个库以音频标签为中心:
aubio是一个音频标签库。它的功能包括在每次攻击之前分割声音文件,执行音调检测,敲击节拍以及从现场音频产生midi流。 aubio这个名字来自'音频',有一个拼写错误:结果中也可能发现几个转录错误。
我对它的开始检测和音高检测有好运。它在c中,但有swig / python包装器。
另外,图书馆的作者在页面上有他的论文的pdf,其中有关于标签的很好的信息和背景。
答案 4 :(得分:3)
通过使用平均能量测量,可以在时域中轻松检测到硬启动。
SUM从0到N(X ^ 2)
使用整个信号块进行此操作。你应该在发生开始时看到峰值(窗口大小取决于你,我的建议是50ms或更长)。
关于发起检测的大量论文:
对于铁杆工程师:
http://www.nyu.edu/classes/bello/MIR_files/2005_BelloEtAl_IEEE_TSALP.pdf
普通人更容易理解:
http://bingweb.binghamton.edu/~ahess2/Onset_Detection_Nov302011.pdf
答案 5 :(得分:-1)
您可以尝试将wav信号转换为幅度与时间的关系图。然后确定一致起始的方法是计算信号上升沿的拐点中的切线与x轴的交点。