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 설명서 참조)도 포함됩니다. Windows 64비트 버전에서는 sizeof(PBYTE)가 4가 아닌 8이 될 수 있습니다.
DMUS_KEF_EVENT_INCOMPLETE
이 이벤트가 불완전한 패키지 또는 SysEx 메시지임을 지정합니다(Windows SDK 설명서 참조). 이 플래그는 메시지가 이 이벤트 이후에도 계속되도록 지정합니다. MIDI 캡처 중에 미니포트 드라이버는 이 플래그를 지정하여 "조리되지 않은" MIDI 이벤트(원시 MIDI 입력 데이터)를 캡처 싱크로 보낼 수 있습니다.
DMUS_KEF_PACKAGE_EVENT
이 이벤트가 패키지임을 지정합니다. uData.pPackageEvt 필드에는 원자성으로 처리해야 하는 이벤트 체인에 대한 포인터가 포함되어 있습니다.
ullPresTime100ns
이 이벤트의 프레젠테이션 시간을 지정합니다. 이 64비트 값은 100나노초 단위로 표현됩니다. 마스터 클록은 이 프레젠테이션 시간을 평가하는 데 사용해야 합니다.
ullBytePosition
8 16
pNextEvt
목록의 다음 이벤트에 대한 포인터이거나 다음 이벤트가 없는 경우 NULL 입니다. 이렇게 하면 동일한 타임스탬프를 적용한 메시지 체인을 미니포트 드라이버에 쉽게 전달할 수 있습니다. 또한 자체 혼합을 수행하는 하드웨어는 한 번에 메시지 그룹을 수신하거나 전송할 수 있습니다.
uData
uData.abData
이벤트 데이터의 cbEvent 바이트를 포함하는 바이트 배열입니다. 이벤트 데이터는 일반적으로 MIDI 상태 및 데이터 바이트입니다. cbEvent가 sizeof(PBYTE)보다 작거나 같은 경우 uData의 이 멤버가 사용됩니다.
uData.pbData
이벤트 데이터의 cbEvent 바이트를 포함하는 버퍼에 대한 포인터입니다. 이벤트 데이터는 일반적으로 MIDI 상태 및 데이터 바이트입니다. uFlags가 DMUS_KEF_EVENT_COMPLETE 설정되고 cbEvent가 sizeof(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 설정해야 합니다. 이 구조에는 다음도 포함됩니다.
- 마스터 클록을 기준으로 하는 타임스탬프(ullPresTime100Ns)
- 확장 채널 정보(usChannelGroup)
<pin, channel_group, 채널>
프레젠테이션 시간은 상태 KSSTATE_PAUSE 및 KSSTATE_STOP 진행되지 않으며 KSSTATE_STOP 동안 다시 설정됩니다. 자세한 내용은 KS 클록을 참조하세요.
요구 사항
| 헤더 | dmusicks.h(Dmusicks.h 포함) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기