在即時通信應用中,根據應用場景的不一樣,須要對音頻輸入源進行選擇,不一樣的應用場景對應不一樣的音頻工做模式。AnyChat Platform Core SDK(須要V2.8.6以上版本)支持多種音頻工做(採集)模式,包括:php
一、發言模式(默認):自動選擇麥克風爲音頻輸入源設備,用戶說話的聲音被麥克風採集,啓動音頻特效處理(包括:迴音消除、靜音檢測、噪音抑制、自動增溢),該模式一般應用於互動交流,用戶發言討論等場合[參數值:0];web
二、放歌模式:自動選擇立體聲混音輸入源設備,本地計算機所播放的聲音被採集,同時SDK內部會自動屏蔽其它用戶的聲音(若是不屏蔽,則用戶的聲音會被採集下來,並回傳給用戶,用戶那邊將會聽到迴音),SDK內部會自動關閉音頻特效處理,該模式一般應用於向其餘用戶放歌,而不用關心其餘用戶發言的場合[參數值:1];網絡
三、卡拉OK模式:自動選擇立體聲混音和麥克風兩個輸入源設備(該特性與硬件相關,有些聲卡不支持同時採集麥克風和立體聲混音),本地計算機所播放的聲音和用戶說話的聲音將會被採集,同時SDK內部會自動屏蔽其它用戶的聲音,SDK內部會自動關閉音頻特效處理,該模式一般應用於向其餘用戶放歌,同時本身用麥克風伴唱,而不用關心其它用戶發言的場合[參數值:2];spa
四、線路輸入模式:自動選擇線路輸入源設備,經過線路輸入的聲音將被採集(一般是指將外部的DV、DVD、TV等設備的音頻輸出端子接入聲卡的LineIn口的應用),SDK內部會自動關閉音頻特效處理,該模式一般應用於向其餘用戶播放外部設備的聲音,而不須要本身講話的場合,如向房間的全部用戶直播電視信號時,可將電視的視頻輸出接入專用的視頻採集卡,而將電視的聲音輸出接入聲卡的LineIn接口,並選擇「線路輸入模式」,那麼當前房間內的其它用戶就能夠收看到實時的電視畫面與聲音了[參數值:3]。code
典型修改音頻工做模式的代碼以下:orm
1.
DWORD dwAudioMode = 1; // 修改成放歌模式
2.
BRAC_SetSDKOption(BRAC_SO_AUDIO_CPATUREMODE,(PCHAR)&dwAudioMode,sizeof(dwAudioMode));
AnyChat Platform Core SDK初始化自動啓動「發言模式」,如須要切換到其它的工做模式,須要經過相應的接口設置(參考:64. BRAC_SetSDKOption),在SDK初始化成功後,可動態切換,因爲切換過程當中,SDK內部會自動選擇對應的源設備,故切換後,上層應用須要更新當前的音頻採集設備,以及對應的音頻特效狀態等標誌。視頻
AnyChat Platform Core SDK會根據模式的不一樣和網絡狀態的不一樣,動態調節播放緩衝區的大小,從而來控制播放延遲,如發言模式下,當網絡條件好的狀況下,平均延遲<300ms,當網絡條件很差的狀況下,平均延遲<800ms;而放歌模式等其它非發言模式,延遲將會隨網絡狀態的變化而變化。總的來講,發言模式延遲小,保障實時性,非發言模式,如放歌模式,則延遲會稍大,保障流產性。接口
AnyChat Platform Core SDK會自動記錄最後一次上層應用所選擇的工做模式,下次從新運行後,會自動啓用前次記錄的工做模式,若是不指望SDK記錄前次工做模式,則可經過關閉SDK的配置文件來實現(在SDK初始化時去掉BRAC_FUNC_CONFIG_LOCALINI參數,參考:11. 初始化SDK:BRAC_InitSDK)ci