Когда выполняется обратный вызов MIDI-устройства? - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь реализовать работу с MIDI-устройствами в C #. В настоящее время я реализую отправку сообщений через устройство вывода. Я вижу, что есть MidiOutProc для него. Я передаю соответствующий обратный вызов в методе midiOutOpen . Проблема в том, что обратный вызов не выполняется, когда я отправляю сообщение через устройство (отправка в порядке, я вижу, что данные были переданы через виртуальный порт MIDI, на котором я тестирую API). Должен ли я попасть в этот обратный вызов при отправке сообщения? Когда я открываю устройство, я попадаю в функцию обратного вызова с сообщением MOM_OPEN, поэтому обратный вызов подключается правильно.

Я отправляю сообщения через функцию midiOutShortMsg .

Обновлено: Похоже, что для устройства вывода обратный вызов с сообщением будет выполняться только с MOM_DONE. Из документации по этому типу сообщения:

Сообщение MOM_DONE отправляется функции обратного вызова MIDI-выхода, когда указанный системный или потоковый буфер был воспроизведен и возвращается в приложение.

Таким образом, кажется, что обратный вызов не выполняется для сообщений канала, таких как Примечание Вкл. , отправленных через midiOutShortMsg. Это так?

1 Ответ

0 голосов
/ 27 августа 2018

При отправке больших MIDI-сообщений с буфером необходимо обратное сообщение MOM_DONE, чтобы сообщить вашей программе, когда можно повторно использовать (или освободить) буфер.И это сообщение обратного вызова предназначено только для управления буфером.

Для коротких сообщений такое уведомление не является необходимым .Если вы хотите что-то сделать после отправки короткого сообщения, просто позвоните по этому коду напрямую.

...