从MIDI文件中获取备注数据

时间:2010-09-07 17:14:06

标签: parsing language-agnostic midi

有没有办法从MIDI文件中获取音符数据?也就是说,我想将MIDI文件分解为其组成部分,因此它们采用唯一字(或任何其他数据类型)的形式。 我最终想要做的是获取MIDI文件并在笔记中找到模式。获取每个音符,找到它的频率(正在播放)并记录其后音符播放的可能性。

在C / C ++中这样做会很好,但任何语言都可以。

3 个答案:

答案 0 :(得分:7)

Nik Reisman - 对不起,但我不同意你的看法......在C#中解析midi,C ++就是400行代码......没什么难的,也没什么难的。

我建议您从这个链接开始:https://web.archive.org/web/20141227205754/http://www.sonicspot.com:80/guide/midifiles.html
关于midi以及如何阅读它,你需要知道的一切......

简短说明解析器的工作原理:
1)以字节模式打开midi
2)读取标题块,其中有关于大小,轨道数和重要文件格式的信息!!
  - 有3种类型的格式:0,1,2(类型2真的是“有价值的”,只有少数这种类型的midi文件,所以如果有类型2你就不需要读取midi) />   - 如果没有写:"MThd" (0x4D546864),则以错误结束(这是一个糟糕的midi文件)
3)读取轨道块
  - 如果没有写:"MTrk" (0x4D54726B)以错误结束(这是一个糟糕的midi文件)
4)阅读midi活动..   - 有很多事件,您可以使用if-else命令读取所有事件,或者您只能读取您想知道的事件,例如NOTE ON,NOTE OFF   - 有时在某些midi文件中没有注意OFF ..此事件通过NOTE ON和velocity 0

更改

在网站上,一切都很好地解释了。如果你在字节模式下打开midi文件,你将只有几个方法,然后只有if-else命令的所有内容,你将在那里捕获现在存储的内容。
了解VARIABLE LENGTH非常重要,但在网站上也有解释。这并不难。您可以使用一些图像和示例来google许多可以解释VARIABLE LENGTH的网站。所以我不认为这里很难解释它。

如果您想要更多建议,请写信给我,我会尝试一下。但解析midi并不像它看起来那么难。如果你有一些问题,请写信给我。

答案 1 :(得分:3)

手工解析MIDI文件并不好玩,请相信我的话。 ;)格式虽然记录良好,但很难处理,因为您始终处于原始字节级别。由于您有兴趣从MIDI文件本身中提取一些有意义的信息,我建议使用Juce这样的框架,该框架是用C ++编写的,并且支持读取MIDI文件。

Juce相当大,但API很好并且记录良好。例如,class for parsing MIDI files非常简单易用。

答案 2 :(得分:-1)

有许多现成的解决方案,可以从MIDI文件中获取输入,生成音乐可视化效果, 因此在理论和实践上,MIDI解析器都可以正常工作

我正在使用HTML5开发这种音乐可视化程序,实时生成垂直的上>下音符时间表,以支持残障钢琴演奏者。

DLP投影仪很棒,但看来,我需要在钢琴键盘上方安装大液晶电视屏幕,以便可视化以匹配演奏的音符

@Brendan Kavanagh是领导者 另一个主要开发人员叫Stephen Malinowski

只需按照我的问题获取正确的Web链接

How to build MIDI file visualizer to get input from MIDI file and display MIDI timeline over the keyboard to match notes played by a real player