2010-07-01 16 views
5

Potrzebuję porady dotyczącej programowania Windows, MIDI i WDM. Próbuję napisać małą aplikację, która będzie znajdować się w zasobniku systemowym i być reklamowana w systemie jako urządzenie MIDI In/Out, aby programy MIDI mogły wysyłać do niego i konwertować wiadomości na inny format. Czytałem książkę Canta WDM i szukałem informacji o pisaniu sterowników urządzeń, ale nie wiem, czy idę właściwą drogą. nie widzę jeszcze się jak: -?Symulowanie urządzenia MIDI - Windows

a) zarejestrować jako sterownik MIDI stanie (mam trzymać ref do niej w registery i niech OS bezpośredni MIDI wzywa do funkcji w DLL)

b) Bezpośrednie dane MIDI za pośrednictwem mojego sterownika do mojej aplikacji, która prawdopodobnie będzie zbyt duża, aby być samym sterownikiem.

Wszelkie porady na temat tego, od czego zacząć, będą mile widziane. dziękuję, Pete

Odpowiedz

1

Urządzenia są wyliczane (lub symulowane) przez sterowniki urządzeń, a nie aplikacje. To, co widzisz w zasobniku systemowym, to ikona aplikacji. W związku z tym musisz mieć zarówno sterownik, jak i aplikację - nie możesz mieć jednego skompilowanego kodu działającego jako jedno i drugie.

Po stronie kierowcy prawdopodobnie warto zajrzeć pod numer the MSDN docs. To odpowie na część (a) pytania yopura.

Zakładając, że nadal chcesz kontynuować, (b) najlepiej don, pozwalając aplikacji pobrać dane ze sterownika. To znacznie łatwiej niż na odwrót - aplikacja może znaleźć sterownik, ale kierowca ma duże problemy ze znalezieniem konkretnej aplikacji (procesu)

+0

Dzięki za odpowiedź. Czytałem więcej książek o kierowcach i pobierałem próbki dziś po południu i zaczynam widzieć ścieżkę przez to. Jedna sprawa? Posiadanie mojej aplikacji w trybie ciągłym wykonywania odczytu w celu pobrania informacji ze sterownika urządzenia wydaje się nieefektywne. Czy nie ma łatwego sposobu, aby zarejestrować moją aplikację z kierowcą, aby otrzymać informację o niej za pomocą jakiejś formy IPC, aby się obudzić i wyciągnąć dane? Sprawy stają się coraz bardziej jasne ... powoli. Pozdrawiam, Pete – user380998

+0

Po prostu użyj cyklicznego bufora w sterowniku. MIDI jest dość realtime; jeśli nie ma aplikacji, która je zużywa, sterownik może bezpiecznie zastąpić starsze dane. – MSalters

0

Jeśli szukasz nieco łatwiejszego sposobu na rozpoczęcie, istnieje Sterownik loopback MIDI tam, a ludzie, którzy go tworzą, oferują (lub wykorzystali) wersję, która pozwala programowi komunikować się bezpośrednio ze sterownikiem. Daje to zachowanie, którego szukasz, gdzie program pojawia się jako urządzenie MIDI. Sterownik pętli zwrotnej ma numer http://nerds.de/en/loopbe1.html. Nie widzę już strony programisty, ale jeśli się z nią skontaktujesz, możesz mieć możliwość zakupu licencji dla sterownika, do którego możesz uzyskać bezpośredni dostęp bez sprzężenia zwrotnego.

+0

Niestety, są one mocno obciążone licencją i nie można ich używać do uczenia się, a nawet rozszerzania dla własnych implementacji. –

+0

@ Mike'Pomax'Kamermans Oczywiście ... to koszt kogoś, kto wykonuje tę pracę. W każdym razie, e-mail Tobias Erichsen. https://www.tobias-erichsen.de/software/loopmidi.html Jego sterownik ma ładne API do konfigurowania portów o nazwie, co chcesz, w różnych konfiguracjach. – Brad

+0

Wiem, że tak, już, ale biorąc pod uwagę, że jego sterownik jest jedyny, jako programista open source, który jest "świetny dla mojej własnej pracy audio, ale nie jest wystarczająco dobry dla programowania open source, które muszę wykonać" =) –

6

Sterowniki Windows MIDI nie muszą być implementowane w jądrze, mogą być zaimplementowane całkowicie w przestrzeni użytkownika jako biblioteki DLL.

MSDN ma pewne informacje na temat funkcji, które należy wdrożyć - Audio Device Messages for MIDI - Niestety jest to nieco brakuje.

Wcześniej używany był przykładowy kod dla tego typu sterownika, jako część NT4 DDK, ale nowsze wydania DDK/WDK niestety już go nie zawierają.

Niektóre lepsze (choć starsza) dokumentację i przykładowy kod można jeszcze znaleźć po pewnym poszukiwań: