套用Speaker-Configuration設定

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

DirectSound 會在登錄中持續追蹤其目前的說話者組態設定,並在每次建立新的 DirectSound 裝置時,將該設定套用至音訊硬體。

應用程式程式可以藉由呼叫 IDirectSound::SetSpeakerConfig 方法來變更全系統說話者設定,以更新登錄中的說話者組態設定。 方法也會嘗試立即將新設定套用至硬體,雖然音訊裝置通常無法在 DirectSound 物件存在時變更喇叭設定。 如需 DirectSound 為此方法定義的說話者設定清單,請參閱 翻譯Speaker-Configuration要求

使用者可以透過 [多媒體內容] 頁面 (mmsys.cpl) 中的 [說話者設定] 對話方塊,在 主控台 變更設定。 若要在 Windows XP 下尋找 DirectSound 說話者設定對話方塊,例如,請遵循下列步驟:

  1. 在 主控台中,按兩下音效和音訊裝置圖示。

  2. 在 [ 音訊] 索引標籤上,從 [音效播放 ] 清單中選取裝置。

  3. 選取 [進階] 按鈕。

  4. 選取 [演講者] 索引卷 標。

此時,您應該會在您可以選取的說話者組態清單旁看到 [說話者設定 ] 標籤。

DirectSound 會使用 KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property 要求,將喇叭組態資訊傳送至音訊篩選圖形中的 3D 節點或 DAC 節點 (KSNODETYPE_3D_EFFECTSKSNODETYPE_DAC) 。 對於 3D 節點,屬性要求的目標實際上是 (3D 資料流程物件的釘選) 來饋送節點。 對於 DAC 節點,目標是包含 DAC 節點的篩選物件。 不論是哪一種情況,說話者組態設定都是全域的,而且會影響整個音訊裝置。 後續執行的所有音訊應用程式都會受限於新的設定,直到 DirectSound 再次變更設定為止。

請注意,只有隨附于 Windows Me 和 Windows XP 和更新版本的 DirectSound 版本,才會將說話者組態屬性要求傳送至 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 喇叭組態預設為身歷聲。