近年興起的移動直播,其富有特色的模式吸引了海量用戶,已成為網絡社交和粉絲經濟的超級入口。在直播過程中,聲音是主播與觀眾互動的重要途徑,為了豐富直播內容、帶動氣氛、增加趣味性,主播普遍會使用音效軟件。例如,在演唱類直播中,主播伴隨背景音樂演唱,這時主播往往希望為自己聲音增加混響效果,營造出一種現場演唱的氛圍;在搞笑類直播中,主播經常進行變聲處理,女聲變男聲,男聲變女聲,或者變成機器人的聲音等。
想要實現這些效果,需要直播軟件對采集到的聲音進行處理,為了讓主播實時聽到處理后的聲音效果,以便根據效果進行調整,直播軟件需要提供低延時回放,將效果呈現給主播。因此,直播軟件背后的聲音處理方案就起到了非常關鍵的作用。目前針對不同的操作系統,如蘋果的iOS和谷歌的Android,有著為數眾多的不同方案,效果不一。金山云作為視頻云行業的領跑者,提供的聲音處理方案,以出色的聲音效果,贏得了眾多移動直播APP的青睞。下面就以金山云直播SDK集成的蘋果AudioUnit系列API方案為例,為各位詳解基于iOS系統的移動直播音效,是如何實現的。
AudioUnit特點解析
從實際效果上說,蘋果AudioUnit系列API方案,要比針對谷歌Android系統的跨平臺聲音處理庫libsox等方案要好。一個原因在于,對于音效處理,蘋果提供了非常豐富的音頻API,涵蓋采集、處理、播放各個環節,并按照需求的層次進行了分組。
蘋果iOS系統音頻框架概覽
從上圖中可以看到,離底層驅動和硬件最近的就是AudioUnit系列API。與其它聲音處理方案相比,AudioUnit包含以下這些優缺點:
優點:
–低延時,從采集到播放回環可到10ms這一級別
–動態變更配置組合
–直接獲得后臺執行權限
–CPU資源消耗較少
缺點:
–專有概念比較多,接口復雜
–提供C風格API
由于AudioUnit并不完美,特別是專有概念比較多,接口也比較復雜,因此如果技術薄弱,在開發時難度會很大,金山云直播SDK解決了開發難度大等問題,這也是金山云SDK倍受歡迎的原因之一。
AudioUnit這個名字比較形象,它的主體是一系列單元節點(unit),不同的單元節點可實現不同的功能,將一個或多個單元節點添加到AUGraph(全稱是Audio Processing Graph,把各個unit組合在一起,起到管理作用)中,并建立單元節點之間的連接,音頻數據順次通過各個節點,即可完成對聲音的采集、處理和播放。如下圖所示,AUGraph顯示出了這個音頻處理系統的構成,提供了啟動和停止處理系統的接口。
AudioUnit示意圖
如下方表格所示,蘋果iOS系統提供了四類單元節點:
purpose
Audio units
Effect
eg. Reverb
mixing
eg. Multichannel Mixer
I/O
eg. Remote I/O
Format conversion
eg. Format Converter
其中,I/O主要負責設備,比如采集和播放;Mixing負責將不同來源的音頻數據進行混合;Effect負責對音頻數據進行音效處理,Format Conversion負責格式轉換,比如重采樣等。這里有個優化的點,由于Multichannel Mixer本身就有格式轉換的功能,輸入和輸出的音頻數據格式可以不同,因此利用這一點,可以節省一個格式轉換單元。
AudioUnit中的音頻采集
在直播應用中,我們主要使用Remote I/O unit進行采集。由于一個AUGraph中只允許有一個I/O unit,因此Remote I/O需要同時負責采集和播放。當用戶開啟耳返功能時,需要將采集到的聲音,經過處理后再送回當前節點直接播放。