成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

iOS音頻采集過程中的音效實現(xiàn)-創(chuàng)新互聯(lián)

1、背景

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供榆樹網(wǎng)站建設、榆樹做網(wǎng)站、榆樹網(wǎng)站設計、榆樹網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、榆樹企業(yè)網(wǎng)站模板建站服務,十多年榆樹做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

在移動直播中, 聲音是主播和觀眾互動的重要途徑之一, 為了豐富直播的內(nèi)容,大家都會想要在聲音上做一些文章, 在采集錄音的基礎上玩一些花樣。

比如演唱類的直播間中, 主播伴隨著背景音樂演唱. 這時有些主播就會希望能夠給自己聲音增加混響的效果, 營造出在舞臺劇場等環(huán)境下演唱的氛圍. 再比如有些搞笑類的直播間, 主播會希望給自己的聲音添加變聲的效果, 女變男,男變女或者變成機器人等等. 為了實現(xiàn)這些需求我們需要對采集的聲音進行處理, 并且為了讓主播實時聽到這些處理后的效果,以便根據(jù)效果進行調(diào)整,我們也需要提供低延時的回放,將變化后的聲音播放給主播聽.對聲音處理的方案比較多,這里介紹一下金山云直播SDK中所采用的基于iOS提供的AudioUnit的方案。

iOS系統(tǒng)提供了非常豐富的音頻相關的API,涵蓋了從采集,處理到播放等各個環(huán)節(jié),并且按照需求的層次進行了分組。
iOS音頻采集過程中的音效實現(xiàn)
圖1. Core Audio Overview
其中,離底層的驅(qū)動和硬件最近的就是AudioUnit系列的API,很多其他高層的API,都是對AudioUnit的封裝. 比如AVFoundation、AudioQueue、AVAudioEngine等。

缺點:

涉及到的專有概念比較多,接口復雜

提供C風格的API

優(yōu)點:

低延時,從采集到播放回環(huán)可以到10ms的級別

可以動態(tài)變更配置組合

可以直接獲得后臺執(zhí)行權(quán)限

  1. AudioUnit簡介

AudioUnit這個名字取得還是比較形象的,它的主體就是一系列的unit,不同unit能夠?qū)崿F(xiàn)不同的功能,將一個或多個unit添加到AUGraph(Audio Processing Graph)中,并建立unit之間的連接,音頻數(shù)據(jù)順次通過各個節(jié)點即可完成我們最終需求。
iOS音頻采集過程中的音效實現(xiàn)
圖2. AudioUnit in iOS
iOS系統(tǒng)一共提供了如下4類unit。
iOS音頻采集過程中的音效實現(xiàn)
其中,I/O主要負責和設備打交道,比如采集和播放;Mixing負責將不同來源的音頻數(shù)據(jù)進行混合;Effect是對音頻數(shù)據(jù)進行音效處理;Format Conversion主要是進行格式轉(zhuǎn)換比如重采樣等。這里有一個優(yōu)化的點是音頻格式轉(zhuǎn)換 Multichannel Mixer 本身就能夠?qū)崿F(xiàn)格式轉(zhuǎn)換的功能,輸入和輸出的音頻數(shù)據(jù)格式可以不同,利用這一點可以節(jié)省一個格式轉(zhuǎn)換unit。

  1. 使用AudioUnit進行音頻采集

在直播應用中,我們主要是使用Remote I/O unit來進行采集工作。 在一個AUGraph中只允許有一個I/O unit。Remote I/O需要同時負責采集和播放的功能。當用戶開啟耳返功能時,要將采集到的聲音,處理之后再送回當前節(jié)點直接播放,這樣可以將采集和播放的延時控制在50ms以內(nèi),主播才察覺不到聲音的延時。 基本的步驟如下:

  1. 實例化AUGraph,將用到units添加進去;

  2. 配置每個AudioUnit的屬性;

  3. 設置Render Callback Function;

4.將units 建立連接;

5.啟動AUGraph。

以上過程大家都可以到Apple官方的文檔中找到具體的說明和代碼示例。

在直播錄制中比較關鍵的一步就是Render Callback Function。
iOS音頻采集過程中的音效實現(xiàn)
AudioUnit每次都是處理一段音頻數(shù)據(jù),每次處理完成一段數(shù)據(jù)的時候,這個回調(diào)函數(shù)就會被調(diào)用一次。在這個回調(diào)函數(shù)中,通過AudioUnit的AudioUnitRender方法,可以AUGraph中的某一個節(jié)點中獲取到一段處理后的音頻PCM數(shù)據(jù)。同時,如果需要進行耳返播放,在這個回調(diào)中也需要將取得的音頻數(shù)據(jù)送入到回調(diào)函數(shù)的最后一個參數(shù)ioData對應的buffer中。

在設置unit的屬性時,需要注意的是一些公共的屬性。比如音頻格式屬性和MaximumFramesPerSlice。如果音頻格式設置錯誤,往往會出現(xiàn)AUGraph啟動失敗或者聲音異常等問題。比如,使用iOS內(nèi)置的麥克風或者有線耳機時,設備支持的采樣率比較高,44.1KHz 能正常工作,我們整條音頻通路上基本上都采用的是44.1KHz。但是當使用藍牙設備時,一般藍牙設備無法支持44.1KHz采集和播放,通常都是16KHz甚至更低。此時I/O Unit無法繼續(xù)使用之前的配置。需要按照實際支持的采樣率進行配置。

AudioUnit還要求兩個單元銜接處的音頻數(shù)據(jù)格式必須保持一致,當AUGraph中不同unit支持的格式不同時(比如在支持藍牙設備或者使用回聲消除模塊時,I/O unit要求的格式和其他單元的有可能不同),此時就需要分別設置格式,并通過格式轉(zhuǎn)換unit或mixer unit對格式進行轉(zhuǎn)換。

