Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проиграть MIDI ноту из kernel-mode

401
12 февраля 2008 года
Br@in RIPper
289 / / 15.02.2003
Система WinNT32/64 (в основном XP)

Хочу написать filter driver для клавиатуры, который перехватывает input от определенной клавы, конвертирует его в MIDI ноту и засылает в MIDI драйвер для воспроизведения уст-вом.

В принципе посыл на MIDI можно сделать из user-mode (midiOutShortMsg) но во избежание ненужных задержек хотелось бы реализовать из kernel-mode.

Собственно вопрос такой - как можно проиграть MIDI ноту из драйвера? В kernel-mode я новичок, поэтому просьба не пинать ногами, если скажу какой-то нонсенс :)

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

Есть какие-нибудь соображения?
1.9K
12 февраля 2008 года
andriano
474 / / 10.01.2008
Цитата: Br@in RIPper
но во избежание ненужных задержек хотелось бы реализовать из kernel-mode.

В kernel-mode я новичок

Тогда откуда уверенность, что в user-mode непременно должны быть ненужные задержки?

401
13 февраля 2008 года
Br@in RIPper
289 / / 15.02.2003
Уверенность из опыта использования программ для звукозаписи :)
при использовании кучи прожорливых плагинов они жутко тормозят.
можно конечно повысить приоритет юзермодного потока, который будет транслировать события нажатия кнопок полученные от драйвера в MIDI команды, но ИМХО это как-то некрасиво...

а какие принципиальные возражения тому, чтобы вставить отправку MIDI команд в драйвер? сложность реализации? неоправданость?

да, действительно, я новичок в kernel-mode, поэтому если объясните мне почему так делать не стоит, я спорить не буду :)
1.9K
13 февраля 2008 года
andriano
474 / / 10.01.2008
1. Попытка, обладая явно недостаточным опытом, вклиниться в работу ядра чревата потерей системой устойчивости.
2. По моему опыту передача сообщения от MIDI-устройства синтезатору не сопровождается скольк0нибудь заметной задержкой.
При условии, разумеется, что ты использцуешь аппаратный синтезатор. Тот синтезатор, что ставится системой по умолчанию и, более того, является единственно доступным при использовании встроенной в системную плату звуковушки, является софтверным, а потому ПРИНЦИПИАЛЬНО неспособным работать без задержки. Так что перед тем, как мудрить, неплохо бы убедиться, что используется именно аппаратный синтезатор и погонять его для начала в user-mode. Скорее всего, никаких проблем не возникнет.
401
15 февраля 2008 года
Br@in RIPper
289 / / 15.02.2003
в качестве MIDI устройства будет использоваться обычная USB клавиатура (с нее мы считываем нажатия клавиш), в качестве синтезатора - виртуальный loopback MIDI порт, к другому концу которого подключена музыкальная программа (Sonar, Nuendo, Cubase), которая играет звук через DXi/VSTi синтезаторы.
Эти синты способны обеспечить минимальную задержку, но в силу прожорливости в плане ресурсов процессора, могут влиять на юзермодный процесс, который доставляет им MIDI ноты.

Так это мне представляется.

Но первый пункт ("чревата потерей системой устойчивости"), в принципе, меня убедил :)
Пока напишу фильтр драйвер для перехвата нажатий на кнопки клавы, потом видно будет
1.9K
15 февраля 2008 года
andriano
474 / / 10.01.2008
Если уж софтверный синтез обеспечивает "минимальную задержку", то о задержках user-mode можно вообще забыть.
Кстати, USB клавиатура, надеюсь, MIDI?
Если "да", то надо открыть функцией midiOutOpen порт синтезатора на выход, а midiInOpen - порт клавиатуры на вход. Второе я делал с callback функцией, т.к. мне надо было не только воспроизводить звук, но и записывать протокол работы в файл. И из callback функции уже посылал MIDI сообщение синтезатору.
Но повторюсь: крайне рекомендую использовать аппаратный синтезатор. Разницу слышно "невооруженным ухом".
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог