Négociation de format
Une fois qu’une application a lancé le traitement audio, le générateur de graphes configure les sAPOs dans un graphique audio et initialise également les sAPOs. Le service audio négocie ensuite avec le sAPO LFX pour établir le format des données audio à l’entrée et à la sortie de l’objet sAPO. Ce processus de négociation est appelé négociation de format.
Tous les SPO qui fournissent des effets de système 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 des 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 de l’objet SAPO LFX sur le format float32 par défaut. Le service audio appelle ensuite la méthode IAudioProcessingObject::IsInputFormatSupported de l’objet SAPO LFX, 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 à celui suggéré. Si l’objet SAPO LFX ne peut pas prendre en charge le format suggéré et n’a pas de correspondance étroite, il retourne APOERR_FORMAT_NOT_SUPPORTED. L’objet SAPO GFX fonctionne avec le format de sortie de l’objet SAPO LFX. Par conséquent, l’objet sAPO GFX n’est pas impliqué dans le processus de négociation de 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’objet sAPO personnalisé d’habillage en réponse à un appel à la méthode LockForProcess , le 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’instancier 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 du fonctionnement du service audio, les SPO 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’inscription de l’objet sAPO personnalisé. Si vous spécifiez cet indicateur, l’objet sAPO Windows Vista LFX ne peut pas effectuer le remplissage du haut-parleur, la virtualisation du casque ou l’environnement virtuel. En outre, votre sAPO personnalisé ne sera pas en mesure de réduire le mixage des flux audio. Par exemple, votre sAPO personnalisé ne pourra pas mélanger un flux audio 5.1 vers un flux audio stéréo à deux canaux.