структура 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
Указывает, является ли событие пакетом и завершает ли это событие сообщение. Пакет инкапсулирует список событий, которые должны рассматриваться атомарно. Этот элемент представляет собой битовое поле, которое может быть установлено на битовую или одну или несколько из следующих битов флага:
DMUS_KEF_EVENT_COMPLETE (ноль)
Указывает сообщения, в которых все сообщение содержится в uData.abData или в буфере, на который указывает uData.pbData. Бывший включает все короткие сообщения и может содержать очень краткие сообщения SysEx (см. документацию по пакету SDK для Microsoft Windows). Помните, что размер(PBYTE) может быть 8 вместо 4 в 64-разрядных версиях Windows.
DMUS_KEF_EVENT_INCOMPLETE
Указывает, что это событие является неполным пакетом или сообщением SysEx (см. документацию по пакету SDK для Windows). Этот флаг указывает, что сообщение продолжается за пределами этого события. Во время записи MIDI драйвер минипорта может отправлять события MIDI (необработанные входные данные MIDI) в приемник захвата, указав этот флаг.
DMUS_KEF_PACKAGE_EVENT
Указывает, что это событие является пакетом. Поле uData.pPackageEvt содержит указатель на цепочку событий, с которыми следует заниматься атомарным образом.
ullPresTime100ns
Указывает время презентации для этого события. Это 64-разрядное значение выражается в 100-наносекундах единиц. Для оценки этого времени презентации следует использовать главные часы.
ullBytePosition
8 16
pNextEvt
Указатель на следующее событие в списке или NULL, если событие не следует. Это упрощает передачу цепочки идентичных сообщений с меткой времени в минипорт-драйвер. Кроме того, оборудование, которое выполняет собственное сочетание, может получать или передавать группы сообщений одновременно.
uData
uData.abData[sizeof(PBYTE)]
Массив байтов, содержащий cbEvent байт данных события. Данные события обычно являются состоянием MIDI и байтами данных. Этот элемент uData используется, если cbEvent меньше или равно размеру(PBYTE).
uData.pbData
Указатель на буфер, содержащий cbEvent байт данных события. Данные события обычно являются состоянием MIDI и байтами данных. Этот элемент uData используется, если uFlags установлено значение DMUS_KEF_EVENT_COMPLETE и cbEvent больше размера(PBYTE).
uData.pPackageEvt
Указатель на цепочку событий, которая находится в виде связанного списка DMUS_KERNEL_EVENT структур. Данные события обычно состоят из состояния MIDI и байтов данных. События в списке должны обрабатываться вместе. Этот элемент uData используется, если uFlags задано значение DMUS_KEF_PACKAGE_EVENT.
Замечания
Структура DMUS_KERNEL_EVENT используется звуковыми драйверами WDM, которые обеспечивают поддержку потоковой передачи ядра для DirectMusic.
При записи потока MIDI драйвер порта DMus вызывает метод IAllocatorMXF::GetMessage для получения структур DMUS_KERNEL_EVENT для хранения захваченных данных. При отрисовке потока MIDI драйвер портов вызывает метод IMXF::P utMessage, чтобы отменить DMUS_KERNEL_EVENT структуры по мере завершения их чтения. Дополнительные сведения см. в транспорта MIDI.
В случае записи MIDI структура DMUS_KERNEL_EVENT может быть упаковано с одними, несколькими или фрагментарными сообщениями MIDI. Элемент usFlags должен иметь значение DMUS_KEF_EVENT_INCOMPLETE, если это не одно полное сообщение MIDI. Эта структура также содержит следующее:
- Метка времени относительно главных часов (ullPresTime100Ns)
- Расширенные сведения о канале (usChannelGroup)
< закрепление, channel_group, канала>
Время презентации не выполняется во время KSSTATE_PAUSE состояний и KSSTATE_STOP и сбрасывается во время KSSTATE_STOP. Дополнительные сведения см. в разделе часов KS.
Требования
Требование | Ценность |
---|---|
заголовка | dmusicks.h (include Dmusicks.h) |