共用方式為


將串流格式對應至說話者組態

當系統要求播放不符合音訊裝置喇叭設定的資料流程格式時,音訊驅動程式有數個選項:

  • 拒絕播放資料流程。

  • 執行個別通道與說話者的一對一對應,以播放串流。 如果通道對應至每個喇叭之後,任何通道都會離開,請捨棄剩餘的通道。 相反地,如果所有通道都指派給說話者之後,任何說話者都會離開,請透過剩余的喇叭播放無聲。

  • 混合原始資料流程中的通道來播放串流,以精確產生說話者設定所需的通道數目。 如果原始資料流程中有比說話者更多的通道,此方法可避免遺失只是捨棄過多通道所產生的內容。 混合和格式轉換可以在軟體或硬體中執行。

關於第三個選項,驅動程式應該避免直接執行軟體混合。 相反地,硬體廠商應該安裝全域效果 (GFX) 軟體模組,以在到達音訊裝置之前處理資料流程。 在 Windows Vista 中,全域效果會實作為 GFX 音訊處理物件, (API) 。 在 Windows Server 2003 和 Windows XP 中,全域效果會實作為 GFX 篩選準則。

在 7.1 喇叭組態上播放 5.1 通道串流

下圖顯示針對 5.1 聲場喇叭組態錄製的串流, (左) 但透過 7.1 家聲場喇叭組態播放, (右) 。

此圖顯示 5.1 串流在具有兩個無訊息喇叭的 7.1 喇叭組態上播放。

在上圖中,錄製的 5.1 格式不包含 7.1 喇叭組態中 BL 和 BR 喇叭位置的通道資訊。 因此,這兩個說話者都是無訊息的。 (另一個較困難的另一個替代方式是讓音訊裝置透過混合錄製中原始六個頻道的內容,來合成 BL 和 BR 喇叭的兩個額外通道。)

根據通道遮罩位的定義,錄製上圖左側所顯示 5.1 資料流程的通道遮罩應該0x60F,這會將六個通道指派給下列喇叭位置:FL、FR、FC、LFE、SL 和 SR。 (這是稍早所討論的側邊說話者 5 ) .1 組態。事實上,5.1 資料流程的通道遮罩0x3F,而不是基於先前提及的原因而0x60F,現在將會詳細說明。

在舊版 Windows (Windows Server 2003、Windows XP 與 SP1、Windows 2000 和 Windows Me/98) 中,通道遮罩的解譯0x3F是它會將 5.1 格式的六個通道指派給下列說話者位置:FL、FR、FC、LFE、BL 和 BR。 (這是後端喇叭 5.1 組態.) 不過,Windows Vista、Windows Server 2003 搭配 SP1 的解譯,而 Windows XP with SP2 則不同:依慣例,通道遮罩的 5.1 格式會解譯為0x3F表示 側喇 叭 5.1 組態,而不是 反向喇叭 5.1 組態。

如此一來解譯通道遮罩,就不需要引進第二個 5.1 通道格式描述元,以區分側喇叭 5.1 組態與反向喇叭 5.1 組態。 這兩個組態很類似,一般使用者可能難以區分它們。 雖然只有單一 5.1 通道格式描述元可避免混淆的使用者,但它確實需要硬體廠商記得解譯0x3F通道遮罩,表示通道 5 和 6 會指派給 SL 和 SR 喇叭位置,而不是 BL 和 BR 位置。 為了記住 5.1 資料流程通道遮罩的特殊案例解譯,廠商可以讓使用者難以區分兩個非常類似的 5.1 通道格式描述元。

認為至少有一些使用者想要區分側邊說話者 5.1 組態和後端喇叭 5.1 組態的廠商,可以選擇提供使用者介面 (UI) 程式以供此目的使用。 透過 UI,使用者可以選取 5.1 通道串流中的通道 4 和 5 是否應該驅動後端喇叭,而不是在 7.1 家用喇叭組態中的側邊喇叭。

在 5.1 喇叭組態上播放 7.1 通道串流

