Использование MIDI в UWP - PullRequest
       7

Использование MIDI в UWP

0 голосов
/ 28 января 2019

При использовании UWP MIDI API с физическим MIDI-устройством приложение зависает при выходе и не может быть принудительно завершено ни из командной строки, ни из диспетчера задач.

Это происходит для всех приложений UWP, которые используют MIDIвключая официальный пример из MSDN , без изменений.

Я поднял проблему на GitHub по этому поводу, но, похоже, это не новая проблема.MIDI предположительно не работает с 2014 года.

Есть ли способ обойти эту проблему в UWP другими способами?Я пишу на C #, но свободно владею C ++ и могу использовать API более низкого уровня, если они существуют.Мне нужно только получить MIDI-вход от выбранного MIDI-устройства (клавиатуры).

Я также пытался использовать winmm.dll, как предложено в соответствующем посте ( Получение сигналов от порта MIDI в C # ), но это не работает для меня.Метод midiInGetNumDevs() возвращает 0 при использовании из приложения UWP.

Я использую звуковую карту M-Audio Fast Track USB (подключена через USB) и M-AudioКлавиатура 88es Keystation MIDI (подключается через USB).У меня не было проблем в настольных приложениях.

Я обнаружил частичный обходной путь, когда я перемещаю код освобождения в обработчик событий App Suspending вместо того, чтобы помещать его в деструктор.Тем не менее, проблема все еще возникает, когда устройство отключено во время жизни приложения.Если MIDI-устройство подключено во время работы приложения, приложение закрывается без проблем (с обходным решением).Если MIDI-устройство подключено до запуска приложения и остается подключенным во время работы приложения, приложение закрывается без проблем (с обходным решением).Только если устройство отключено во время работы приложения, оно будет зависать при закрытии независимо от того, выполняется ли код освобождения в деструкторе или в обработчике App Suspending.

1 Ответ

0 голосов
/ 01 марта 2019

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

Используя указанный вами пример, https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/MIDI • Приложение не зависало, когда я закрывал его.• Я смог удалить кабель во время жизненного цикла приложения, без проблем.Я все еще мог отправлять и получать сообщения после повторного подключения.• Я смог подключить устройство в середине жизненного цикла, без проблем.Я все еще был в состоянии отправлять и получать сообщения.

Хотя в настоящее время он работает с настольного компьютера, он должен быть «универсальным», чтобы он хорошо работал в UWP.Драйвер звуковой карты универсален?

В нашей документации по драйверам мы видим примечание Использовать инструмент InfVerif, чтобы убедиться, что INF-файл вашего пакета драйверов универсален.https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/infverif. В документации разработчика приложения я вижу примечание для проверки метаданных устройства.https://docs.microsoft.com/en-us/windows-hardware/drivers/devapps/step-4--test-device-metadata

Дополнительная документация, связанная с вашим вопросом: Создание приложений устройства UWP
https://docs.microsoft.com/en-us/windows-hardware/drivers/devapps/the-workflow

Проверка метаданных устройства для приложения устройства UWP
https://docs.microsoft.com/en-us/windows-hardware/drivers/devapps/step-4--test-device-metadata

Начало работы с универсальными драйверами Windows
https://docs.microsoft.com/en-us/windows-hardware/drivers/develop/getting-started-with-universal-drivers

Пример MIDI https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/MIDI

Высвобождение ресурсов в приложении приостановлено
https://docs.microsoft.com/en-us/windows/uwp/launch-resume/suspend-an-app#release-resources

Используйте Dispose для подавления финализации ПРИМЕЧАНИЕ: в зависимости от финализатора ресурсы в памяти будут храниться дольше, чем необходимо.Они не будут выпущены, пока не будет выполнен полный сборщик мусора или когда процесс завершится.
https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose

...