我是这个领域的新手 - 但我需要在java中执行WAV-to-MIDI转换。 有没有办法知道WAV-to-MIDI转换涉及的步骤究竟是什么? 我有一个非常粗略的想法,因为你需要; 对wav文件进行采样,对其进行滤波,使用FFT进行频谱分析,进行特征提取,然后将提取的特征写入MIDI。 但我找不到如何做到这一切的可靠来源或论文? 有人可以给我提供线索,如何以及从何处开始? 是否有任何开源API可用于此WAV-to-MIDI转换过程?
提前谢谢
答案 0 :(得分:26)
这是一个比你想象的更复杂的过程。
这个研究问题通常被称为音乐转录:将音乐的低级表现形式(例如波形)转换为更高级别的表现形式,如MIDI甚至乐谱
您的解决方案的复杂程度取决于输入数据的复杂程度。大量研究论文仅针对单声道钢琴或鼓声进行音乐转录...因为它们易于转录。 (相对而言)小提琴更难。声音更难。小提琴加声音加钢琴要困难得多。交响乐几乎是不可能的。你得到了照片。
音乐转录的基本要素涉及以下任何重叠区域:
在Google学术搜索或ISMIR会议中搜索有关“音乐转录”的论文:http://www.ismir.net。如果您对上述某个子主题更感兴趣,我可以进一步指出。祝你好运。
编辑:话虽如此,我们都可以在网上找到现有的解决方案。随意试试吧。但正如你所做的那样,用批判的眼睛和耳朵来评估它们。什么类型的音频信号会导致转录失败?
编辑2:啊,你只是为钢琴做这个。好的,这是可行的。音乐转录已经发展到可以很好地转录单音钢琴的程度。拉赫玛尼诺夫协奏曲仍将构成问题。我们的建议取决于您的最终目标。您声明“需要在 Java 中执行...”。所以听起来你只是想要一些工作,无论它如何让你在那里。在这种情况下,我同意100%与他人:使用存在的东西。
这实际上是一个有趣的问题;我所知道的所有MIR库通常都是C / C ++ / Python / Matlab。但不是Java。 EchoNest有一个Java API,但我不认为它会进行音符级转录。 http://developer.echonest.com。 (编辑:它做音符级转录。返回的数据包括音高,音色,节拍,tatum等等。但我发现复音仍然是一个问题。)
哦,Marsyas是基于Java的。凉。我以为这只是C ++。 http://marsyas.info/我建议这样做。它由MIR教授George Tzanetakis开发。它进行信号级分析,应该是一个不错的选择。
现在,如果这是一次有趣的学习体验,我认为您可以使用Java中的声音处理实用程序来试验WAV信号并查看结果。
编辑:此页面比我更好地描述了MIR软件:The Tools We Use
对于Matlab,您可能对MIR Toolbox
感兴趣以下是常见数据集的一个很好的页面:MIR Datasets
答案 1 :(得分:4)
这对于成为该领域的新手是一项非常大的工作,除非您的意思是您熟悉信号分析和特征检测,并希望更具体地了解自动转录。
没有用于WAV到MIDI转换的API。 Vamp是一个功能提取插件的框架,但要进行自动转录,您需要使用现有插件的所有功能,并实现其中没有任何功能存在的功能。
浏览the vamp download page上插件的说明,如果你想这样做,你应该开始研究的主题是你不理解的任何描述。
答案 2 :(得分:3)
如果您不需要自动执行此任务(例如,对于人们可以上传MP3并获取MIDI文件的网站),那么您应该考虑使用Melodyne这样的工具,它已经非常擅长走吧史蒂夫指出,这是一项非常艰巨的任务,即使是目前最好的算法和解决方案也不是100%可靠。
因此,如果您只是从事工作室工作并需要进行一些转换,那么使用已经为此任务设计的工具可能会节省您一些时间(并且让您头疼)。
答案 3 :(得分:1)
答案 4 :(得分:1)
这是一个仍处于高度发展阶段的领域,但仍有一些(实验性)算法可供使用。
您可以安装声波注释器并使用一些鞋面插件。
例如:
if (false)