渣代码,无注释(死),简单的分析了midi文件,并且单轨输出成文本信息,同步音频与midi信息播放在Flash中使用。
抛砖引玉,有需要的可以改改,做个节奏弹幕或其他音乐游戏啥的应用。
真有人用的话自己要加多轨分析,
MIDI特例分析,比如开始空拍,或者一个超长音符等极限问题,
多宿主mid识别,我只在FL Studio和Cubase下实验过。其他的没试过不知道辨识度怎么样。
分析是用C++写的,除了vector其实没C++什么事....
应用用Flash写的,因为C++用的不熟,写应用比较慢,其实就是得到曲速,音高,力度和时值,利用这些数值,应用怎么写更炫更好玩而已。其他MIDI事件没分析,感觉对写视觉表达用处不是很大。
例子写的比较土,一个鼓机同步,一个12度环,一个综合。
综合例子可能会有不同步的问题,原因是没做精确延时计算......主要是犯懒......
http://pan.baidu.com/share/link?shareid=597833&uk=3442844069pass:84ai
使用方法:
自己做完音乐或音频扒带的mid导出,用ParseMIDI.cpp输出noteon,noteoff和info信息
用CombiNotes.cpp把noteon和noteoff组合成note信息
其实这个可以一个文件搞定,或者不输出文本,直接在程序中分析完就用,不过当时实验时没想过这么多......
最后输出的note信息格式是:
channel,note,velocity,start,end
MIDI音轨号,音高,力度,起始时间,结束时间(毫秒)
MIDI格式说明文档
http://www.midifan.com/modulearticle-detailview-901.htm


[ 此帖被elegame在2013-06-06 07:16重新编辑 ]