2010-07-01 3 views
5

Windows 프로그래밍, MIDI 및 WDM에 대한 조언이 필요합니다. 필자는 시스템 트레이에 앉아서 MIDI In/Out 장치로 광고하는 작은 응용 프로그램을 작성하여 MIDI 프로그램에서 보낼 수 있도록하고 메시지를 다른 형식으로 변환합니다. 저는 Cant의 WDM 책을 읽고 장치 드라이버 작성에 대한 정보를 찾아 보았지만 올바른 방향으로 가고 있는지 알지 못합니다. 난 아직 방법을 볼 수 없습니다 : -MIDI 장치 시뮬레이션 - Windows

A) (내가 할 수있는 경우 레지스트리에에 심판 스틱과 OS 직접 MIDI는 DLL의 기능을 호출 할 않는 MIDI로 내 드라이버를 등록)

b) 내 드라이버를 통해 내 응용 프로그램으로 직접 MIDI 데이터를 전송할 수 있습니다. 이는 드라이버 자체가 될 수 없을 정도로 커질 수 있습니다.

어디서부터 시작해야할지 조언 해 주시면 감사하겠습니다. 감사합니다, 피트

답변

1

장치는 응용 프로그램이 아닌 장치 드라이버에 의해 열거 (또는 시뮬레이션)됩니다. 시스템 트레이에 표시되는 것은 응용 프로그램 아이콘입니다. 따라서 드라이버와 응용 프로그램을 둘 다 가지고 있어야합니다. 컴파일 된 코드를 하나의 코드로 모두 사용할 수는 없습니다.

드라이버 쪽에서는 the MSDN docs으로 들여 오기를 원할 것입니다. 이것은 yopur 질문의 부분 (a)에 답할 것입니다.

계속 하시겠습니까? (b) 응용 프로그램이 드라이버에서 데이터를 가져 와서 처리하는 것이 가장 좋습니다. 다른 방법보다 훨씬 쉽습니다 - 응용 프로그램은 쉽게 드라이버를 찾을 수 있지만 드라이버는 특정 응용 프로그램 (프로세스)을 찾는 데 큰 문제가 있습니다

+0

감사합니다. 나는 오늘 오후에 더 많은 드라이버 북을 읽고 샘플을 달리고 있었고 나는 이것을 통해 길을보기 시작했다. 한 가지는? 내 응용 프로그램을 지속적으로 장치 드라이버에서 정보를 끌어 오기 읽기를 수행하는 데 비효율적 인 것 같습니다. 드라이버를 사용하여 내 앱을 등록하고 IPC를 사용하여 잠에서 깨어나 데이터를 가져 오는 간단한 방법은 없습니까? 상황이 점점 더 분명 해지고 있습니다 ... 천천히. 건배, Pete – user380998

+0

드라이버에 순환 버퍼를 사용하십시오. MIDI는 매우 실시간입니다. 응용 프로그램을 사용하는 응용 프로그램이 없으면 드라이버가 이전 데이터를 안전하게 덮어 쓸 수 있습니다. – MSalters

0

시작하기 쉬운 방법을 찾고 계시다면 MIDI 루프백 드라이버, 그리고 그것을 만드는 사람들은 프로그램이 드라이버와 직접 통신 할 수있게 해주는 버전을 제공 (또는 제공)했습니다. 이것은 프로그램이 MIDI 장치로 나타나는 곳에서 찾고있는 동작을 제공합니다. 루프백 드라이버는 http://nerds.de/en/loopbe1.html입니다. 더 이상 개발자 페이지가 보이지 않지만 연락하면 루프백없이 직접 액세스 할 수있는 드라이버에 대한 라이센스를 구매할 수 있습니다.

+0

유감스럽게도이 라이센스는 엄청나게 무겁고 자신의 구현에서 배우거나 확장하는 데 사용할 수 없습니다. –

+0

@ Mike'Pomax'Kamermans 물론 ... 그건 다른 사람이 일하는 데 드는 비용입니다. 어쨌든 Tobias Erichsen에게 이메일을 보냅니다. https://www.tobias-erichsen.de/software/loopmidi.html 그의 드라이버에는 원하는대로 다양한 포트에서 포트를 설정하기위한 좋은 API가 있습니다. – Brad

+0

나는 알고있다. 이미 알았지 만, 그의 드라이버는 "내 오디오 작업에는 좋지만 오픈 소스 프로그래밍에는 충분하지 않은"오픈 소스 개발자로서 유일하다. =) –

6

Windows MIDI 드라이버는 커널에 구현할 필요가 없으며 완전히 사용자 공간에서 DLL로 구현할 수 있습니다.

MSDN에는 구현해야하는 기능에 대한 정보가 있습니다. Audio Device Messages for MIDI - 불행히도 다소 부족합니다.

NT4 DDK의 일부로이 종류의 드라이버에 대한 샘플 코드가 있었지만 더 최근의 DDK/WDK 릴리스에는 더 이상 포함되지 않습니다.

더 좋은 문서와 샘플 코드 여전히 검색 후 발견 될 수있다 (나이가 비록) : 답장을 보내 (NT4 DDK에서)