應用程式起始音訊處理之後,圖形產生器會將 sAPO 設定為音訊圖形,並初始化 sAPO。 然後,音訊服務會與 LFX sAPO 協商,以在 sAPO 的輸入和輸出處建立音訊資料的格式。 此交涉過程稱為格式交涉。
所有為 Windows Vista 提供音訊系統效果的 sAPO 都必須具有特定的介面和方法。 sAPO 和音訊引擎用來交涉資料格式的方法包括:IAudioProcessingObject 介面的 IsInputFormatSupported 方法,以及 IAudioProcessingObjectConfiguration 介面的 LockForProcess 和 UnlockForProcess 方法。
若要起始格式交涉,音訊服務會先將 LFX sAPO 的輸出設定為預設的 float32 型格式。 音訊服務接著會呼叫 LFX sAPO 的 IAudioProcessingObject::IsInputFormatSupported 方法、建議預設格式,並監視這個方法的 HRESULT 回應。 如果 LFX sAPO 可以支援建議的格式,則會傳回S_OK,以及支援格式的參考。 如果 LFX sAPO 無法支援建議的格式,它會傳回 S_FALSE,並提供一個與建議格式最接近的格式參考值。 如果 LFX sAPO 無法支援建議的格式,且沒有緊密相符的格式,則會傳回APOERR_FORMAT_NOT_SUPPORTED。 GFX sAPO 可與 LFX sAPO 的輸出格式搭配使用。 因此,GFX sAPO 不參與格式協商過程。
選取資料格式來處理音訊資料之後,音訊處理圖形產生器會呼叫 sAPO 的 IAudioProcessingObjectConfiguration::LockForProcess 方法,導致格式選取完成。
如果 Windows Vista sAPO 會傳回錯誤給包裝自訂 sAPO 以回應 LockForProcess 方法的呼叫,則自訂 sAPO 必須以處理來自 CoCreateInstance 錯誤的方式處理錯誤,當嘗試具現化 sAPO 失敗時。 如需如何覆寫系統提供的 LockForProcess 方法的詳細資料,請參閱 Spkrfill.cpp 檔案。
由於音訊服務的運作方式,LFX 和 GFX sAPO 必須能夠彼此獨立地回應來自音訊服務的資料格式查詢。
重要 當實作封裝 Windows Vista LFX sAPO 的自訂 sAPO 時,請勿在自訂 sAPO 的註冊屬性中指定 APO_FLAG_FRAMESPERSECOND_MUST_MATCH 旗標。 如果您指定此旗標,Windows Vista LFX sAPO 將無法執行喇叭填滿、耳機虛擬化或虛擬環繞聲。 此外,您的自訂 sAPO 將無法進行音訊串流的下混合處理。 例如,您的自訂 sAPO 將無法將 5.1 音訊流混音為雙聲道立體聲音訊流。