DirectMusic 미니포트 드라이버 인터페이스

DMus 미니포트 드라이버 인터페이스는 MIDI 미니포트 드라이버 인터페이스를 기반으로 하지만 고급 신시사이저를 지원하기 위해 다음 확장을 추가합니다.

  • DLS는 instance당 16개 이상의 채널을 다운로드합니다.

  • 하드웨어에서 메모 이벤트 시퀀싱

DMus 미니포트 드라이버 인터페이스는 여러 가지 방법으로 MIDI 미니포트 드라이버 인터페이스와 다릅니다. DMus 미니포트 드라이버는 IMiniportMidi가 아닌 IMiniportDMus 인터페이스를 구현합니다. 이 인터페이스는 IMiniportMidi와 비슷하지만 IMiniportDMus::NewStream 메서드는 IMXF(MIDI 변환 필터) 인터페이스를 만들고 IMiniportMidiStream 인터페이스를 구현하는 대신 DMus 포트 드라이버의 IAllocatorMXF 인터페이스에 연결합니다. IAllocatorMXFIMXF 는 표준 GetMessagePutMessage 호출을 래핑합니다( IAllocatorMXF::GetMessageIMXF::P utMessage 참조). 이러한 호출은 원시 MIDI 바이트가 아닌 패키지된 이벤트를 처리합니다.

신시사이저용 DMus 미니포트 드라이버는 DirectMusic 속성의 일부 또는 전부를 구현할 수 있습니다. 이러한 속성을 사용하면 시스템에서 디바이스에 대한 DLS 다운로드 및 채널 할당을 관리할 수 있습니다. dmusprop.h 헤더 파일은 DirectMusic 관련 속성 항목을 정의합니다. 이러한 속성 목록은 KSPROPSETID_SynthKSPROPSETID_Synth_Dls 참조하세요.

DMus 미니포트 드라이버는 여러 핀 인스턴스를 만들 수 있도록 허용해야 합니다. 각 핀 instance 하나의 가상 신시사이저 역할을 하며 채널 집합을 포함하고 DLS는 다른 핀 인스턴스와 독립적으로 다운로드합니다.

오디오 드라이버 속성 집합에 설명된 신디사이저 속성 중 일부는 핀 instance 작동하며, 다른 일부는 전역입니다. 전역 속성을 처리하려면 신시사이저에 토폴로지의 신시사이저 노드가 있어야 합니다. 각 속성 항목에 대한 설명은 해당 항목이 신시사이저 노드 또는 핀 instance 전송되는지 여부를 나타냅니다. 합성을 지원하는 하드웨어의 각 부분에 대해 다음 그림과 같이 포트 드라이버 개체와 미니포트 드라이버 개체가 있습니다.

DirectMusic 신시사이저의 포트 드라이버와 미니포트 드라이버 간의 관계를 보여 주는 다이어그램

포트 드라이버 개체는 미니포트 드라이버 개체에 의해 유지되는 IPortDMus 인터페이스의 한 instance 노출합니다. 미니포트 드라이버는 포트 드라이버에서 보유하는 IMiniportDMus 인터페이스의 instance 하나를 내보냅니다. 인스턴스화된 모든 핀에 대해 포트 드라이버는 일치하는 IMXF 인터페이스를 요청합니다. 시스템과 이 instance 간의 통신은 PIN에 주소가 지정된 속성 요청과 IMXF 스트림 인터페이스 간에 흐르는 이벤트의 조합입니다.

두 개체를 만들 때 미니포트 드라이버에 전달해야 합니다.

  • 시계

  • Allocator 개체

클록은 렌더링 및 캡처 작업에 매우 중요합니다. 미니포트 드라이버는 지정된 시간에 노트를 렌더링해야 합니다. 미니포트 드라이버가 MIDI 데이터에서 읽을 때 커널 이벤트를 타임스탬핑할 수 있도록 시간을 알아야 합니다. 자세한 내용은 대기 시간 시계를 참조하세요.

IAllocatorMXF 인터페이스가 있는 할당자 개체는 메모리를 재활용하는 메모리 풀로 사용됩니다. 시스템의 모든 MIDI 메시지는 이 공통 풀에서 할당됩니다. 할당자 개체를 사용하여 개별 메시지를 만들거나 삭제해야 합니다.

이 단원에는 다음이 포함됩니다.

MIDI 전송

대기 시간 클록

미니포트 드라이버 속성 항목 요청

PortDMus를 기본 DirectMusic 포트 드라이버로 만들기

신시사이저를 레거시 디바이스로 노출