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