有没有办法从MIDI文件中获取音符数据?也就是说,我想将MIDI文件分解为其组成部分,因此它们采用唯一字(或任何其他数据类型)的形式。 我最终想要做的是获取MIDI文件并在笔记中找到模式。获取每个音符,找到它的频率(正在播放)并记录其后音符播放的可能性。
在C / C ++中这样做会很好,但任何语言都可以。
答案 0 :(得分:7)
我建议您从这个链接开始: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链接