struktur DMUS_KERNEL_EVENT (dmusicks.h)

Struktur DMUS_KERNEL_EVENT digunakan untuk mengemas acara musik bertanda waktu.

Sintaks

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;

Anggota

bReserved

Driver miniport tidak boleh mengubah anggota ini. Disiapkan untuk penggunaan masa mendatang. Jangan gunakan.

cbStruct

Driver miniport tidak boleh mengubah anggota ini. Anggota ini menentukan ukuran struktur DMUS_KERNEL_EVENT itu sendiri dan dapat berubah di masa depan.

cbEvent

Menentukan jumlah byte peristiwa yang tidak dikelilingi yang dirujuk oleh uData.

usChannelGroup

Menentukan grup saluran mana (set 16 saluran MIDI) yang menerima atau berasal dari peristiwa ini. Ini hanya unik dalam perangkat MIDI target (driver miniport).

usFlags

Menentukan apakah suatu peristiwa adalah paket dan apakah kejadian ini menyimpulkan pesan. Paket merangkum daftar peristiwa yang harus ditangani secara atomik. Anggota ini adalah bitfield yang dapat diatur ke bitwise ATAU dari satu atau beberapa bit bendera berikut:

DMUS_KEF_EVENT_COMPLETE (nol)

Menentukan pesan di mana seluruh pesan terkandung baik di uData.abData atau dalam buffer yang ditujukkan oleh uData.pbData. Yang pertama mencakup semua pesan singkat, dan berpotensi menyertakan pesan SysEx yang sangat singkat (lihat dokumentasi Microsoft Windows SDK) juga. Perlu diingat bahwa sizeof (PBYTE) bisa 8, bukan 4 pada Windows versi 64-bit.

DMUS_KEF_EVENT_INCOMPLETE

Menentukan bahwa kejadian ini adalah paket yang tidak lengkap atau pesan SysEx (lihat dokumentasi Windows SDK). Bendera ini menentukan bahwa pesan berlanjut di luar kejadian ini. Selama pengambilan MIDI, driver miniport dapat mengirim peristiwa MIDI "tidak dimasak" (data input MIDI mentah) ke sink pengambilan dengan menentukan bendera ini.

DMUS_KEF_PACKAGE_EVENT

Menentukan bahwa kejadian ini adalah paket. Bidang uData.pPackageEvt berisi penunjuk ke rantai peristiwa yang harus ditangani secara atomik.

ullPresTime100ns

Menentukan waktu presentasi untuk acara ini. Nilai 64-bit ini dinyatakan dalam unit 100 nanodetik. Jam master harus digunakan untuk mengevaluasi waktu presentasi ini.

ullBytePosition

8 16

pNextEvt

Arahkan ke peristiwa berikutnya dalam daftar, atau NULL jika tidak ada peristiwa yang mengikuti. Ini memfasilitasi rantai yang lewat dari pesan bertanda waktu yang identik ke driver miniport. Selain itu, perangkat keras yang melakukan pencampurannya sendiri dapat menerima atau mengirimkan grup pesan pada satu waktu.

uData

uData.abData[sizeof(PBYTE)]

Array byte yang berisi byte data peristiwa cbEvent . Data peristiwa biasanya berstatus MIDI dan byte data. Anggota uData ini digunakan jika cbEvent kurang dari atau sama dengan sizeof(PBYTE).

uData.pbData

Pointer ke buffer yang berisi byte cbEvent dari data peristiwa. Data peristiwa biasanya berstatus MIDI dan byte data. Anggota uData ini digunakan jika uFlags diatur ke DMUS_KEF_EVENT_COMPLETE dan cbEvent lebih besar dari sizeof (PBYTE).

uData.pPackageEvt

Arahkan ke rantai peristiwa, yang berupa daftar struktur DMUS_KERNEL_EVENT yang ditautkan. Data peristiwa biasanya terdiri dari status MIDI dan byte data. Peristiwa dalam daftar akan ditangani bersama-sama. Anggota uData ini digunakan jika uFlags diatur ke DMUS_KEF_PACKAGE_EVENT.

Keterangan

Struktur DMUS_KERNEL_EVENT digunakan oleh driver audio WDM yang menyediakan dukungan streaming kernel untuk DirectMusic.

Saat menangkap aliran MIDI, driver port DMus memanggil metode IAllocatorMXF::GetMessage untuk mengambil struktur DMUS_KERNEL_EVENT untuk menyimpan data yang diambil. Saat merender aliran MIDI, driver port memanggil metode IMXF::P utMessage untuk membuang struktur DMUS_KERNEL_EVENT saat selesai membacanya. Untuk informasi selengkapnya, lihat Transportasi MIDI.

Dalam kasus pengambilan MIDI, struktur DMUS_KERNEL_EVENT dapat dimas dengan pesan MIDI tunggal, ganda, atau terfragmentasi. Anggota usFlags harus diatur ke DMUS_KEF_EVENT_INCOMPLETE kecuali itu adalah satu pesan MIDI lengkap. Struktur ini juga berisi:

  • Stempel waktu relatif terhadap jam master (ullPresTime100Ns)
  • Informasi saluran yang diperluas (usChannelGroup)
Pemetaan ke instrumen DLS yang benar bersifat implisit dalam tiga

<pin, channel_group, saluran>

Waktu presentasi tidak maju selama status KSSTATE_PAUSE dan KSSTATE_STOP, dan diatur ulang selama KSSTATE_STOP. Untuk informasi selengkapnya, lihat Jam KS.

Persyaratan

Persyaratan Nilai
Header dmusicks.h (termasuk Dmusicks.h)

Lihat juga

IAllocatorMXF::GetMessage

IMXF::P utMessage