【VB】VB编写的基于midiOut系列API实现的MIDI文件播放器
原帖:http://www.0xaa55.com/thread-720-1-1.html转载请注明出处。
原理就是通过直接读MIDI文件的内容,然后把其中的消息通过midiOutShortMsg进行发送,实现MIDI文件的播放。
经测试,这个程序能完美播放各种MIDI文件。
想要了解MIDI文件结构的可以来看看。
有关MIDI文件结构的上一篇帖子请参看这里:http://www.0xaa55.com/thread-717-1-1.html
有关midiOut系列API有关的资料,请自行查找MSDN。
这个程序是用VB写的。因为VB对于界面的处理比较方便。
BIN:
SRC:
用法很简单。将MIDI文件拖入中间那个大的白色框即可。
现在它已经能显示谱了。
附:范例MID文件。回复后下载。**** Hidden Message ***** 2014.7.23 更新:更改了时间方面的算法,播放效果更好了,但是,重新设置播放位置变得很麻烦。
这次更新使播放效果完全超出了你用mciSendCommand播放的效果。保证完全没有漏音了。
漏音是因为计时器的不精确性导致有些时间非常接近的MIDI事件以错误的顺序播放了。这次采取的方式是每个音轨独立计算播放位置。保证MIDI事件的顺序正确输出。 2014.7.24 更新:添加了新的视图样式,可以看音高了。
修改了窗口的加载函数,现在可以设置文件关联了。 大神~~~膜拜给跪了
我正在使用vb操作midi文件,对这个主题很感兴趣 太好了,真是技术高手 看上去很强大 我在做钢琴卷帘窗 我写了自定义格式的文件,参照这里的代码写出了程序实现播放。我想实现从中间任一位置开始播放,请问站长该怎么设置? 谢谢 楼主,我看看 如果MIDI文件4分音符的TICK数是480就播放不了。 谢谢 楼主,我看看 请问站长: GetTimerValue = (T_Current - T_BeginTime) * T_Velocity / T_Freq
这里所得结果的单位是什么? 太好了,真是技术高手 我想要看。 哇啊啊啊,真实太赞了,LZ真实“宅”啊,我喜欢,嘻嘻 看看,,,,, 太好了,真是技术高手 看看学习下 不错,回头我也整一个其它版本的
页:
[1]
2