다음을 통해 공유


신시사이저 미니포트 드라이버 개요

DirectMusic 지원에는 신디사이저와 싱크가 모두 필요합니다. 각 의 기본 구현은 DirectMusic과 함께 제공됩니다. 사용자 모드 Microsoft Software Synthesizer는 기본 신디사이저로 제공되며 DirectSound는 기본 웨이브 싱크입니다. 이러한 기능은 전체 하드웨어 에뮬레이션을 제공하지만 일반적으로 커널 모드 소프트웨어 또는 하드웨어 구현을 통해 추가 성능 향상을 달성할 수 있습니다.

하드웨어에 대한 지원을 구현하는 경우 유일한 선택은 커널 모드 드라이버를 작성하는 것입니다. 커널 모드에서 웨이브 싱크는 PortCls의 DMus 포트 드라이버에서 제공되며 사용자 지정 구현을 위해 바꿀 필요가 없습니다(사용자 모드에서 수행되는 경우도 있습니다).

커널 모드 DirectMusic 드라이버의 경우 가장 중요한 헤더 파일은 dmusicks.h입니다. 미니포트 드라이버를 구현하는 데 필요한 기본 커널 모드 인터페이스가 포함되어 있습니다. 이러한 인터페이스는 다음과 같습니다.

IMiniportDMus

ISynthSinkDMus

IMXF

IAllocatorMXF

IMasterClock

IPortDMus

이러한 인터페이스의 마지막 세 가지는 PortCls.sys 구현됩니다.

관심 있는 다른 두 헤더 파일은 directMusic 속성 항목이 포함된 dmusprop.h와 기본 IRP 구조가 포함된 dmusbuff.h가 DMUS_EVENTHEADER.

다음 다이어그램은 IHV 어댑터 드라이버와 DirectMusic 시스템의 나머지 부분 간의 관계를 보여 줍니다.

어댑터 드라이버와 DirectMusic 시스템 간의 관계를 보여 주는 다이어그램

최상위 수준에서 드라이버는 DirectMusic 포트 드라이버(IDirectMusicPort 인터페이스 instance)를 통해 노출됩니다. 애플리케이션이 DirectMusic과 대화하는 방법입니다. 이 포트 드라이버는 DeviceIoControl 함수(Microsoft Windows SDK 설명서에 설명됨)를 통해 표준 커널 스트리밍 호출을 통해 핀 instance 아래쪽으로 통신합니다.

"포트"라는 용어는 위의 그림에서 두 가지 상반되는 의미를 둡니다. 위의 사용자 모드에서 DirectMusic API에서 용어 포트를 사용하는 것을 커널 모드 DMus 포트 드라이버와 혼동하지 않도록 합니다. 용어는 두 컨텍스트에서 유사하지만 약간 다른 의미를 갖습니다. 특히 그림 맨 위에 있는 IDirectMusicPort 인터페이스는 DMus 포트 드라이버가 그림의 아래쪽 절반에서 구현하는 단일 핀 instance 추상화합니다.

각 미니포트 드라이버 개체는 일치하는 포트 드라이버 개체에 연결됩니다. 포트 드라이버 개체는 미니포트 드라이버에 기본 서비스를 제공합니다. 디바이스의 열린 instance 매핑되는 각 핀 instance 형식 변환, 시퀀싱 및 "thruing"과 같은 서비스가 있습니다(자세한 내용은 Windows SDK 설명서의 IDirectMusicThru 인터페이스에 대한 설명을 참조하세요). 핀은 대상 또는 원본일 수 있으며 여러 데이터 형식 및 범위를 지원할 수 있습니다. 각 핀 instance 대상 또는 원본을 지정하고 지원되는 데이터 형식과 범위를 지정합니다.

미니포트 드라이버 개체는 IHV의 어댑터 드라이버에 의해 만들어집니다. 드라이버의 열린 instance당 하나의 핀 instance 및 시퀀서가 있지만 하드웨어(또는 로드된 커널 소프트웨어 신시사이저)당 하나의 포트 미니포트 드라이버 쌍만 있습니다. 미니포트 드라이버와의 통신은 미니포트 드라이버에 전달되는 이벤트 스트림과 미니포트 드라이버에서 지원하는 속성 항목을 통해 전달됩니다.

DirectMusic 미니포트 드라이버 인터페이스 섹션에서는 DirectMusic 미니포트 드라이버 구현의 세부 정보를 제공합니다.