如果MaximumFramesPerSlice設置錯誤,可能會出現(xiàn)聲音異常的情況。 MaximumFramesPerSlice 表示的是每次回調(diào)送入或取出的音頻數(shù)據(jù)的長度,在AUGraph的所有節(jié)點的這個屬性也需要保持一致否則會導致有的unit丟棄數(shù)據(jù),而出現(xiàn)聲音異常 。

  1. 使用AudioUnit進行音效處理

這里所謂的音效處理,主要是指對原本的聲音進行一些改變,比如混響效果,變聲效果等。用到手段主要是數(shù)字信號處理提供的一系列時間和頻域的工具,將輸入的PCM數(shù)據(jù)經(jīng)過運算后得到變化后的聲音。

4.1 混響效果(reverberation)

我們在音樂廳,劇院,禮堂等比較空曠的室內(nèi)說話或唱歌時,往往能聽到和平時不一樣的聲音,主要是聲音在墻壁上多次反射后疊加在一起,聽起來就有了混響的效果。在聲音處理中,我們可以人為的將聲音緩存起來,延時一定時間后,和原聲音疊加,就能夠模擬出混響的效果。AudioUnit提供了kAudioUnitSubType_Reverb2來實現(xiàn)混響效果的生成。將該unit接入到AUGraph中之后,配置參數(shù)即可實現(xiàn)混響的效果。雖然混響原理是比較簡單,但實際上為了模擬自然界中實際的音效,計算過程還是相當復雜的,要模擬出不同的大小的空間,不同材質(zhì)的墻壁,障礙物的多少,需要輸入比較多的參數(shù)來參與運算。iOS的reverb unit提供了7個參數(shù)。我們在直播應用中提供了4個不同場景的模擬(錄音棚,演唱會,×××,小舞臺),主要是通過調(diào)整如下參數(shù)實現(xiàn)的:

kReverb2Param_DryWetMix混響效果聲的大小與空間大小無關,而只與空間內(nèi)雜物的多少以及墻壁及物體的材質(zhì)有關;

kReverb2Param_DecayTimeAt0Hz / kReverb2Param_DecayTimeAtNyquist衰減時間,整個混響的總長度,與空間大小比較相關,越空曠越長。

4.2 變聲效果

變聲效果主要是在頻域上對人的聲音進行一定的處理,我們知道男聲一般比較低沉,女聲比較尖銳,這個主要說的是音調(diào)。通過對聲音音調(diào)的調(diào)整,可以讓低沉的男聲聽上去像尖銳女聲。iOS提供了kAudioUnitSubType_NewTimePitch的unit來實現(xiàn)音調(diào)的調(diào)整。值得注意的是kAudioUnitSubType_NewTimePitch不是輸入Effect類的,而是屬于FormatConverter類的。通過設置TimePitch unit的kNewTimePitchParam_Pitch屬性即可。

/// pitchShift為具體數(shù)值(0表示不變,負數(shù)表明調(diào)低沉,正數(shù)調(diào)尖銳)AudioUnitSetParameter(pitchUnit, kNewTimePitchParam_Pitch, kAudioUnitScope_Global, 0, pitchShift, 0);

變男聲,需要強化突出低沉的特點,將音調(diào)調(diào)低,設置負數(shù)參數(shù)即可;

變女聲,需要強化突出尖銳的特點,將音調(diào)調(diào)高,設置正數(shù)即可;

機器人音效,機器人的音效是一個組合效果,我們印象中的機器人音效都是老電影中的那種,音調(diào)比較高,而且有重音。所以我們采用的是TimePitch unit + Delay unit的方式。Delay unit也是iOS提供的一個將聲音延時疊加的unit,但是比混音要簡單很多,只有單次疊加;

莊嚴宏大音效,想象一下佛祖之類的聲音,一般都是自帶回聲,而且比較男性化,所以我們選擇的是TimePitch unit + Reverb unit的方式來實現(xiàn)。

這里推薦一個自己調(diào)音效的參考軟件voxal voice changer。大家可以在這個軟件上自己將不同的工具組件組合起來,調(diào)試參數(shù),實時聽到參數(shù)對應的結(jié)果。當效果滿意后再移植到AudioUnit中。

iOS音頻采集過程中的音效實現(xiàn)
圖3 voixal voice changer

  1. 總結(jié)

以上大概介紹了怎么用AudioUnit來實現(xiàn)iOS直播中的音頻采集,怎么使用AudioUnit中的音效組件來實現(xiàn)混響和變聲效果。但是AudioUnit的潛力還遠沒有挖掘完,比如還可以將背景音樂播放,混音,回聲消除等其他移動多媒體音頻相關的功能納入到這個框架中。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

名稱欄目:iOS音頻采集過程中的音效實現(xiàn)-創(chuàng)新互聯(lián)
分享URL:http://jinyejixie.com/article34/deoppe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站制作、用戶體驗網(wǎng)站改版、網(wǎng)站排名面包屑導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
怀来县| 高淳县| 扶沟县| 蒙阴县| 新昌县| 会宁县| 南溪县| 藁城市| 丽水市| 上蔡县| 鱼台县| 高平市| 河津市| 台安县| 逊克县| 龙井市| 贵港市| 江北区| 孝昌县| 孝昌县| 龙井市| 阿克陶县| 舟山市| 龙井市| 赞皇县| 称多县| 清流县| 张家口市| 屏东市| 海丰县| 西和县| 锡林浩特市| 社会| 灌南县| 永定县| 宝坻区| 盖州市| 扎鲁特旗| 阿克陶县| 吐鲁番市| 讷河市|