附註 此資訊適用於 Windows XP 和舊版作系統。 從 Windows Vista 開始,IDirectSound::GetSpeakerConfig 和 IDirectSound::SetSpeakerConfig 已被取代。
DirectSound 會在登錄中追蹤其目前的喇叭組態設定,並在每次建立新的 DirectSound 裝置時,將該設定套用至音訊硬體。
應用程式程式可以藉由呼叫 IDirectSound::SetSpeakerConfig 方法來變更全系統的喇叭組態設定,此方法會更新登錄中的說話者組態設定。 方法也會嘗試立即將新設定套用至硬體,不過音訊裝置通常無法在 DirectSound 物件存在時變更喇叭設定。 如需 DirectSound 為此方法定義的說話者組態清單,請參閱 翻譯 Speaker-Configuration 要求。
使用者可以在 [控制面板] 的 [ 多媒體屬性 ] 頁面 (mmsys.cpl) 中,透過說話者組態對話框變更設定。 若要在 Windows XP 下找出 DirectSound 喇叭組態對話框,例如,請遵循下列步驟:
在 [控制面板] 中,按兩下 [音效和音訊裝置 ] 圖示。
在 [ 音訊] 索引標籤上,從 [ 音效播放 ] 清單中選取裝置。
選取 [進階] 按鈕。
選取 演講者 標籤。
此時,您應該會看到 [ 說話者設定 ] 卷標旁的喇叭設定清單,您可以從中選取。
DirectSound 會使用 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求,將說話者組態資訊傳送至音訊篩選圖表中的 3D 節點或 DAC 節點(KSNODETYPE_3D_EFFECTS 或 KSNODETYPE_DAC)。 對於 3D 節點,屬性請求的目標實際上是提供資料給該節點的引腳(3D 數據流物件)。 對於 DAC 節點,目標是包含 DAC 節點的篩選物件。 不論是哪一種情況,喇叭組態設定都是全域的,而且會影響整個音訊裝置。 後續執行的所有音訊應用程式都會受限於新的設定,直到 DirectSound 再次變更設定為止。
請注意,只有隨附於 Windows Me 的 DirectSound 版本,以及 Windows XP 和更新版本,將說話者組態屬性要求傳送至 DAC 節點--舊版 DirectSound 不支援此功能。 不過,所有 DirectSound 版本都會將這些要求傳送至 3D 節點。
如果應用程式程式已建立多個 3D 節點,DirectSound 只會將說話者組態要求傳送至要建立的第一個 3D 節點。
每當應用程式建立 DirectSound 物件或呼叫 IDirectSound::SetSpeakerConfig 方法時,DirectSound 會將說話者組態要求傳送至 3D 和 DAC 節點。 音訊裝置在管理作用中的串流時,通常無法變更其喇叭設定,而且 DirectSound 會盡可能避免這項限制。 例如,建立 DirectSound 物件時,DirectSound 會在具現化篩選條件之後傳送喇叭組態要求,但在具現化篩選上的任何針腳之前,也就是建立任何數據流之前。
在 呼叫 SetSpeakerConfig 時,較難避免這項限制。 當應用程式呼叫 SetSpeakerConfig 時,配接器驅動程式通常會失敗 DirectSound 的喇叭組態要求。 這是因為 DirectSound 物件已經存在,這表示裝置已經有要管理的作用中數據流。
在此情況下,配接器驅動程式有兩個選項可處理其失敗的喇叭組態要求:
驅動程式可以記住要求的組態,並在其所有數據流被終結時立即套用。
驅動程式可以忽略該要求,並依賴 DirectSound 在下一次建立 DirectSound 物件時傳送另一個揚聲器配置要求。
第一個選項可提供較佳的用戶體驗,因為如果使用者透過說話者組態對話框選取新的設定,則變更會在所有應用程式中立即生效,而不只是 DirectSound 應用程式。 (當然,如果在選取新設定時執行任何音訊應用程式,則變更會延後,直到所有音訊應用程式終止為止。不過,在第二個選項中,變更在 DirectSound 應用程式執行之前不會生效。 例如,如果使用 Windows 多媒體 waveOut API 的應用程式是變更控制面板設定之後要執行的第一個應用程式,使用者可能會想知道為什麼新設定沒有明顯的效果。
為了回應傳送至 3D 或 DAC 節點的喇叭配置要求,通常只有在沒有任何音訊應用程式啟用音訊硬體插槽時,驅動程式才會更新喇叭配置。 這表示,例如,如果 waveOut 應用程式在第二個應用程式呼叫 DirectSoundCreate 時開啟一或多個針腳,驅動程式可能需要延遲音訊裝置喇叭設定的任何擱置變更,直到稍後為止。
如果您的驅動程式無法滿足變更裝置喇叭設定的要求,它應該只會讓要求失敗。 在 DirectSound 物件建立或 SetSpeakerConfig 呼叫期間發生說話者設定要求失敗,不會造成 DirectSound 物件建立或 SetSpeakerConfig 呼叫失敗。
在開機時,音訊配接器驅動程式會將硬體的喇叭組態初始化為其預設設定,通常是立體聲。 只要任何應用程式建立 DirectSound 物件,DirectSound 就會將儲存在登錄中的設定套用至硬體。 應用程式必須先建立 DirectSound 裝置,才能呼叫 SetSpeakerConfig 來變更登錄中的喇叭組態設定,但此登錄設定通常只有在 DirectSound 裝置發行且建立第二個 DirectSound 裝置之後,才會在硬體中生效。
安裝音訊裝置或發生喇叭設定錯誤之後,DirectSound 喇叭設定會預設為立體聲。