下圖顯示針對 7.1 家用喇叭組態錄製的串流, () 透過 5.1 聲場喇叭組態播放 5.1 聲場喇叭組態 (右) 播放。 7.1 通道資料流程的通道遮罩0x63F。

描述在 5.1 喇叭組態上播放 7.1 資料流程的圖表,其中包含兩個捨棄的通道。

在此範例中,通道 6 和 7 包含 7.1 組態中側喇叭位置的資料,會透過 5.1 組態中的側邊喇叭位置播放。 音訊裝置只會捨棄通道 4 和 5,其中包含 7.1 組態中後端喇叭位置的資料,在 5.1 組態上播放資料流程時。 如先前所述,上圖中未顯示另一個替代 () 是讓裝置嘗試在通道 4 和 5 中保留內容,方法是將它們與通道 6 和 7 混合,再透過 5.1 組態中的側邊喇叭播放。

系統混音器行為

在 Windows Server 2003、Windows XP、Windows 2000 和 Windows Me/98 中,音訊裝置播放的多通道音訊串流通常是由軟體系統混音器產生,Kmixer.sys。 在串流開始播放之前,系統混音器和音訊驅動程式必須交涉混合器和驅動程式可以處理的資料流程格式。

當系統要求以不符合音訊裝置喇叭設定的格式播放多通道資料流程時,音訊驅動程式可以拒絕要求,在此情況下,交涉會繼續。

系統混音器可以將內容從 5.1 通道輸入資料流程轉換成 7.1 通道輸出資料流程, (到音訊裝置) ,反之亦然,雖然它偏好避免這類轉換來保留輸入資料流程的品質。 因此,系統混音器會要求驅動程式接受格式與系統混音器最高品質輸入資料流程相同的資料流程,以開始交涉。 一般而言,這表示如果系統混音器具有 5.1 或 7.1 通道格式的輸入資料流程,則會要求驅動程式接受相同格式的資料流程。 如果驅動程式拒絕此格式,系統混音器會藉由詢問驅動程式是否可以處理其他資料流程格式來繼續交涉。

例如,如果具有 5.1 喇叭組態的音訊裝置驅動程式拒絕來自系統混音器的要求來播放 7.1 通道串流,則系統混音器會提供將 7.1 通道串流轉換為 5.1 通道串流,以繼續交涉。 如果驅動程式接受此格式,則系統混音器會執行驅動程式的資料流程轉換。

設計音訊驅動程式時,驅動程式寫入器必須決定是否要處理自己的格式轉換,還是依賴系統混音器來執行轉換。 驅動程式可能需要在下列任一情況下處理轉換:

  • 如果驅動程式需要以與系統混音器所執行的轉換不同的方式來執行轉換。

  • 如果驅動程式必須播放略過系統混音器的資料流程。

第二種情況下,如果從 Microsoft DirectSound 硬體加速緩衝區直接播放到音訊裝置上的硬體混合針腳,串流可能會略過系統混音器。 此外,有些「專業音訊」應用程式會將串流直接傳送到音訊裝置,以避免系統混音器延遲,或防止混合程式改變原始音訊串流中的數位樣本值。

在具有 SP1 的 Windows Server 2003 和 SP2 的 Windows XP 中,如果系統混音器產生 5.1 通道輸出資料流程,混音器一律會將資料流程的通道遮罩設定為0x3F。 即使系統混音器收到通道遮罩為0x60F的 5.1 通道輸入資料流程,系統混音器的行為也是如此。 使用此行為時,音訊驅動程式永遠不會收到來自混音器0x60F通道遮罩的 5.1 通道資料流程。

如果系統混音器收到通道遮罩為 0x63F 的 7.1 通道輸入資料流程,並產生具有通道遮罩 0x3F) 的 5.1 通道輸出資料流程 (,混合器會將輸入資料流程中的通道 6 和 7 複製到輸出資料流程中的通道 4 和 5。 混音器會捨棄來自 7.1 通道輸入資料流程之兩個回喇叭的通道 4 和 5) (。 此行為可確保包含 7.1 通道串流中兩端喇叭內容的通道會透過 5.1 喇叭組態中的側邊喇叭播放。