структура 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 (см. также Microsoft Windows SDK документации). Помните, что sizeof (PBYTE) может быть 8 вместо 4 в 64-разрядных версиях Windows.
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 и байты данных. Этот член uData используется, если cbEvent меньше или равен sizeof(PBYTE).
uData.pbData
Указатель на буфер, содержащий байты событий cbEvent . Данные события обычно представляют собой состояние MIDI и байты данных. Этот член uData используется, если параметру uFlags присвоено значение DMUS_KEF_EVENT_COMPLETE а cbEvent больше , чем sizeof(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 Transport.
В случае с захватом MIDI структура DMUS_KERNEL_EVENT может быть упакована с одним, несколькими или фрагментарными MIDI-сообщениями. Для элемента usFlags должно быть задано значение DMUS_KEF_EVENT_INCOMPLETE, если это не одно полное сообщение MIDI. Эта структура также содержит:
- Метка времени относительно master часов (ullPresTime100Ns)
- Сведения о расширенном канале (usChannelGroup)
<pin, channel_group, channel>
Время презентации не перемещается во время состояний KSSTATE_PAUSE и KSSTATE_STOP и сбрасывается во время KSSTATE_STOP. Дополнительные сведения см. в разделе Часы KS.
Требования
Требование | Значение |
---|---|
Заголовок | dmusicks.h (включая Dmusicks.h) |