为了账号安全,请及时绑定邮箱和手机立即绑定

不要用mci函数,也不要叫我看其他的,前者不合适,后者已看过。

不要用mci函数,也不要叫我看其他的,前者不合适,后者已看过。

C++
临摹微笑 2023-01-02 18:14:00

我在visual c++上做midi文件的播放,要用midi函数,求助midiStreamOut函数第二个参数LPMIDIHDR lpMidiHdr, 要怎么获取。

查看完整描述

2 回答

?
aluckdog

TA贡献1590条经验 获得超6个赞

自己定一个变量。
MIDIHDR midiHdr;
midiOutPrepareHeader(handle, &midiHdr, sizeof(MIDIHDR));
midiStreamOut(handle, &midiHdr, sizeof(MIDIHDR));

查看完整回答
反对 回复 2023-01-06
?
弑天下

TA贡献1529条经验 获得超7个赞

那是MIDI文件里的数据了,你需要分析MIDI文件结构,读出它的数据,把数据缓冲区赋给lpData。有个例子是自己写数据的:
unsigned long Phrase[] = {0, 0, ((unsigned long)MEVT_LONGMSG<<24) | 8, 0x047F7FF0, 0xF77F7F01,
0, 0, ((unsigned long)MEVT_TEMPO<<24) | 0x0007A120,
0, 0, 0x007F3C90,
48, 0, 0x00003C90,
0, 0, 0x007F3C90,
48, 0, 0x00003C90,

0, 0, 0x007F4390,
48, 0, 0x00004390,
0, 0, 0x007F4390,
48, 0, 0x00004390,

0, 0, 0x007F4590,
48, 0, 0x00004590,
0, 0, 0x007F4590,
48, 0, 0x00004590,

0, 0, 0x007F4390,
86, 0, 0x00004390,

10, 0, 0x007F4190,
48, 0, 0x00004190,
0, 0, 0x007F4190,
48, 0, 0x00004190,

0, 0, 0x007F4090,
48, 0, 0x00004090,
0, 0, 0x007F4090,
48, 0, 0x00004090,

0, 0, 0x007F3E90,
48, 0, 0x00003E90,
0, 0, 0x007F3E90,
48, 0, 0x00003E90,

0, 0, 0x007F3C90,
96, 0, 0x00003C90};

		midiHdr.lpData = (LPBYTE)&Phrase[0];
		midiHdr.dwBufferLength = midiHdr.dwBytesRecorded = sizeof(Phrase);
		midiHdr.dwFlags = 0;


查看完整回答
反对 回复 2023-01-06

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信