Aushandlung formatieren

Nachdem eine Anwendung die Audioverarbeitung initiiert hat, konfiguriert der Graph-Generator die sAPOs in ein Audiodiagramm und initialisiert auch die sAPOs. Der Audiodienst verhandelt dann mit dem LFX sAPO, um das Format für die Audiodaten an der Ein- und Ausgabe des sAPO festzulegen. Dieser Aushandlungsprozess wird als Formatverhandlung bezeichnet.

Alle sAPOs, die Audiosystemeffekte für Windows Vista bereitstellen, müssen über bestimmte Schnittstellen und Methoden verfügen. Die Methoden, die vom sAPO und der Audio-Engine zum Aushandeln des Datenformats verwendet werden, sind: die IsInputFormatSupported-Methode der IAudioProcessingObject-Schnittstelle und die LockForProcess - und UnlockForProcess-Methoden der IAudioProcessingObjectConfiguration-Schnittstelle .

Zum Initiieren der Formataushandlung legt der Audiodienst zunächst die Ausgabe des LFX sAPO auf das standardmäßige float32-basierte Format fest. Der Audiodienst ruft dann die IAudioProcessingObject::IsInputFormatSupported-Methode des LFX sAPO auf, schlägt das Standardformat vor und überwacht die HRESULT-Antwort dieser Methode. Wenn der LFX sAPO das vorgeschlagene Format unterstützen kann, gibt es S_OK zusammen mit einem Verweis auf das unterstützte Format zurück. Wenn der LFX sAPO das vorgeschlagene Format nicht unterstützen kann, gibt er S_FALSE zusammen mit einem Verweis auf ein Format zurück, das dem vorgeschlagenen Format am nächsten entspricht. Wenn der LFX sAPO das vorgeschlagene Format nicht unterstützen kann und keine enge Übereinstimmung aufweist, wird APOERR_FORMAT_NOT_SUPPORTED zurückgegeben. Der GFX sAPO arbeitet mit dem Ausgabeformat des LFX sAPO. Daher ist die GFX sAPO nicht am Formatverhandlungsprozess beteiligt.

Nachdem ein Datenformat zum Verarbeiten der Audiodaten ausgewählt wurde, ruft der Grafik-Generator für die Audioverarbeitung die IAudioProcessingObjectConfiguration::LockForProcess-Methode der sAPOs auf, wodurch die Formatauswahl abgeschlossen wird.

Wenn windows Vista sAPO als Reaktion auf einen Aufruf der LockForProcess-Methode einen Fehler an den umschließenden benutzerdefinierten sAPO zurückgibt, muss die benutzerdefinierte sAPO den Fehler auf die gleiche Weise behandeln wie einen Fehler von CoCreateInstance , wenn ein Versuch, eine sAPO zu instanziieren, fehlschlägt. Ausführliche Informationen zum Überschreiben der vom System bereitgestellten LockForProcess-Methode finden Sie in der Datei Spkrfill.cpp.

Aufgrund der Art und Weise, wie der Audiodienst funktioniert, müssen die LFX- und GFX-sAPOs unabhängig voneinander auf Abfragen des Audiodiensts in Bezug auf Datenformate reagieren können.

Wichtig Wenn Sie ein benutzerdefiniertes sAPO implementieren, das eine Windows Vista LFX sAPO umschließt, geben Sie nicht das APO_FLAG_FRAMESPERSECOND_MUST_MATCH-Flag in den Registrierungseigenschaften des benutzerdefinierten sAPO an. Wenn Sie dieses Flag angeben, kann windows Vista LFX sAPO keine Lautsprecherfüllung, Kopfhörervirtualisierung oder virtuelle Umgebung ausführen. Darüber hinaus kann Ihr benutzerdefiniertes sAPO keine Audiodatenströme heruntermischen. Ihr benutzerdefinierter sAPO kann beispielsweise keinen 5.1-Audiostream in einen Zweikanal-Stereoaudiostream mischen.