2010-05-28 86 views
0

我需要从复音中提取音乐功能(音符细节 - >音高,持续时间,节奏,响度,音符开始时间)(有2个高音和低音的分数 - 低音也可以有和弦)MIDI文件。我正在使用jMusic API从MIDI文件中提取这些细节。我的方法是遍历每个分数,分成部分,然后是短语,最后记录并提取细节。从MIDI中提取音符

用我的方法,首先读取所有的高音音符,然后是低音音符 - 但是没有捕捉到和弦(即只有一个和弦单音),并且我无法确定从哪个点开始是低音笔记。 因此,我尝试的是获取音符起始点(即音符开始播放的时间) - 因为开始时高音和低音音符的开始时间应该相同 - 但我无法提取音符开始时间使用jMusic API。对于每个音符,它显示0.0。

有什么方法可以识别音符的声音(高音或低音)?还有和弦的所有音符? MIDI中储存的每个音符的声音或音符如何开始?这是不同的每个MIDI文件?

任何洞察力,非常感谢。在此先感谢

+0

我遇到了你的条款问题。 #1:“2高分... MIDI文件”。什么是“分数”?你的意思是2个“乐谱”,高音和低音,如钢琴乐谱?但是MIDI没有“乐谱”或“乐谱”,它有“通道”(每个通道是不同的乐器),每个通道可能是复音(一次播放多个音符)。说明? – 2010-05-28 14:26:19

+0

是的,我指的是高音和低音。我不知道MIDI没有分数。感谢您澄清我的误解。 但是,你怎么知道某个音符属于高音还是低音?这些频道是预定义的还是取决于音符?一个通道可以代表几个音符吗?如果是的话,他们可以用来表示和弦? 我真正需要的是从MIDI中提取这些音乐特征,以便我可以对另一组音乐特征进行比较 - 以服务于钢琴演奏评估者的目的。 感谢您关心康拉德。 – Dolphin 2010-05-28 16:02:53

+0

你还没有解释“分数”是什么;因为你使用这个词的方式与我所知道的“乐谱”这个词似乎并不相同。 – 2010-05-28 22:31:52

回答

2

你可能想看看这个问题:Actual note duration from MIDI duration

当从MIDI文件一种可能的方法来提取笔记进行了讨论。

考虑一个MIDI文件可以在多个轨道上分割(“类型1”midifile)。

一旦确定了音符,识别和弦仍然会很棘手。假设你有3个音符:C,E,G同时发生(即在一个小节的同一点被识别为声音)。他们什么时候被认为是C大调?

  • 演奏上由相同的仪器(即使在不同的频道)
  • 起到对同一信道,即使他们出现在不同的轨道

Midifile格式是发挥相同的信道

  • 非常简单(甚至可能太简单了!!)我建议你看看它的描述:http://duskblue.org/proj/toymidi/midiformat.pdf

  • +0

    感谢您的洞察雷莫。我正在浏览您的链接 - 需要一点时间才能完成。 我只为钢琴 - 这么单一的乐器 - 相同的频道做这个。 因此,如果两个音符一起播放(高音和低音),是同一频道中的两个音符?那么对于和弦来说,还有和弦中的所有音符都在同一个通道/音轨中?这对所有MIDI文件都是一样的,还是每个MIDI文件都不同 - 取决于它如何写入MIDI?轨道和频道有什么区别?同时,我会阅读MIDI规范。 高级谢谢 – Dolphin 2010-06-02 00:11:16

    +1

    Midifile没有“高音”或“低音”谱的概念。注意60是中间的C(低音和高音谱号之间的一个分数),你相应地放置其他音符。注意不需要在同一个通道上,也不必在同一个轨道上,这取决于midifile是如何创建的。这听起来比实际上更复杂。如果您不想直接处理位和字节,则可以使用midi-to-text实用程序并对midifile的文本表示进行分析。你可以在这里找到这样的工具之一:http://www.midiox.com/(在页面中查找“text to midi”) – 2010-06-02 08:31:57

    +0

    嗨雷莫 - 你能否建议一个从midi中提取音符发音的起点?你的建议 - 可以从Java Sound API平易近人吗?或者我必须从头开始编码?我需要先找到一个开始的途径。对延迟评论和打扰抱歉。提前致谢。 – Dolphin 2010-06-10 13:27:24