我是这个领域的新手——但我需要在 java 中执行 WAV 到 MIDI 的转换。有没有办法知道 WAV 到 MIDI 转换的具体步骤是什么?我有一个非常粗略的想法,就像您需要的那样;对 wav 文件进行采样、过滤、使用 FFT 进行频谱分析、特征提取,然后将提取的特征写入 MIDI。但我找不到可靠的资料或论文,如如何做到这一切?有人可以给我一些线索,比如如何以及从哪里开始?是否有任何开源 API 可用于此 WAV 到 MIDI 转换过程?
提前谢谢
我是这个领域的新手——但我需要在 java 中执行 WAV 到 MIDI 的转换。有没有办法知道 WAV 到 MIDI 转换的具体步骤是什么?我有一个非常粗略的想法,就像您需要的那样;对 wav 文件进行采样、过滤、使用 FFT 进行频谱分析、特征提取,然后将提取的特征写入 MIDI。但我找不到可靠的资料或论文,如如何做到这一切?有人可以给我一些线索,比如如何以及从哪里开始?是否有任何开源 API 可用于此 WAV 到 MIDI 转换过程?
提前谢谢
这是一个比你想象的更复杂的过程。
这个研究问题通常被称为音乐转录:将音乐的低级表示(例如波形)转换为高级表示(如 MIDI 甚至乐谱)的行为。
解决方案的复杂程度取决于输入数据的复杂程度。大量的研究论文只针对单声道钢琴或鼓上的音乐转录……因为它们很容易转录。(相对而言。)小提琴更难。声音就更难了。小提琴加人声加钢琴要难得多。交响乐几乎是不可能的。你得到图片。
音乐转录的基本要素涉及以下任何重叠领域:
在 Google Scholar 或 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 软件:我们使用的工具
对于 Matlab,您可能对MIR 工具箱感兴趣
这是一个很好的常见数据集页面:MIR Datasets
如果您不需要自动执行此任务(即,对于人们可以上传 MP3 并获取 MIDI 文件的网站),那么您应该考虑使用Melodyne之类的工具,它已经非常擅长此操作。正如史蒂夫所指出的,这是一项非常难以完成的任务,即使是目前最好的算法和解决方案也不是 100% 可靠的。
因此,如果您只是在做工作室工作并且需要进行一些转换,那么使用已经为该任务设计的工具可能会为您节省一些时间(并且会让人头疼)。
这是一个仍在高度发展的领域,但是,有一些(实验)算法可用。
您可以安装 sonic annotator 并使用一些 vamp 插件。
例如:
./sonic-annotator file.wav -d vamp:qm-vamp-plugins:qm-transcription:transcription -w midi
./sonic-annotator file.wav -d vamp:silvet:silvet:notes -w midi
./sonic-annotator file.wav -d vamp:ua-vamp-plugins:mf0ua:mf0ua -w midi
Dolphin,很抱歉,你太粗鲁了,但你完全低估了这个问题。您想要实现的目标 - 涉及演奏时使用的所有参数的完整钢琴声音转录需要与在该领域工作多年的人员进行大量研究。即使是信号处理领域的一群博士也必须投入大量工作才能接近你的意思。音乐转录需要数十年的工作才能达到一半的可靠性。我建议你选择一个不同的问题,你可以比这更好地管理。