Partager via


Structure KSMUSICFORMAT (ksmedia.h)

La structure KSMUSICFORMAT est utilisée pour envoyer et recevoir des informations sur les données MIDI 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 (en millisecondes) de la PresentationTime dans la structure KSSTREAM_HEADER. Sinon, le champ représente le décalage delta (en millisecondes) du message précédent (structure KSMUSICFORMAT). Si cette fois est dans le passé, le message est lu immédiatement.

ByteCount

Spécifie le nombre d’octets de données qui suivent cette structure. Étant donné que la structure 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 n’inclure aucun remplissage séparant les structures de données.

Remarques

Cette structure permet d’envoyer et de recevoir des IRPs contenant des informations sur les flux d’entrée et de sortie MIDI. L’IRP lui-même contient dans son SystemBuffer champ un pointeur vers une structure KSSTREAM_HEADER, qui sert d’en-tête pour un paquet de données à lire ou écrire dans une broche de pilote de diffusion en continu. 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 étant une structure KSMUSICFORMAT qui est immédiatement suivie d’un certain nombre d’octets de données.

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

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

Exigences

Exigence Valeur
d’en-tête ksmedia.h (include Ksmedia.h)

Voir aussi

KSSTREAM_HEADER