다음을 통해 공유


DMUS_KERNEL_EVENT 구조체(dmusicks.h)

DMUS_KERNEL_EVENT 구조는 타임스탬프를 사용한 음악 이벤트를 패키지하는 데 사용됩니다.

구문

typedef struct _DMUS_KERNEL_EVENT {
  BYTE               bReserved;
  BYTE               cbStruct;
  USHORT             cbEvent;
  USHORT             usChannelGroup;
  USHORT             usFlags;
  REFERENCE_TIME     ullPresTime100ns;
  ULONGLONG          ullBytePosition;
  _DMUS_KERNEL_EVENT *pNextEvt;
  union {
    BYTE               abData[sizeof(PBYTE)];
    PBYTE              pbData;
    _DMUS_KERNEL_EVENT *pPackageEvt;
  } uData;
} DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT;

멤버

bReserved

미니포트 드라이버는 이 멤버를 수정해서는 안 됩니다. 다음에 사용하도록 예약됩니다. 사용하지 마십시오.

cbStruct

미니포트 드라이버는 이 멤버를 수정해서는 안 됩니다. 이 멤버는 DMUS_KERNEL_EVENT 구조체의 크기를 지정하고 나중에 변경될 수 있습니다.

cbEvent

uData에서 참조하는 이벤트 바이트의 정의되지 않은 수를 지정합니다.

usChannelGroup

이 이벤트를 수신하거나 시작한 채널 그룹(16개의 MIDI 채널 집합)을 지정합니다. 이는 대상 MIDI 디바이스(미니포트 드라이버) 내에서만 고유합니다.

usFlags

이벤트가 패키지인지 여부와 이 이벤트가 메시지를 종료하는지 여부를 지정합니다. 패키지는 원자성으로 처리해야 하는 이벤트 목록을 캡슐화합니다. 이 멤버는 다음 플래그 비트 중 하나 이상의 비트 OR로 설정할 수 있는 비트 필드입니다.

DMUS_KEF_EVENT_COMPLETE(0)

전체 메시지가 uData.abData 또는 uData.pbData가 가리키는 버퍼에 포함된 메시지를 지정합니다. 전자는 모든 짧은 메시지를 포함하며 잠재적으로 매우 간단한 SysEx 메시지(Microsoft Windows SDK 설명서 참조)도 포함할 수 있습니다. 64비트 버전의 Windows에서는 sizeof(PBYTE)가 4가 아닌 8이 될 수 있습니다.

DMUS_KEF_EVENT_INCOMPLETE

이 이벤트가 불완전한 패키지 또는 SysEx 메시지임을 지정합니다(Windows SDK 설명서 참조). 이 플래그는 메시지가 이 이벤트 이후에도 계속되도록 지정합니다. MIDI 캡처 중에 미니포트 드라이버는 이 플래그를 지정하여 "조리되지 않은" MIDI 이벤트(원시 MIDI 입력 데이터)를 캡처 싱크로 보낼 수 있습니다.

DMUS_KEF_PACKAGE_EVENT

이 이벤트가 패키지임을 지정합니다. uData.pPackageEvt 필드에는 원자성으로 처리해야 하는 이벤트 체인에 대한 포인터가 포함되어 있습니다.

ullPresTime100ns

이 이벤트의 프레젠테이션 시간을 지정합니다. 이 64비트 값은 100나노초 단위로 표현됩니다. master 시계를 사용하여 이 프레젠테이션 시간을 평가해야 합니다.

ullBytePosition

8 16

pNextEvt

목록의 다음 이벤트에 대한 포인터이거나 다음 이벤트가 없는 경우 NULL 입니다. 이렇게 하면 동일한 타임스탬프를 받은 메시지의 체인을 미니포트 드라이버에 쉽게 전달할 수 있습니다. 또한 자체 혼합을 수행하는 하드웨어는 한 번에 메시지 그룹을 받거나 전송할 수 있습니다.

uData

uData.abData[sizeof(PBYTE)]

이벤트 데이터의 cbEvent 바이트를 포함하는 바이트 배열입니다. 이벤트 데이터는 일반적으로 MIDI 상태 및 데이터 바이트입니다. cbEventsizeof(PBYTE)보다 작거나 같은 경우 uData의 이 멤버가 사용됩니다.

uData.pbData

이벤트 데이터의 cbEvent 바이트를 포함하는 버퍼에 대한 포인터입니다. 이벤트 데이터는 일반적으로 MIDI 상태 및 데이터 바이트입니다. uFlags가 DMUS_KEF_EVENT_COMPLETE 설정되고 cbEventsizeof(PBYTE)보다 큰 경우 uData의 이 멤버가 사용됩니다.

uData.pPackageEvt

DMUS_KERNEL_EVENT 구조체의 연결된 목록 형식인 이벤트 체인에 대한 포인터입니다. 이벤트 데이터는 일반적으로 MIDI 상태 및 데이터 바이트로 구성됩니다. 목록의 이벤트는 함께 처리되어야 합니다. uFlags가 DMUS_KEF_PACKAGE_EVENT 설정된 경우 uData의 이 멤버가 사용됩니다.

설명

DMUS_KERNEL_EVENT 구조는 DirectMusic에 대한 커널 스트리밍 지원을 제공하는 WDM 오디오 드라이버에서 사용됩니다.

MIDI 스트림을 캡처하는 동안 DMus 포트 드라이버는 IAllocatorMXF::GetMessage 메서드를 호출하여 캡처된 데이터를 저장할 DMUS_KERNEL_EVENT 구조를 검색합니다. MIDI 스트림을 렌더링하는 동안 포트 드라이버는 IMXF::P utMessage 메서드를 호출하여 읽기가 끝나면 DMUS_KERNEL_EVENT 구조를 삭제합니다. 자세한 내용은 MIDI 전송을 참조하세요.

MIDI 캡처의 경우 DMUS_KERNEL_EVENT 구조체를 단일, 다중 또는 조각적인 MIDI 메시지로 패키지할 수 있습니다. 단일 완전한 MIDI 메시지가 아닌 경우 usFlags 멤버를 DMUS_KEF_EVENT_INCOMPLETE 설정해야 합니다. 이 구조체에는 다음도 포함됩니다.

  • master 클록을 기준으로 하는 타임스탬프(ullPresTime100Ns)
  • 확장 채널 정보(usChannelGroup)
올바른 DLS 계측에 대한 매핑은 의 세 배에서 암시적입니다.

<pin, channel_group, 채널>

상태 KSSTATE_PAUSE 및 KSSTATE_STOP 동안 프레젠테이션 시간이 진행되지 않으며 KSSTATE_STOP 동안 다시 설정됩니다. 자세한 내용은 KS 클록을 참조하세요.

요구 사항

요구 사항
헤더 dmusicks.h(Dmusicks.h 포함)

추가 정보

IAllocatorMXF::GetMessage

IMXF::P utMessage