J'écris un programme Windows utilisant C++ et l'API Windows, et j'essaie de mettre en file d'attente des messages MIDI dans un flux MIDI, mais je reçois une erreur étrange lorsque j'essaie de le faire. Si j'utilise midiOutShortMsg
pour envoyer un message MIDI non-mis en file d'attente au flux, cela fonctionne correctement. Cependant, midiStreamOut
renvoie toujours le code d'erreur 68, qui est #define
d à MCIERR_WAVE_OUTPUTUNSPECIFIED
. midiOutGetErrorText
donne la description suivante de l'erreur:Problème lors de l'utilisation de flux MIDI dans Windows
The current MIDI Mapper setup refers to a MIDI device that is not installed on the system. Use MIDI Mapper to edit the setup.
J'utilise Windows 7 (64 bits) et ont essayé d'ouvrir le flux MIDI avec des ID de périphériques des deux MIDI_MAPPER et les quatre périphériques de sortie MIDI sur mon système, et reçoivent toujours exactement le même message d'erreur.
Voici le code pour ouvrir le flux MIDI:
UINT device_id = MIDI_MAPPER; //Also tried 0, 1, 2 and 3
midiStreamOpen(&midi, &device_id, 1, (DWORD_PTR)hwnd, 0, CALLBACK_WINDOW);
Voici le code pour envoyer le message 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));
Comment puis-je résoudre ce problème?