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

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

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

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

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

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

Все это тестирование было сделано с Windows 7. Мы должны поддерживать 7 и выше.

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

1 ответ

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

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

По-видимому, это приложениетретьей стороны использует DirectMusic.

Другие вопросы по тегам