Открытие одного входного потока 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:
- функции WinMM MIDI (
midiInOpen
так далее.), - API DirectMusic и
- Windows 10 UWP MIDI API.
По-видимому, это приложениетретьей стороны использует DirectMusic.