Одновременное открытие одного входного MIDI-потока из нескольких приложений

Мы добавляем поддержку доступа к различным устройствам MIDI-контроллера в нашем приложении. Из наших собственных испытаний с использованием midiInOpen кажется, что только одно приложение может получить доступ к устройству ввода MIDI с помощью midiInOpen. Второе приложение, пытающееся открыть MIDI-устройство, завершается с ошибкой MMSYSERR_NOMEM.

Однако у меня есть пример коммерческого приложения (стороннего), которому удается получить доступ к входному потоку MIDI одновременно с нашим приложением (которое использует midiInOpen). Это говорит о том, что есть другой способ доступа к MIDI-потоку.

Я использовал анализатор API, чтобы увидеть вызовы API, и это приложение не использует midiInOpen. Он использует midiInMessage и midiOutMessage, и из документов API видно, что они взаимодействуют напрямую с драйвером.

Из документации я вижу, что новая поддержка MIDI предоставляется в Windows 10; Я еще не экспериментировал с тем, как это работает вместе с приложением, использующим midiInOpen, но, если возможно, мне нужно найти решение, которое работает с Windows 7 и выше.

Я связался со сторонним разработчиком приложения, чтобы узнать, могут ли они помочь. В настоящее время. наше приложение работает вместе с их приложением, но есть и другие приложения, которые используют midiInOpen для доступа к MIDI-данным, и наше приложение не может сосуществовать с их приложениями. Первое приложение, вызывающее midiInOpen, получает MIDI-поток; второй звонок не проходит.

Все эти тесты проводились с Windows 7. Нам нужна поддержка 7 и выше.

Наша версия приложения для Mac отлично работает в этом отношении.


person Callum Jamieson    schedule 18.09.2017    source источник


Ответы (1)


Некоторые устройства имеют нестандартные драйверы WinMM с поддержкой нескольких клиентов. Но это явно не тот случай.

В настоящее время Microsoft предоставляет три API-интерфейса MIDI в Windows:

Судя по всему, это стороннееrdприложение использует DirectMusic.

person CL.    schedule 19.09.2017