共用方式為


DSSPEAKER_DIRECTOUT說話者設定

注意 此資訊適用于 Windows XP 和舊版作業系統。 從 Windows Vista 開始, IDirectSound::GetSpeakerConfigIDirectSound::SetSpeakerConfig 已被取代。

應用程式程式可以呼叫IDirectSound::SetSpeakerConfig方法,並將 speaker-configuration 參數設為 DSSPEAKER_DIRECTOUT (請參閱Microsoft Windows SDK檔) ,將 DirectSound 喇叭設定變更為直接輸出模式。 這會指定無說話者設定,其中來自應用程式的播放資料流程中的通道會直接輸出到音訊配接器,而不會解譯為說話者位置。 不過,輸入資料流程仍可透過取樣率轉換、衰減、篩選和其他類型的處理來修改,而不需要假設將喇叭指派給通道。

一旦生效,DSSPEAKER_DIRECTOUT喇叭組態設定會是全域的,而且會影響整個音訊裝置。 後續執行的所有音訊應用程式都會受限於新的設定,直到 DirectSound 再次變更設定為止。

在直接輸出模式中,音訊裝置會將第一個通道轉譯為裝置上的第一個輸出連接器、將第二個通道轉譯為裝置上的第二個輸出,依此類推斷。 這可讓音訊撰寫應用程式將多重通道資料直接輸出到外部混音器或音訊儲存裝置等裝置, (硬碟、ADAT 等等) 。 例如,可能會指派 48 通道資料流程中的通道,如下表所示。

頻道號碼內容 0

聲樂

1

2

吉他

3

低音

...

47

鋼琴

對於這種原始音訊資料,說話者位置是無意義的,而且將說話者位置指派給輸入或輸出資料流程可能會造成不必要的副作用。 例如,KMixer 之類的元件可能會藉由將 3D 虛擬化或 Dolby Surround Pro Logic 編碼等說話者特定效果套用至資料流程,以不當介入。 請注意,原始資料通道的數目不會受限於通道遮罩中的位數。

即使是未特別針對音訊編輯設計的裝置,通常也應該接受 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求,將其喇叭設定變更為KSAUDIO_SPEAKER_DIRECTOUT。 一般而言,裝置應該避免要求失敗,除非裝置可以透過某種方式確認其輸出已連線到喇叭,而且無法外部用於任何其他用途 (,例如,做為外部混音器) 的輸入。

使用直接輸出模式的應用程式通常會針對特定硬體裝置撰寫。 這可讓應用程式事先知道裝置支援的直接輸出資料格式,包括通道數目,以及如何解譯這些通道中的資料。 這是必要的知識,因為當應用程式在以直接輸出模式設定的裝置上呼叫 IDirectSound::GetSpeakerConfig 時 ,裝置只會確認其處於此模式;它不會提供任何其他資訊,說明其支援直接輸出模式之資料流程格式的通道數目。 (這項資訊可能會藉由將 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS get-property 要求傳送至裝置混音器針腳上的超級混音器節點來取得;請參閱 DirectSound Node-Ordering Requirements.)

當指定直接輸出資料流程的波浪格式時,應用程式應該將WAVEATEXTENSIBLE結構的dwChannelMask成員設定為值為零的值KSAUDIO_SPEAKER_DIRECTOUT。 通道遮罩為零表示未定義喇叭位置。 一如往常,資料流程中的通道數目是在 Format.nChannels 成員中指定。

當裝置設定為直接輸出模式時,硬體廠商可以選擇支援 DirectSound 硬體加速。 如果有直接輸出串流,DirectSound 應用程式可以透過其中一個裝置的混合針腳來播放直接輸出資料流程。 一旦所有可用的硬體接腳實例都耗盡之後,任何新的串流都會改為通過 KMixer。

針對以直接輸出模式設定的裝置混合串流時,KMixer 會在來自應用程式之輸入資料流程的通道與其輸出到裝置的混合資料流程通道之間套用一對一對應。 這表示,如果應用程式產生數個具有相同通道數目的直接輸出資料流程,例如,輸出混合的每個通道 N 只是輸入 KMixer 之所有資料流程的通道 N 總和。

混合數個直接輸出資料流程時,其包含的通道數目不同,KMixer 的混合演算法會稍微複雜一些。 在此情況下,混合的每個通道 N 都是具有通道 N 之所有輸入資料流程的通道 N 總和。例如,如果 KMixer 混合四邊形和身歷聲輸入串流來形成四邊形輸出混合,則通道零和其中一個輸出混合是輸入身歷聲和四邊形資料流程的通道零和一個。 不過,身歷聲輸入串流不會對兩個和三個混合的通道提供任何貢獻,這只取自四邊形輸入資料流程的最後兩個通道。

嘗試執行下列任一動作的應用程式,有風險是無法預期的行為:

  • 透過以直接輸出模式設定的裝置播放非直接輸出格式的資料流程。

  • 透過未在直接輸出模式中設定的裝置播放直接輸出串流。

當遇到上述其中一個案例時,KMixer 可避免只是嘗試開啟資料流程而失敗。 相反地,它會嘗試使用上述的一對一對應演算法來處理明顯的不相容。 使用者不一定滿意結果。 其他音訊元件無法預期會以與 KMixer 相同的方式處理這些案例。 例如,在直接輸出模式中設定之裝置的驅動程式應該會失敗,嘗試針對不是直接輸出格式的輸出資料流程開啟硬體緩衝區,反之亦然。

音訊撰寫應用程式可能需要讓使用者接聽其已混入其輸出資料流程前幾個通道的資料,但忽略仍在資料流程其餘通道中包含的原始資料。 KMixer 的行為讓此簡單明瞭。 例如,如果 24 通道播放資料流程包含通道 0 和 1 中的身歷聲混合,以及通道 2 到 23 中的原始資料,應用程式會執行下列動作:

  • 設定目標音訊裝置 (這不一定是應用程式使用 DSSPEAKER_STEREO 呼叫 SetSpeakerConfig ,以身歷聲模式編輯串流) 的裝置。

  • 將播放資料流程DWChannelMask 結構中的 dwChannelMask變更為KSAUDIO_SPEAKER_STEREO,但將Format.nChannels設定為 24,這是資料流程中的通道總數。

KMixer 只會混合播放資料流程的身歷聲通道,如通道遮罩中所述,並捨棄其餘的 22 個通道,其中包含原始資料。 請記住,對 DirectSound 喇叭組態設定所做的任何變更不太可能生效,直到目前的 DirectSound 物件終結,而另一個物件會建立 (請參閱 套用Speaker-Configuration設定) 。