0xAA55 发表于 2014-7-20 00:04:12

【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 *****

0xAA55 发表于 2014-7-23 12:19:50

2014.7.23 更新:更改了时间方面的算法,播放效果更好了,但是,重新设置播放位置变得很麻烦。
          这次更新使播放效果完全超出了你用mciSendCommand播放的效果。保证完全没有漏音了。
          漏音是因为计时器的不精确性导致有些时间非常接近的MIDI事件以错误的顺序播放了。这次采取的方式是每个音轨独立计算播放位置。保证MIDI事件的顺序正确输出。

0xAA55 发表于 2014-7-24 19:14:28

2014.7.24 更新:添加了新的视图样式,可以看音高了。
          修改了窗口的加载函数,现在可以设置文件关联了。

gta191977649 发表于 2014-9-5 21:26:45

大神~~~膜拜给跪了

wypabcd 发表于 2014-12-21 06:30:02

我正在使用vb操作midi文件,对这个主题很感兴趣

ljz231 发表于 2017-2-13 17:18:23

太好了,真是技术高手

白天 发表于 2017-10-25 01:54:19

看上去很强大

白天 发表于 2017-10-25 02:24:10

我在做钢琴卷帘窗

白天 发表于 2017-11-16 20:35:10

我写了自定义格式的文件,参照这里的代码写出了程序实现播放。我想实现从中间任一位置开始播放,请问站长该怎么设置?

444742627 发表于 2017-11-20 19:33:48

谢谢 楼主,我看看

白天 发表于 2018-1-2 15:18:32

如果MIDI文件4分音符的TICK数是480就播放不了。

再见肥仔扑 发表于 2018-1-4 16:32:21

谢谢 楼主,我看看

白天 发表于 2018-1-5 11:10:40

请问站长: GetTimerValue = (T_Current - T_BeginTime) * T_Velocity / T_Freq
这里所得结果的单位是什么?

lpc2019 发表于 2019-2-23 19:34:41

太好了,真是技术高手

outong 发表于 2019-2-26 18:53:46

我想要看。

小冰 发表于 2019-3-2 20:14:25

哇啊啊啊,真实太赞了,LZ真实“宅”啊,我喜欢,嘻嘻

nbachenxiao 发表于 2019-9-24 23:40:59

看看,,,,,

odiny 发表于 2019-12-2 18:47:37

太好了,真是技术高手

hxin123456 发表于 2020-4-3 21:05:04

看看学习下

失去系统消息 发表于 2020-4-21 19:10:22

不错,回头我也整一个其它版本的
页: [1] 2
查看完整版本: 【VB】VB编写的基于midiOut系列API实现的MIDI文件播放器