wav-midi转换

问题描述:

我是这个领域的新手 - 但我需要在java中执行WAV到MIDI的转换。 有没有办法知道WAV到MIDI转换涉及的步骤到底是什么? 我有一个非常粗略的想法,因为在你需要; 对wav文件进行采样,过滤,使用FFT进行频谱分析,特征提取,然后将提取的特征写入MIDI。 但是我找不到可靠的资料或论文,不知道该怎么做? 有人能告诉我如何以及从哪里开始的线索吗? 是否有任何开源API可用于此WAV到MIDI转换过程?wav-midi转换

高级谢谢

+0

检查这个问题,以及http://stackoverflow.com/questions/1628071/programmatically-listening-to-sound-signal-processing/1628241#1628241 – 2010-01-24 07:07:24

+0

[WAV的可能重复到midi转换](http://stackoverflow.com/questions/1897023/wav-to-midi-conversion) – finnw 2011-05-07 19:44:57

这是一个比您想象的更加复杂的过程。

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

解决方案的复杂程度取决于输入数据的复杂程度。大量的研究论文只针对单声钢琴或鼓声音乐转录,因为它们很容易转录。 (相对)小提琴比较难。声音更难。小提琴加音色加钢琴要难得多。交响乐几乎是不可能的。你得到的照片。

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

  1. (多)间距估计
  2. 仪器识别,音色建模
  3. 节奏检测
  4. 音符起始/截止检测
  5. form/structure modeling

在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

+0

感谢您的建议史蒂夫。我正在计划只用于钢琴演奏的wav-midi。我认为音乐转录只会产生数字音乐乐谱 - 感谢您纠正我。我需要录制钢琴演奏的一首乐曲,并从中产生一个midi文件(从wav文件播放midi文件),从音高,动态,时序,节奏,短语,音调,连接等中捕捉大部分音乐特征。用于处理。从midi直接捕获这些是可能的,但从wav - 我无法想到从哪里开始。我必须首先研究你所说的领域 - 谢谢Steve – Dolphin 2010-01-24 10:02:03

+0

我是否必须将Matlab用于这个过程并与Java相集成?提前感谢史蒂夫。你真的画了更大的图片。 – Dolphin 2010-01-24 10:07:32

+1

不客气。查看我对原文帖子的评论回复。 – 2010-01-24 14:25:39

这是一个非常重要的新领域,除非您的意思是您一般熟悉信号分析和特征检测,并希望更具体地了解自动转录。

WAV转换为MIDI没有API。 Vamp是一个用于特征提取插件的框架,但要做自动转录,您需要使用现有插件的所有功能,以及其中没有的功能。

通过浏览the vamp download page上的插件说明,您不明白的任何描述是您应该开始研究的主题,如果您想要这样做。

+0

感谢Smith的建议。至少现在我知道,找到这样做的API是没有意义的。你可以使用说java代码插件吗?特征提取 - 我必须使用算法吗?只是因为我知道一个算法,我怎么能把它放到代码?我将不得不使用Matlab并与语言(比如说Java)集成吗?你能给我一张照片吗?再次感谢Smith – Dolphin 2010-01-24 10:06:35

+1

Vamp使用C,C++。没有任何Java插件和这些资源?这将是最有用的。你如何在java代码中使用插件?高级谢谢 – Dolphin 2010-01-24 12:19:48

+1

Java在信号处理/分析中并不常见,因为它相对CPU密集,直到最近硬件还不足以在可接受的速度下在Java中完成这类事情。看起来史蒂夫看起来不错。对于更高层次的方法,还可以使用像csound这样的环境http://csounds.com/,它提供了大量的工具来合成和分析声音,而不用担心明确的内存分配和释放, C. – 2010-01-24 15:09:33

如果您不需要自动执行此任务(即,用于人们可以上传MP3并获取MIDI文件的网站),那么您应该考虑使用像Melodyne这样的工具,它已经非常擅长。正如史蒂夫指出的那样,这是一项非常艰巨的任务,即使目前出现的最佳算法和解决方案也不是100%可靠的。

所以,如果你只是在做工作室的工作,需要做一些转换,它可能会为您节省一点时间(和许多头痛的)使用已经设计完成这个任务的工具。

海豚,抱歉是粗鲁的,但你完全低估了这个问题。你想要达到什么样的效果 - 一个完整的钢琴声音转录涉及到演奏时使用的所有参数,这需要与那些在该领域工作多年的人进行大量的研究。即使是一群信号处理博士也不得不投入大量工作才能接近你的意思。音乐转录需要数十年的工作才能在中途可靠工作。我建议你选择一个不同的问题,你可以比这更好地管理。

这是一个字段,它仍处于开发阶段的高度,但也有一些(实验)算法可用。

您可以安装声波注释器并使用一些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