Interface du pilote Miniport DirectMusic
L’interface du pilote miniport DMus est basée sur l’interface du pilote de miniport MIDI, mais elle ajoute les extensions suivantes pour prendre en charge les synthétiseurs avancés :
DLS télécharge plus de 16 canaux par instance
Séquencement d’événements de note dans le matériel
L’interface du pilote miniport DMus diffère de l’interface du pilote miniport MIDI de plusieurs façons. Un pilote miniport DMus implémente l’interface IMiniportDMus par opposition à IMiniportMidi. Cette interface est similaire à IMiniportMidi, mais la méthode IMiniportDMus ::NewStream crée une interface IMXF (filtre de transformation MIDI) et se connecte à une interface IAllocatorMXF dans le pilote de port DMus, au lieu d’implémenter une interface IMiniportMidiStream . IAllocatorMXF et IMXF encapsulent les appels GetMessage et PutMessage standard (voir IAllocatorMXF ::GetMessage et IMXF ::P utMessage). Ces appels traitent des événements empaquetés plutôt que des octets MIDI bruts.
Le pilote miniport DMus pour un synthétiseur peut implémenter tout ou partie des propriétés DirectMusic. Ces propriétés permettent au système de gérer les téléchargements DLS et les allocations de canaux pour l’appareil. Le fichier dmusprop.h header définit des éléments de propriété spécifiques à DirectMusic. Pour obtenir la liste de ces propriétés, consultez KSPROPSETID_Synth et KSPROPSETID_Synth_Dls.
Les pilotes miniport DMus sont censés autoriser la création de plusieurs instances de broches. Chaque broche instance agit comme un synthétiseur virtuel et contient un ensemble de canaux et de téléchargements DLS indépendamment des autres instances de broche.
Certaines des propriétés synthé décrites dans Les ensembles de propriétés de pilotes audio agissent sur un instance de broche, tandis que d’autres sont globales. Pour traiter les propriétés globales, le synthétiseur doit avoir un nœud de synthétiseur dans sa topologie. La description de chaque élément de propriété indique si cet élément est envoyé au nœud du synthétiseur ou à une broche instance. Pour chaque élément matériel prenant en charge la synthèse, il existe un objet pilote de port et un objet pilote miniport, comme illustré dans la figure suivante.
L’objet pilote de port expose une instance d’une interface IPortDMus, qui est conservée par l’objet pilote miniport. Le pilote miniport exporte une instance d’une interface IMiniportDMus, qui est conservée par le pilote de port. Pour chaque broche instanciée, le pilote de port demande une interface IMXF correspondante. La communication entre le système et cette instance est la combinaison de demandes de propriétés adressées à la broche et d’événements circulant vers ou à partir de l’interface de flux IMXF.
Deux objets doivent être passés au pilote miniport lors de sa création :
Horloge
Objet Allocator
L’horloge est très importante pour les opérations de rendu et de capture. Le pilote miniport doit restituer les notes à l’heure spécifiée ; lorsque le pilote miniport lit dans des données MIDI, il doit connaître l’heure afin qu’il puisse horodater l’événement du noyau. Pour plus d’informations, consultez Horloges de latence.
L’objet d’allocator , qui a une interface IAllocatorMXF , est utilisé comme pool de mémoire pour recycler la mémoire. Tous les messages MIDI du système sont alloués à partir de ce pool commun. L’objet d’allocation doit être utilisé pour créer ou détruire les messages individuels.
Cette section comprend :
Demandes d’éléments de propriété de pilote Miniport