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


Структура KSMUSICFORMAT (ksmedia.h)

Структура KSMUSICFORMAT используется для отправки и получения сведений о данных MIDI, которые являются входными и исходящими на звуковые устройства WDM.

Синтаксис

typedef struct {
  ULONG TimeDeltaMs;
  ULONG ByteCount;
} KSMUSICFORMAT, *PKSMUSICFORMAT;

Члены

TimeDeltaMs

Указывает, когда должна воспроизводиться эта серия байтов данных MIDI. Если это первая структура KSMUSICFORMAT в буфере, это поле представляет разницу (изменение времени в миллисекундах) от PresentationTime в структуре KSSTREAM_HEADER . В противном случае поле представляет разностное смещение (в миллисекундах) от предыдущего сообщения (структура KSMUSICFORMAT). Если это время прошло, сообщение воспроизводится немедленно.

ByteCount

Указывает количество байтов данных, которые соответствуют этой структуре. Так как последующая структура или свойства должны быть выровнены по DWORD и могут допускать дополнительные пробелы или используемые байты, ByteCount должен быть фактическим числом байтов и не включать заполнение, разделяющее структуры данных.

Комментарии

Эта структура используется для отправки и получения irP, содержащих сведения о входных и выходных потоках MIDI. Само IRP содержит в своем поле SystemBuffer указатель на структуру KSSTREAM_HEADER, которая служит заголовком для пакета данных, который должен считываться или записываться в пин-код драйвера потоковой передачи. Заголовок потока KS содержит в поле Data указатель на буфер, содержащий данные. Данные в этом буфере состоят из последовательности сообщений, каждое из которых представляет собой структуру KSMUSICFORMAT, за которой сразу же следует некоторое количество байтов данных.

Метки времени в этих IRP всегда увеличиваются в последовательно выдаваемых IRP. Тем не менее, так как каждая IRP в последовательности полностью обслуживается до начала обслуживания следующей IRP, время также должно всегда увеличиваться в irP. Это может привести к аномальной ситуации, как описано в следующем примере.

Действие Описание
IRP No 1 PresentationTime = 123 миллисекунда
Сообщение No 1 TimeDeltaMs: 0 Будет воспроизводиться в 123 миллисекундах.
Сообщение 2 TimeDeltaMs: 1 Будет воспроизводиться в 124 миллисекундах.
Сообщение No 3 TimeDeltaMs: 7 Будет воспроизводиться в 131 миллисекундах.
IRP 2 PresentationTime = 120 миллисекунда
Сообщение No 1 TimeDeltaMs: 5 Должно быть сыграно в 125 миллисекундах, но на самом деле играется в 131 миллисекунды. Эта IRP не обрабатывается до завершения предыдущего IRP в 131 миллисекундах.
Сообщение 2 TimeDeltaMs: 15 Будет играться в 140 миллисекундах.

Требования

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

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

KSSTREAM_HEADER