本發(fā)明涉及即時通信技術(shù)領(lǐng)域,特別是涉及一種音頻數(shù)據(jù)處理方法和裝置。
背景技術(shù):
隨著網(wǎng)絡技術(shù)和移動互聯(lián)的進步,即時通信技術(shù)迅速發(fā)展,如微信、skype、line等等應用程序應運而出。但是,在某些特定場合、特定時間,用戶需要偽造其所處的場景來保護個人隱私。為了實現(xiàn)這種效果,需要在語音聊天過程中添加背景音,如火車站的嘈雜音、ktv的歌聲、海邊的海浪聲等等。
在現(xiàn)有技術(shù)中,有些用于錄音的應用程序能夠給音頻數(shù)據(jù)添加背景音,其實現(xiàn)原理如圖1所示,在應用層的錄音應用啟動后,在native層(框架層)創(chuàng)建與該錄音應用對應的錄音線程,錄音線程從驅(qū)動層的音頻輸入設備讀取音頻數(shù)據(jù),然后錄音線程將錄制完畢得到的完整音頻數(shù)據(jù)送到應用層,在應用層對音頻數(shù)據(jù)和背景音進行混音操作,并將處理完成的數(shù)據(jù)呈現(xiàn)給用戶。
但是,現(xiàn)有技術(shù)不能實現(xiàn)實時混音,必須在錄音結(jié)束后將完整的音頻數(shù)據(jù)采集到應用層,并在應用層將音頻數(shù)據(jù)和背景音混音,而且在現(xiàn)有技術(shù)中,因為添加背景音在應用層中由應用操作完成,如果應用不具備添加背景音的功能,則其音頻數(shù)據(jù)將不能夠添加背景音。所以,現(xiàn)有為音頻數(shù)據(jù)添加背景音的方法局限性較大。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種音頻數(shù)據(jù)處理方法和裝置,用以解決在應用層為音頻數(shù)據(jù)添加背景音局限性較大的問題。
針對上述技術(shù)問題,本發(fā)明是通過以下技術(shù)方案來解決的。
本發(fā)明提供了一種音頻數(shù)據(jù)處理方法,在native層執(zhí)行的所述方法包括:實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù);將所述第一音頻數(shù)據(jù)和預設的第二音頻數(shù)據(jù)進行混音處理,得到混音數(shù)據(jù);對所述混音數(shù)據(jù)進行采樣處理,并傳遞給應用層的應用程序。
其中,所述實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù),包括:在應用層的所述應用程序啟動之后,創(chuàng)建與所述應用程序?qū)匿浺艟€程;通過所述錄音線程實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù)。
其中,所述第一音頻數(shù)據(jù)的音頻參數(shù)與所述第二音頻數(shù)據(jù)的音頻參數(shù)相同。
其中,預設的所述第二音頻數(shù)據(jù)為第二音頻數(shù)據(jù)流;所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)形成第一音頻數(shù)據(jù)流;將所述第一音頻數(shù)據(jù)和預設的第二音頻數(shù)據(jù)進行混音處理,得到混音數(shù)據(jù),包括:在所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)的過程中,將所述第一音頻數(shù)據(jù)流和所述第二音頻數(shù)據(jù)流進行實時地混音處理,得到混音數(shù)據(jù)。
其中,對所述混音數(shù)據(jù)進行采樣處理,并傳遞給應用層的應用程序,包括:根據(jù)所述應用程序所需的音頻參數(shù),對所述混音數(shù)據(jù)進行采樣處理;將采樣處理后的所述混音數(shù)據(jù)寫入共享內(nèi)存中,以便通過所述共享內(nèi)存將所述混音數(shù)據(jù)提供給所述應用程序。
本發(fā)明還提供了一種音頻數(shù)據(jù)處理裝置,包括:讀取模塊,用于在native層實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù);混音模塊,用于在native層將所述第一音頻數(shù)據(jù)和預設的第二音頻數(shù)據(jù)進行混音處理,得到混音數(shù)據(jù);傳遞模塊,用于在native層對所述混音數(shù)據(jù)進行采樣處理,并傳遞給應用層的應用程序。
其中,所述讀取模塊用于:在應用層的所述應用程序啟動之后,在native層創(chuàng)建與所述應用程序?qū)匿浺艟€程;通過在native層的所述錄音線程實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù)。
其中,所述第一音頻數(shù)據(jù)的音頻參數(shù)與所述第二音頻數(shù)據(jù)的音頻參數(shù)相同。
其中,預設的所述第二音頻數(shù)據(jù)為第二音頻數(shù)據(jù)流;所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)形成第一音頻數(shù)據(jù)流;所述混音模塊,用于在所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)的過程中,將所述第一音頻數(shù)據(jù)流和所述第二音頻數(shù)據(jù)流進行實時地混音處理,得到混音數(shù)據(jù)。
其中,所述傳遞模塊用于根據(jù)所述應用程序所需的音頻參數(shù),在native層對所述混音數(shù)據(jù)進行采樣處理;將采樣處理后的所述混音數(shù)據(jù)寫入共享內(nèi)存中,以便通過所述共享內(nèi)存將所述混音數(shù)據(jù)提供給所述應用程序。
本發(fā)明有益效果如下:
本發(fā)明在native層中實時地為音頻數(shù)據(jù)添加背景音,應用程序具備錄音功能即可,無需應用程序本身具備添加背景音的功能,因此本發(fā)明克服了在應用層為音頻數(shù)據(jù)添加背景音所帶來的局限性。
附圖說明
圖1是現(xiàn)有為音頻數(shù)據(jù)添加背景音的原理示意圖;
圖2是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理方法流程圖;
圖3是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理原理示意圖;
圖4是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理時序示意圖;
圖5是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理裝置結(jié)構(gòu)圖。
具體實施方式
本發(fā)明在native層中實時地為音頻數(shù)據(jù)添加背景音,無需應用程序本身具備添加背景音的功能,因此本發(fā)明克服了在應用層為音頻數(shù)據(jù)添加背景音所帶來的局限性。
以下結(jié)合附圖以及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
本發(fā)明實施例提供了一種音頻數(shù)據(jù)處理方法,下面參照圖2和圖3對本實施例所述的方法進行說明。其中,圖2是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理方法流程圖。圖3是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理原理示意圖。本實施例在native層執(zhí)行。
步驟s210,實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù)。
存在為第一音頻數(shù)據(jù)添加第二音頻數(shù)據(jù)(如圖3中的背景音)需求的應用程序運行在應用層;在應用層的該應用程序啟動之后,在native層中創(chuàng)建與該應用程序?qū)匿浺艟€程;驅(qū)動層的音頻輸入設備在采集第一音頻數(shù)據(jù)的過程中,在native層中,通過該錄音線程實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù)。
錄音線程實時讀取的第一音頻數(shù)據(jù)為音頻數(shù)據(jù)流,錄音線程可以不斷地將讀取的第一音頻數(shù)據(jù)存入混音緩存中。例如:用戶使用安裝在終端系統(tǒng)中的即時通信應用與其他用戶通話,該終端系統(tǒng)驅(qū)動層的音頻輸入設備采集用戶輸入的語音(第一音頻數(shù)據(jù)),在該終端系統(tǒng)的native層,在用戶輸入語音的過程中,實時地讀取該語音,讀取的語音可以形成包含用戶通話內(nèi)容的第一音頻數(shù)據(jù)流。
步驟s220,將該第一音頻數(shù)據(jù)和預設的第二音頻數(shù)據(jù)進行混音處理,得到混音數(shù)據(jù)。
第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)的編碼格式都為脈沖編碼調(diào)制(pulsecodemodulation,簡稱pcm)。
預設的第二音頻數(shù)據(jù)為一段第二音頻數(shù)據(jù)流,如:火車站嘈雜的聲音、車流的聲音等;錄音線程實時讀取第一音頻數(shù)據(jù)也可以形成音頻數(shù)據(jù)流。獲取預設的第二音頻數(shù)據(jù)流;將第一音頻數(shù)據(jù)流和第二音頻數(shù)據(jù)流進行實時地混音處理,得到混音數(shù)據(jù)。
將混音緩存中的第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)進行混音處理,混音處理完成即在混音緩存中刪除該第一音頻數(shù)據(jù),那么,混音緩存中的第一音頻數(shù)據(jù)流 是動態(tài)地、不間斷地,實時地將混音緩存中緩存時間最早的第一音頻數(shù)據(jù)與第二音頻數(shù)據(jù)流中對應位置的第二音頻數(shù)據(jù)進行混音處理,這樣就可以在native層不斷地合成混音數(shù)據(jù)。將得到的混音數(shù)據(jù)不斷地送入重采樣緩存中。
為了便于將第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)混音,錄音線程讀取的第一音頻數(shù)據(jù)的音頻參數(shù)與第二音頻數(shù)據(jù)的音頻參數(shù)相同。音頻參數(shù)包括:比特率和聲道數(shù)。例如:第二音頻數(shù)據(jù)采用最大比特率和最大聲道數(shù),那么錄音線程從音頻輸入設備讀取最大比特率和最大聲道數(shù)的第一音頻數(shù)據(jù)。
在執(zhí)行混音處理時,可以采用歸一化的方式混音,這樣既可以避免算法過于復雜,又不會造成音頻數(shù)據(jù)的嚴重衰減。
步驟s230,對該混音數(shù)據(jù)進行采樣處理,并傳遞給應用層的應用程序。
根據(jù)應用程序所需的音頻參數(shù),對所述混音數(shù)據(jù)進行采樣處理;將采樣處理后的混音數(shù)據(jù)寫入共享內(nèi)存中,以便通過該共享內(nèi)存將混音數(shù)據(jù)提供給應用程序。進一步地,共享內(nèi)存位于native層,錄音線程將采樣后的混音數(shù)據(jù)寫入共享內(nèi)容,并將共享內(nèi)存中的混音數(shù)據(jù)傳遞給位于應用層的應用程序。
采樣后的混音數(shù)據(jù)的音頻參數(shù)和應用程序的音頻參數(shù)相同。例如:應用程序的音頻參數(shù)為8k采樣率、單聲道,那么將48k采樣率、雙聲道的混音數(shù)據(jù)重采樣為8k采樣率、單聲道的混音數(shù)據(jù)。
由于錄音線程需要不斷地從驅(qū)動層讀取第一音頻數(shù)據(jù)并送往應用層,所以第一音頻數(shù)據(jù)在native層的混音是實時性的,即在第一音頻數(shù)據(jù)向上層傳送過程中快速完成了混音操作。
本發(fā)明可以對第一音頻數(shù)據(jù)進行實時性地混音,并且不要求應用程序一定具備為第一音頻數(shù)據(jù)添加背景音的功能,僅需應用程序具備采集第一音頻數(shù)據(jù)的功能即可在native層實現(xiàn)對第一音頻數(shù)據(jù)的混音,因此,基于本發(fā)明,即便是不具備為第一音頻數(shù)據(jù)添加背景音功能的第三方應用程序,也可以實現(xiàn)為第一音頻數(shù)據(jù)添加背景音,克服應用層混音的局限性。
圖4是根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)處理時序示意圖。
本實施例基于具有錄音功能的安卓(android)操作系統(tǒng),利用android操作系統(tǒng)native層的audioflinger服務,在native層中實時地為第一音頻數(shù)據(jù)添加第二音頻數(shù)據(jù)。
1,應用層的應用程序啟動。
該應用程序例如即時通信應用,如:微信、qq等。
應用程序啟動,并調(diào)用用于錄音的應用程序編程接口(applicationprogramminginterface,簡稱api)。例如:調(diào)用audiorecord錄音。
2,native層的audioflinger服務創(chuàng)建應用程序?qū)匿浺艟€程。
每個應用程序的錄音進程在audioflinger中都有一個錄音線程與之對應,錄音線程中包含音頻輸入流對象,該音頻輸入流對象代表了打開的音頻輸入設備的句柄,錄音線程可以通過音頻輸入流對象從音頻輸入設備讀取第一音頻數(shù)據(jù)。
3,native層的錄音線程向audioflinger服務返回錄音線程句柄。
4,native層audioflinger服務將錄音線程句柄發(fā)送給應用層的應用程序。
在應用程序、audioflinger服務、錄音線程、音頻輸入設備之間就形成了錄音通路;基于該錄音通路可以在native層為第一音頻數(shù)據(jù)添加背景音。
5,應用層的的應用程序觸發(fā)第一音頻數(shù)據(jù)采集。
6,native層的錄音線程開始運行。
7,native層的錄音線程循環(huán)threadloop啟動。
8,native層的錄音線程在該循環(huán)中不斷從驅(qū)動層的音頻輸入設備讀取第一音頻數(shù)據(jù)。
audioflinger創(chuàng)建的錄音線程在threadloop函數(shù)中執(zhí)行,在threadloop方法中,錄音線程循環(huán)地從音頻輸入流對象中讀取第一音頻數(shù)據(jù),循環(huán)讀取的第一音頻數(shù)據(jù)形成第一音頻數(shù)據(jù)流。
該第一音頻數(shù)據(jù)的音頻參數(shù)和即將與之混音的第二音頻數(shù)據(jù)的音頻參數(shù) 相同。本實施例優(yōu)選地,第二音頻數(shù)據(jù)采用最大比特率和最大聲道數(shù),那么錄音線程從音頻輸入設備讀取最大比特率和最大聲道數(shù)的第一音頻數(shù)據(jù)。
具體的,由于錄音線程讀取的第一音頻數(shù)據(jù)的音頻參數(shù)取決于錄音線程,所以無論應用層的應用程序所需的音頻參數(shù)是多大,可以在框架層強制設定錄音線程以android操作系統(tǒng)所支持的最大音頻參數(shù)從音頻輸入設備中讀取第一音頻數(shù)據(jù),這樣第一音頻數(shù)據(jù)音頻參數(shù)為android操作系統(tǒng)所支持的最大音頻參數(shù)。第二音頻數(shù)據(jù)為預設的音頻數(shù)據(jù),如:第二音頻數(shù)據(jù)為包含一定背景情況的背景音數(shù)據(jù),第二音頻數(shù)據(jù)也預設為android操作系統(tǒng)所支持的最大音頻參數(shù)。這樣保證了第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)的音頻參數(shù)相同,利于混音操作。第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)都設為最大音頻參數(shù),利于混音后的重采樣操作。
9、native層的錄音線程得到第一音頻數(shù)據(jù),并存儲在混音緩存buffer中。
10,native層的錄音線程對buffer中的第一音頻數(shù)據(jù)和第二音頻數(shù)據(jù)執(zhí)行混音操作,并將得到的混音數(shù)據(jù)存儲在重采樣緩存rsmbuffer中。
11,native層的錄音線程對rsmbuffer中的混音數(shù)據(jù)執(zhí)行采樣處理。
12,native層的錄音線程將采樣后的混音數(shù)據(jù)拷貝到共享內(nèi)存。
13,native層的錄音線程將該共享內(nèi)存中的混音數(shù)據(jù)傳遞給應用層的應用程序。
14,應用層的應用程序得到該混音數(shù)據(jù)。
用戶在使用增加了本發(fā)明為第一音頻數(shù)據(jù)添加背景音的方法的android系統(tǒng)終端時,可以給任何帶錄音功能的應用程序的錄音添加背景音。
本發(fā)明提供了一種音頻數(shù)據(jù)處理裝置,如圖5所示,為根據(jù)本發(fā)明一實施例的音頻數(shù)據(jù)添處理裝置結(jié)構(gòu)圖。所述裝置設置在終端中。該終端可以是移動終端、平板電腦等。終端運行的可以是android系統(tǒng)。
讀取模塊510,用于在native層實時地從驅(qū)動層讀取音頻輸入設備采集的 第一音頻數(shù)據(jù)。
混音模塊520,用于在native層將所述第一音頻數(shù)據(jù)和預設的第二音頻數(shù)據(jù)進行混音處理,得到混音數(shù)據(jù)。
傳遞模塊530,用于在native層對所述混音數(shù)據(jù)進行采樣處理,并傳遞給應用層的應用程序。
讀取模塊510,用于在應用層的所述應用程序啟動之后,在native層創(chuàng)建與所述應用程序?qū)匿浺艟€程;通過在native層的所述錄音線程實時地從驅(qū)動層讀取音頻輸入設備采集的第一音頻數(shù)據(jù)。所述錄音線程讀取的所述第一音頻數(shù)據(jù)的音頻參數(shù)與所述第二音頻數(shù)據(jù)的音頻參數(shù)相同。
預設的所述第二音頻數(shù)據(jù)為第二音頻數(shù)據(jù)流;所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)形成第一音頻數(shù)據(jù)流;混音模塊520,用于在所述錄音線程實時地讀取所述第一音頻數(shù)據(jù)的過程中,將所述第一音頻數(shù)據(jù)流和所述第二音頻數(shù)據(jù)流進行實時地混音處理,得到混音數(shù)據(jù)。
傳遞模塊530,用于根據(jù)所述應用程序所需的音頻參數(shù),在native層對所述混音數(shù)據(jù)進行采樣處理;將采樣處理后的所述混音數(shù)據(jù)寫入應用層和native層的共享內(nèi)存中,以便通過所述共享內(nèi)存將所述混音數(shù)據(jù)提供給所述應用程序。
本實施例所述的裝置的功能已經(jīng)在圖1-圖4所示的方法實施例中進行了描述,故本實施例的描述中未詳盡之處,可以參見前述實施例中的相關(guān)說明,在此不做贅述。
盡管為示例目的,已經(jīng)公開了本發(fā)明的優(yōu)選實施例,本領(lǐng)域的技術(shù)人員將意識到各種改進、增加和取代也是可能的,因此,本發(fā)明的范圍應當不限于上述實施例。