wav-to-midi转换

Dol*_*hin 9 midi wav file-conversion pitch-tracking

我是这个领域的新手 - 但我需要在java中执行WAV-to-MIDI转换.有没有办法知道WAV-to-MIDI转换涉及的步骤究竟是什么?我有一个非常粗略的想法,因为你需要; 对wav文件进行采样,对其进行滤波,使用FFT进行频谱分析,进行特征提取,然后将提取的特征写入MIDI.但我找不到如何做到这一切的可靠来源或论文?有人可以给我提供线索,如何以及从何处开始?是否有任何开源API可用于此WAV-to-MIDI转换过程?

谢谢

Ste*_*joa 27

这是一个比你想象的更复杂的过程.

该研究问题通常被称为音乐转录:将音乐的低级表示(例如,波形)转换为更高级别的表示(例如MIDI或甚至乐谱)的行为.

您的解决方案的复杂程度取决于输入数据的复杂程度.大量研究论文仅针对单声道钢琴或鼓声进行音乐转录...因为它们易于转录.(相对而言)小提琴更难.声音更难.小提琴加声音加钢琴要困难得多.交响乐几乎是不可能的.你得到了照片.

音乐转录的基本要素涉及以下任何重叠区域:

  1. (多)音高估计
  2. 仪器识别,音色建模
  3. 节奏检测
  4. 注意开始/偏移检测
  5. 形式/结构建模

在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软件:我们使用的工具

对于Matlab,您可能对MIR Toolbox感兴趣

这是常见数据集的一个很好的页面:MIR数据集