使用通訊裝置

在 Windows 7 中,Windows 多媒體控制面板Mmsys.cpl提供新的 [通訊 ] 索引標籤。此索引標籤包含選項,可讓使用者設定定義系統如何管理 通訊裝置的選項。 通訊裝置主要用於在電腦上撥打或接聽電話。 對於只有一個轉譯裝置(喇叭)和一個擷取裝置(麥克風)的計算機,這些音訊裝置也會作為默認通訊裝置。 當使用者連接新裝置,例如USB頭戴式裝置時,系統會藉由查閱 OEM 所填入的組態設定來執行自動裝置角色偵測。 如果系統判斷最適合通訊用途的裝置,系統會將 eCommunications 角色指派給裝置。 針對這些裝置,Windows 7 Mmsys.cpl提供 [預設通訊裝置] 選項,可讓使用者針對音訊轉譯(播放索引標籤)和音訊擷取(錄製索引標籤)選取每個通訊裝置。 系統會執行自動角色偵測,但不會設定要用於通訊的特定裝置。 這必須由使用者完成。 新的 eCommunications 角色可讓應用程式區分使用者選擇的裝置,以處理通話,以及要作為多媒體裝置的裝置(音樂播放)。 例如,如果使用者有耳機和連接到計算機的喇叭,系統會將 eConsole 角色指派給喇叭,並將 eCommunications 角色指派給耳機。 當使用者選取要作為通訊裝置的頭戴式裝置之後,若要開發通訊應用程式,您可以特別以頭戴式裝置為目標來轉譯音訊串流。 使用者無法變更系統指派的裝置角色的應用程式。 如需裝置角色的詳細資訊,請參閱 裝置角色

通訊應用程式,例如 VoIP 和整合通訊應用程式,透過電腦撥打和接聽電話。 例如,VoIP 應用程式可能會將包含響鈴通知的數據流指派給通訊裝置集的端點,以便轉譯音訊串流。 此外,應用程式可能會在擷取和轉譯端點裝置上開啟語音輸入和輸出數據流,這些裝置會設定為通訊裝置。

若要將通訊功能整合到您的應用程式中,您可以使用:

  • MMDevice API- 取得通訊裝置端點的參考。
  • WASAPI — 透過通訊裝置轉譯和擷取音訊串流。 操作系統會將在通訊裝置上開啟的 數據流視為通訊數據流

通訊應用程式會列舉裝置,並以與使用核心音訊 API 管理非通訊數據流相同的方式,為通訊串流(轉譯或擷取)數據流提供數據流管理。

您可以在通訊應用程式中整合的其中一個功能是 躲避串流衰減。 此行為會定義當通訊數據流開啟時,其他音效必須發生的情況,例如在通訊裝置上收到電話時。 視使用者選擇而定,系統可能會靜音或降低非通訊數據流的音訊音量。 當通訊串流開啟或關閉以轉譯或擷取數據流時,音訊系統會產生躲避事件。 根據預設,操作系統會提供預設的躲避體驗。 媒體應用程式可以取代預設行為並處理這些事件本身,以提供自定義的躲避體驗。

下列各節說明如何使用核心音訊 API 來提供自定義的躲避體驗。

取得通訊裝置端點的參考

若要使用通訊裝置,直接 WASAPI 用戶端必須使用裝置列舉值來列舉裝置。 呼叫 IMMDeviceEnumerator::GetDefaultAudioEndpoint,以取得預設通訊裝置端點的參考。 在此呼叫中,應用程式必須在 Role 參數中指定 eCommunications,以將裝置列舉限制為通訊裝置。 取得裝置裝置端點的參考之後,您可以呼叫 IMMDevice::Activate 來啟用端點範圍的服務。 例如,您可以傳遞IID_IAudioClient服務標識符來啟動音訊客戶端物件,並將其用於串流管理、IID_IAudioEndpointVolume標識元,以存取通訊裝置端點的音量控制,或IID_IAudioSessionManager標識符來啟用會話管理員,讓您能夠與端點的原則引擎互動。 如需串流作業的相關信息,請參閱 串流管理

藉由使用 IMMDevice 參考,您也可以存取裝置端點的屬性存放區。 OEM 會填入這些屬性值,例如裝置易記名稱和製造商名稱,並讓應用程式判斷通訊裝置的特性。 如需詳細資訊,請參閱 裝置屬性

下列範例程式代碼會取得預設通訊裝置端點的參考,以便轉譯音訊數據流。

IMMDevice *defaultDevice = NULL;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
            CLSCTX_INPROC_SERVER, 
            __uuidof(IMMDeviceEnumerator), 
            (LPVOID *)&deviceEnumerator);

hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, 
            eCommunications, &defaultDevice);

串流管理