Поделиться через


структура 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)
Сопоставление с правильным инструментом DLS неявно в триплете

<pin, channel_group, channel>

Время презентации не перемещается во время состояний KSSTATE_PAUSE и KSSTATE_STOP и сбрасывается во время KSSTATE_STOP. Дополнительные сведения см. в разделе Часы KS.

Требования

Требование Значение
Заголовок dmusicks.h (включая Dmusicks.h)

См. также раздел

IAllocatorMXF::GetMessage

IMXF::P utMessage