KSMUSICFORMAT 구조체(ksmedia.h)

KSMUSICFORMAT 구조는 WDM 오디오 디바이스에서 입력하고 출력하는 MIDI 데이터에 대한 정보를 보내고 받는 데 사용됩니다.

구문

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

멤버

TimeDeltaMs

이 일련의 MIDI 데이터 바이트를 재생해야 하는 시기를 나타냅니다. 버퍼의 첫 번째 KSMUSICFORMAT 구조체인 경우 이 필드는 KSSTREAM_HEADER 구조체의 PresentationTime에서 델타(시간 변경, 밀리초)를 나타냅니다. 그렇지 않으면 필드는 이전 메시지(KSMUSICFORMAT 구조체)의 델타 오프셋(밀리초)을 나타냅니다. 이 시간이 과거이면 메시지가 즉시 재생됩니다.

ByteCount

이 구조를 따르는 데이터의 바이트 수를 지정합니다. 후속 구조체 또는 속성은 DWORD 정렬되어야 하며 추가 공백 또는 사용된 바이트를 허용할 수 있으므로 ByteCount 는 실제 바이트 수여야 하며 데이터 구조를 구분하는 패딩을 포함하지 않아야 합니다.

설명

이 구조는 MIDI 입력 및 출력 스트림에 대한 정보가 포함된 IRP를 보내고 받는 데 사용됩니다. IRP 자체는 SystemBuffer 필드에 스트리밍 드라이버 핀에서 읽거나 쓸 데이터 패킷의 헤더 역할을 하는 KSSTREAM_HEADER 구조체에 대한 포인터를 포함합니다. KS 스트림 헤더는 해당 데이터 필드에 데이터를 포함하는 버퍼에 대한 포인터를 포함합니다. 해당 버퍼의 데이터는 메시지 시퀀스로 구성되며, 각 메시지는 KSMUSICFORMAT 구조이며 그 다음에는 몇 바이트의 데이터가 바로 뒤따릅니다.

이러한 IRP의 타임스탬프는 항상 연속적으로 발급된 IRP에서 증가합니다. 그러나 시퀀스의 각 IRP는 다음 IRP의 서비스가 시작되기 전에 완전히 서비스되므로 시간도 항상 IRP 간에 증가해야 합니다. 이는 다음 예제에 설명된 대로 비정상적인 상황으로 이어질 수 있습니다.

작업 Description
IRP #1 PresentationTime = 123밀리초
메시지 #1 TimeDeltaMs: 0 123밀리초 단위로 재생됩니다.
메시지 #2 TimeDeltaMs: 1 124밀리초 단위로 재생됩니다.
메시지 #3 TimeDeltaMs: 7 131밀리초로 재생됩니다.
IRP #2 PresentationTime = 120밀리초
메시지 #1 TimeDeltaMs: 5 125밀리초로 재생되어야 하지만 실제로는 131밀리초로 재생됩니다. 이 IRP는 131밀리초의 이전 IRP가 완료될 때까지 처리되지 않습니다.
메시지 #2 TimeDeltaMs: 15 140밀리초 단위로 재생됩니다.

요구 사항

요구 사항
헤더 ksmedia.h(Ksmedia.h 포함)

추가 정보

KSSTREAM_HEADER