Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les filtres d’onde représentent des appareils qui affichent et/ou capturent des données audio numériques au format wave. Les applications accèdent généralement aux fonctionnalités de ces appareils via l’API DirectSound ou via les fonctions WaveOutXxx et waveInXxx de Microsoft Windows. Pour plus d’informations sur les formats d’onde que les pilotes audio WDM peuvent prendre en charge, consultez WAVEFORMATEX et WAVEFORMATEXTENSIBLE.
Un filtre de rendu d’ondes reçoit comme entrée un flux audio numérique d’ondes et génère un signal audio analogique (à un ensemble de haut-parleurs ou de mixeur externe) ou un flux audio numérique (vers un connecteur S/PDIF, par exemple).
Un filtre de capture d’ondes reçoit comme entrée un signal audio analogique (à partir d’un microphone ou d’une prise jack d’entrée) ou d’un flux numérique (à partir d’un connecteur S/PDIF, par exemple). Le même filtre génère un flux d’ondes contenant des données audio numériques.
Un filtre à onde unique peut effectuer simultanément le rendu et la capture. Ce type de filtre peut, par exemple, représenter un périphérique audio qui peut lire l’audio via un ensemble de haut-parleurs et enregistrer l’audio via un microphone en même temps. Sinon, le matériel de rendu d’ondes et de capture d’ondes peut être représenté sous forme de filtres d’onde distincts, comme décrit dans les sous-éléments audio dynamiques.
Un pilote d’adaptateur audio forme un filtre d’ondes en liant un pilote miniport wave, que le fournisseur de matériel implémente dans le cadre du pilote de l’adaptateur, avec un pilote de port d’onde, que le système implémente. Le pilote miniport gère toutes les opérations spécifiques au matériel pour le filtre d’ondes, et le pilote de port gère toutes les fonctions génériques de filtre d’ondes.
Le pilote système PortCls (Portcls.sys) implémente trois pilotes de port d’onde : WaveRT, WavePci et WaveCyclique.
Les trois types de filtre d’onde fonctionnent comme suit :
Un filtre WaveRT alloue une mémoire tampon pour les données d’onde et rend cette mémoire tampon directement accessible au client en mode utilisateur. La mémoire tampon peut se composer de blocs de mémoire contigus ou non contigus, en fonction des fonctionnalités matérielles de l’appareil vague. Le client accède à la mémoire tampon en tant que bloc contigu de mémoire virtuelle. La mémoire tampon est cyclique, ce qui signifie que lorsque le pointeur de lecture (pour rendu) ou d’écriture (pour la capture) atteint la fin de la mémoire tampon, il encapsule automatiquement le début de la mémoire tampon.
Un filtre WavePci accède directement à la mémoire tampon du client. Bien que le client accède à la mémoire tampon sous la forme d’un seul bloc contigu de mémoire virtuelle, le filtre WavePci doit accéder à la mémoire tampon sous la forme d’une série de blocs de mémoire potentiellement non incohérents. Les blocs contenant des parties successives du flux de rendu ou de capture sont mis en file d’attente sur l’appareil. Lorsque le pointeur de lecture ou d’écriture de l’appareil atteint la fin d’un bloc, il passe au début du bloc suivant dans la file d’attente.
Un filtre WaveCyclique alloue une mémoire tampon composée d’un bloc de mémoire contiguë unique à utiliser comme sortie (pour le rendu) ou une mémoire tampon d’entrée (pour la capture). Cette mémoire tampon est cyclique. Étant donné que la mémoire tampon n’est pas directement accessible au client, le pilote doit copier des données entre la mémoire tampon cyclique du pilote et la mémoire tampon en mode utilisateur du client.
WaveRT est préféré à WavePci et WaveCyclique. WavePci et WaveCyclique ont été utilisés avec les versions antérieures de Windows.
Un filtre WaveRT peut représenter un périphérique audio qui réside sur un bus système, tel que PCI ou PCI Express. L’avantage principal d’un filtre WaveRT sur un filtre WaveCyclique ou WavePci est qu’un filtre WaveRT permet à un client en mode utilisateur d’échanger des données audio directement avec le matériel audio. En revanche, les filtres WaveCyclique et WavePci nécessitent toutes deux une intervention logicielle périodique par le pilote, ce qui augmente la latence du flux audio. En outre, les appareils audio, qu'ils disposent ou non de capacités DMA de dispersion/agrégation, peuvent être représentés en tant que filtres WaveRT. Pour plus d’informations, consultez le livre blanc A Wave Port Driver for Real-Time Audio Streaming .
Filtres WaveRT
Un filtre WaveRT est implémenté sous forme de paire de pilotes port/miniport. Dans Windows Vista et versions ultérieures, une fabrique de filtre WaveRT crée un filtre WaveRT comme suit :
Il instancie un objet de pilote miniport WaveRT.
Il instancie un objet de pilote de port WaveRT en appelant PcNewPort avec la valeur GUID CLSID_PortWaveRT.
Il appelle la méthode IPort ::Init du pilote de port pour lier le pilote miniport au pilote de port.
L’exemple de code dans Subdevice Creation illustre ce processus. Les pilotes port et miniport communiquent entre eux via leurs interfaces IPortWaveRT et IMiniportWaveRT .
Pour plus d’informations, consultez le livre blanc A Wave Port Driver for Real-Time Audio Streaming .
Informations sur les versions précédentes de Windows
Informations wavecycliques pour les versions précédentes de Windows
Un filtre WaveCyclique peut représenter un périphérique audio qui se connecte à un bus système, tel que ISA, PCI, PCI Express ou PCMCIA. Comme l’indique le nom « WavePci », un filtre WavePci représente généralement un appareil qui se connecte à un bus PCI, bien que, en principe, un appareil WavePci puisse se connecter à un bus ISA, par exemple. Contrairement aux appareils plus simples pris en charge par WaveCyclic, un appareil pris en charge par WavePci doit avoir des fonctionnalités DMA de dispersion/récolte. Un appareil audio qui réside sur un bus PCI mais qui ne prend pas en charge le DMA de dispersion/rassemblement peut être représenté en tant que filtre WaveCyclic, mais pas en tant que filtre WavePci.
Informations WavePci pour les versions précédentes de Windows
Un appareil WavePci est en mesure d’effectuer des transferts DMA scatter/gather vers ou depuis des tampons qui peuvent être localisés à des adresses mémoire arbitraires et qui commencent et se terminent par des alignements d’octets arbitraires. En revanche, le matériel DMA d’un appareil WaveCyclique ne nécessite que la possibilité de déplacer des données vers ou à partir d’une mémoire tampon unique allouée par le pilote miniport de l’appareil. Un pilote miniport WaveCyclique est libre d’allouer une mémoire tampon cyclique qui répond aux fonctionnalités limitées de son canal DMA. Par exemple, le canal DMA d’un appareil WaveCyclique classique peut nécessiter une mémoire tampon qui répond aux restrictions suivantes :
La mémoire tampon se trouve dans une certaine région de l’espace d’adressage physique.
La mémoire tampon est contiguë en physique et dans l’espace d’adressage virtuel.
La mémoire tampon commence et se termine sur des limites de quatre ou huit octets.
En retour de cette simplicité, toutefois, un appareil WaveCyclique doit s’appuyer sur la copie logicielle de données vers ou à partir de la mémoire tampon cyclique, tandis qu’un appareil WavePci s’appuie sur les fonctionnalités de nuage de points/collecte de son matériel DMA pour éviter cette copie. Les irps qui fournissent des données audio d’onde à un appareil de rendu ou récupèrent des données d’un appareil de capture sont accompagnées de mémoires tampons de données, et chacune de ces mémoires tampons contient une partie du flux audio en cours de rendu ou de capture. Un appareil WavePci est en mesure d’accéder directement à ces mémoires tampons par le biais de ses moteurs DMA de concassage/rassemblement, tandis qu’un appareil WaveCyclic exige que les données soient copiées dans sa mémoire tampon cyclique depuis l’IRP, ou inversement.
Filtres WavePci
Remarque : Informations WavePci pour les versions précédentes de Windows
Un filtre WavePci est implémenté sous la forme d'une paire de pilotes port/miniport. Une fabrique de filtre WavePci crée un filtre WavePci comme suit :
Il instancie un objet pilote miniport WavePci.
Il instancie un objet de pilote de port WavePci en appelant PcNewPort avec la valeur GUID CLSID_PortWavePci.
Il appelle la méthode IPort ::Init du pilote de port pour lier le pilote miniport au pilote de port.
L’exemple de code dans Subdevice Creation illustre ce processus. Les pilotes port et miniport communiquent entre eux via leurs interfaces IPortWavePci et IMiniportWavePci .
Pour plus d’informations, consultez Problèmes d’implémentation pour les appareils WavePci.
Filtres wavecycliques
Remarque
Microsoft prend en charge un environnement diversifié et inclusif. Cet article contient des références à la terminologie que le guide de style Microsoft pour la communication sans biais reconnaît comme exclusion. Le mot ou l’expression est utilisé dans cet article pour la cohérence, car il apparaît actuellement dans le logiciel. Lorsque le logiciel est mis à jour pour supprimer la langue, cet article sera mis à jour pour être aligné.
Remarque : Informations wavecycliques pour les versions précédentes de Windows
Un filtre WaveCyclic est implémenté sous forme de paire de pilotes port/miniport. Une fabrique de filtre WaveCyclique crée un filtre WaveCyclique comme suit :
Il instancie un objet pilote miniport WaveCyclic.
Il instancie un objet de pilote de port WaveCyclic en appelant PcNewPort avec la valeur GUID CLSID_PortWaveCyclic.
Il appelle la méthode IPort ::Init du pilote de port pour lier le pilote miniport au pilote de port.
L’exemple de code dans Subdevice Creation illustre ce processus. Les pilotes port et miniport communiquent entre eux via leurs interfaces IPortWaveCyclique et IMiniportWaveCyclique .
La mémoire tampon cyclique du filtre WaveCyclique se compose toujours d’un bloc contigu de mémoire virtuelle. L’implémentation du pilote de port de la méthode IDmaChannel ::AllocateBuffer alloue toujours une mémoire tampon contiguë dans l’espace d’adressage de mémoire physique et virtuelle. Si, comme mentionné précédemment, le moteur DMA de l’appareil WaveCyclique impose des contraintes supplémentaires sur la mémoire tampon, le pilote miniport est libre d’implémenter sa propre méthode d’allocation de mémoire tampon pour répondre à ces contraintes.
Un pilote miniport WaveCyclique qui demande une mémoire tampon volumineuse (par exemple, huit pages mémoire contiguës physiquement) doit être prêt à se régler pour une taille de mémoire tampon plus petite si le système d’exploitation refuse la demande d’origine. Un appareil audio peut parfois être déchargé et rechargé pour rééquilibrer les ressources système (voir Arrêter un appareil pour rééquilibrer les ressources).
Un appareil WaveCyclique avec du matériel DMA intégré de gestion des bus est appelé appareil maître. Par ailleurs, un appareil WaveCyclique peut être un appareil subordonné sans fonctionnalités DMA intégrées. Un appareil subordonné doit s’appuyer sur le contrôleur DMA système pour effectuer les transferts de données dont il a besoin. Pour plus d’informations sur les appareils maîtres et subordonnés, consultez IDmaChannel et IDmaChannelSlave.
Un pilote miniport WaveCyclique peut implémenter son propre objet de canal DMA au lieu d’utiliser l’objet de canal DMA par défaut, qui est créé par l’une desméthodes New XxxDmaChannel du pilote de port :
IPortWaveCyclic::NewMasterDmaChannel
IPortWaveCyclic::NewSlaveDmaChannel
L’implémentation personnalisée d’IDmaChannel du pilote d’adaptateur peut effectuer une gestion personnalisée des données pour répondre à des contraintes matérielles spéciales. Par exemple, les fonctions Multimédia Windows utilisent des formats d’onde dans lesquels les exemples 16 bits sont toujours signés, mais le matériel de rendu audio peut être conçu pour utiliser des valeurs 16 bits non signées à la place. Dans ce cas, la méthode IDmaChannel ::CopyTo personnalisée du pilote peut être écrite pour convertir les valeurs sources signées en valeurs de destination non signées requises par le matériel. Bien que cette technique puisse être utile pour contourner les défauts de conception matérielle, elle peut également entraîner un coût important dans la surcharge logicielle.
Pour obtenir un exemple de pilote qui implémente son propre objet de canal DMA, consultez l’exemple de carte audio Sb16 dans les versions antérieures du WDK. Si la constante OVERRIDE_DMA_CHANNEL est définie sur TRUE, les instructions de compilation conditionnelle dans le code source permettent l’implémentation d’un objet IDmaChannel propriétaire, que le pilote utilise à la place de l’objet IDmaChannel par défaut à partir de l’appel IPortWaveCyclique ::NewXxxDmaChannel.