Partager via


Structure KSMUSICFORMAT (ksmedia.h)

La structure KSMUSICFORMAT est utilisée pour envoyer et recevoir des informations sur les données MIDI qui sont entrées et sorties vers des périphériques audio WDM.

Syntaxe

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

Membres

TimeDeltaMs

Indique quand cette série d’octets de données MIDI doit être lue. S’il s’agit de la première structure KSMUSICFORMAT dans la mémoire tampon, ce champ représente le delta (changement d’heure, en millisecondes) de presentationTime dans la structure KSSTREAM_HEADER . Sinon, le champ représente le décalage différentiel (en millisecondes) du message précédent (structure KSMUSICFORMAT). Si cette heure est passée, le message est lu immédiatement.

ByteCount

Spécifie le nombre d’octets de données qui suivent cette structure. Étant donné que la ou les propriétés suivantes doivent être alignées sur DWORD et peuvent autoriser des espaces supplémentaires ou des octets utilisés, ByteCount doit être le nombre réel d’octets présents et ne pas inclure de remplissage séparant les structures de données.

Remarques

Cette structure est utilisée pour envoyer et recevoir des IRP contenant des informations sur les flux d’entrée et de sortie MIDI. L’IRP proprement dit contient dans son champ SystemBuffer un pointeur vers une structure de KSSTREAM_HEADER, qui sert d’en-tête pour un paquet de données qui doit être lu ou écrit dans une broche de pilote de streaming. L’en-tête de flux KS contient dans son champ Données un pointeur vers la mémoire tampon qui contient les données. Les données de cette mémoire tampon se composent d’une séquence de messages, chacun d’eux étant une structure KSMUSICFORMAT immédiatement suivie d’un certain nombre d’octets de données.

Les horodatages dans ces IRP augmentent toujours entre les irps émis successivement. Toutefois, étant donné que chaque IRP dans une séquence est entièrement mis en service avant le début de la maintenance de l’IRP suivant, le temps doit également toujours augmenter entre les IRP. Cela peut entraîner une situation anormale, comme décrit dans l’exemple suivant.

Action Description
IRP #1 PresentationTime = 123 millisecondes
Message n°1 TimeDeltaMs : 0 Sera lu à 123 millisecondes.
Message n°2 TimeDeltaMs : 1 Sera lu à 124 millisecondes.
Message n°3 TimeDeltaMs : 7 Sera lu à 131 millisecondes.
IRP #2 PresentationTime = 120 millisecondes
Message n°1 TimeDeltaMs : 5 Censé être lu à 125 millisecondes, mais est en fait lu à 131 millisecondes. Cette IRP n’est pas traitée tant que l’IRP précédent à 131 millisecondes n’est pas terminé.
Message n°2 TimeDeltaMs : 15 Sera lu à 140 millisecondes.

Configuration requise

Condition requise Valeur
En-tête ksmedia.h (incluez Ksmedia.h)

Voir aussi

KSSTREAM_HEADER