Partager via


Mise en forme de la négociation

Une fois qu’une application lance le traitement audio, le générateur de graphiques configure les sAPOs dans un graphique audio et initialise également les SAPOs. Le service audio négocie ensuite avec le LFX sAPO pour établir le format des données audio aux entrées et sorties de l'sAPO. Ce processus de négociation est appelé négociation de format.

Tous les SAPO qui fournissent des effets de systèmes audio pour Windows Vista doivent avoir certaines interfaces et méthodes. Les méthodes utilisées par le sAPO et le moteur audio pour négocier le format de données sont les suivantes : la méthode IsInputFormatSupported de l’interface IAudioProcessingObject et les méthodes LockForProcess et UnlockForProcess de l’interface IAudioProcessingObjectConfiguration .

Pour lancer la négociation de format, le service audio définit d’abord la sortie du SAPO LFX au format float32 par défaut. Le service audio appelle ensuite la méthode IAudioProcessingObject ::IsInputFormatSupported de l’objet LFX sAPO, suggère le format par défaut et surveille la réponse HRESULT de cette méthode. Si l’objet SAPO LFX peut prendre en charge le format suggéré, il retourne S_OK, ainsi qu’une référence au format pris en charge. Si l’objet SAPO LFX ne peut pas prendre en charge le format suggéré, il retourne S_FALSE avec une référence à un format qui correspond le plus proche à celui suggéré. Si le sAPO LFX ne peut pas prendre en charge le format suggéré et n’a pas de correspondance proche, il retourne APOERR_FORMAT_NOT_SUPPORTED. L’objet sAPO GFX fonctionne avec le format de sortie de l’objet SAPO LFX. Par conséquent, le sAPO GFX n’est pas impliqué dans le processus de négociation du format.

Une fois qu’un format de données est sélectionné pour traiter les données audio, le générateur de graphiques de traitement audio appelle la méthode IAudioProcessingObjectConfiguration ::LockForProcess des sAPOs, ce qui entraîne la finalisation de la sélection du format.

Si l’objet sAPO Windows Vista retourne une erreur à l’enveloppe personnalisée sAPO en réponse à un appel à la méthode LockForProcess, l’objet sAPO personnalisé doit gérer l’erreur de la même façon qu’il gère une erreur de CoCreateInstance lorsqu’une tentative d’instanciation d’un sAPO échoue. Reportez-vous au fichier Spkrfill.cpp pour plus d’informations sur la façon de remplacer la méthode LockForProcess fournie par le système.

En raison de la façon dont le service audio fonctionne, les SAPOs LFX et GFX doivent être en mesure de répondre indépendamment les uns des autres aux requêtes du service audio concernant les formats de données.

Important Lorsque vous implémentez un sAPO personnalisé qui encapsule un sAPO Windows Vista LFX, ne spécifiez pas l’indicateur APO_FLAG_FRAMESPERSECOND_MUST_MATCH dans les propriétés d'enregistrement de l'objet sAPO personnalisé. Si vous spécifiez cet indicateur, le sAPO Windows Vista LFX ne pourra pas effectuer le remplissage des enceintes, la virtualisation casque ou le surround virtuel. De plus, votre sAPO personnalisé ne pourra pas effectuer de mixage vers le bas des flux audio. Par exemple, votre sAPO personnalisé ne pourra pas convertir un flux audio 5.1 en un flux audio stéréo à deux canaux.