我正在使用 C++ 和 Windows API 编写一个 Windows 程序,并且我试图在 MIDI 流中对 MIDI 消息进行排队,但是当我尝试这样做时收到一个奇怪的错误。如果我使用midiOutShortMsg
向流发送非排队 MIDI 消息,它可以正常工作。但是,midiStreamOut
总是返回错误代码 68,即#define
d to MCIERR_WAVE_OUTPUTUNSPECIFIED
。midiOutGetErrorText
给出了错误的以下描述:
当前的 MIDI 映射器设置是指系统上未安装的 MIDI 设备。使用 MIDI Mapper 编辑设置。
我正在使用 Windows 7(64 位)并尝试使用 MIDI_MAPPER 和我系统上所有四个 MIDI 输出设备的设备 ID 打开 MIDI 流,但仍然收到完全相同的错误消息。
这是打开 MIDI 流的代码:
UINT device_id = MIDI_MAPPER; //Also tried 0, 1, 2 and 3
midiStreamOpen( &midi, &device_id, 1, ( DWORD_PTR )hwnd, 0, CALLBACK_WINDOW );
这是发送 MIDI 消息的代码:
MIDIHDR header;
MIDIEVENT *event;
event = ( MIDIEVENT * )malloc( sizeof( *event ) );
event->dwDeltaTime = delta_time;
event->dwStreamID = 0;
event->dwEvent = ( MEVT_F_SHORT | MEVT_SHORTMSG ) << 24 | ( msg & 0x00FFFFFF );
header.lpData = ( LPSTR )event;
header.dwBufferLength = sizeof( *event );
header.dwBytesRecorded = sizeof( *event );
header.dwUser = 0;
header.dwFlags = 0;
header.dwOffset = 0;
midiOutPrepareHeader( ( HMIDIOUT )midi, &header, sizeof( header ) );
midiStreamOut( midi, &header, sizeof( header ) );
我该如何解决这个问题?