本發(fā)明涉及音頻處理技術(shù),尤指一種實(shí)現(xiàn)音頻錄制的方法及終端。
背景技術(shù):
目前,采用手機(jī)或平板電腦進(jìn)行錄音或視頻拍攝時(shí),只能允許一項(xiàng)音頻錄制應(yīng)用進(jìn)行音頻錄制,音頻錄制應(yīng)用包括錄音、視頻拍攝等;例如、當(dāng)手機(jī)開(kāi)啟了錄音應(yīng)用進(jìn)行音頻錄制時(shí),視頻類(lèi)應(yīng)用將無(wú)法開(kāi)啟音頻錄制線程、或因?yàn)橐纛l錄制線程無(wú)法開(kāi)啟而無(wú)法進(jìn)行視頻類(lèi)應(yīng)用。另外,在進(jìn)行音頻錄制時(shí),無(wú)法開(kāi)啟需要語(yǔ)音輸入的語(yǔ)音相關(guān)類(lèi)應(yīng)用(例如、語(yǔ)音助手)。即系統(tǒng)只能允許一個(gè)音頻錄制線程處于開(kāi)啟狀態(tài),其他需要音頻錄制的應(yīng)用由于音頻錄制線程無(wú)法開(kāi)啟,無(wú)法進(jìn)行音頻錄制,甚至造成應(yīng)用無(wú)法開(kāi)啟。
以安卓系統(tǒng)的手機(jī)為例,假設(shè)用戶(hù)開(kāi)啟了錄音應(yīng)用,則在安卓系統(tǒng)框架層的AudioFlinger(安卓框架層中音頻主控服務(wù)的名稱(chēng))服務(wù)中,通過(guò)創(chuàng)建音頻錄制線程,錄音應(yīng)用可以從錄音設(shè)備的句柄中按照設(shè)定的采樣率和聲道數(shù)讀取錄音數(shù)據(jù)。而其它需要進(jìn)行音頻錄制的應(yīng)用由于錄音設(shè)備被占用而無(wú)法讀取音頻數(shù)據(jù),導(dǎo)致無(wú)法開(kāi)啟音頻錄制的線程;只有在占用錄音設(shè)備重新處于未被占用狀態(tài)時(shí),其它需要進(jìn)行音頻錄制的應(yīng)用才可以讀取錄音設(shè)備的音頻數(shù)據(jù),即只有錄音設(shè)備未被占用時(shí),才可以運(yùn)行音頻錄制線程。圖1為現(xiàn)有技術(shù)音頻錄制的流程圖,如圖1所示,應(yīng)用層包含錄音應(yīng)用1和一個(gè)或一個(gè)以上錄音應(yīng)用2,框架層錄音應(yīng)用1的音頻錄制線程1占用了錄音設(shè)備,音頻錄制線程1處于開(kāi)啟狀態(tài),并讀取音頻數(shù)據(jù);錄音應(yīng)用2的音頻錄制線程2由于無(wú)法讀取音頻數(shù)據(jù),只能處于等待狀態(tài);這里,錄音應(yīng)用2可以是一個(gè)或一個(gè)以上除錄音應(yīng)用1以外的其他錄音應(yīng)用。由于音頻錄制線程1占用了錄音設(shè)備,因此音頻錄制線程2被阻塞,無(wú)法獲得音頻數(shù)據(jù)。
綜上,目前進(jìn)行音頻錄制時(shí),系統(tǒng)只允許一個(gè)音頻錄制線程通過(guò)錄音設(shè)備獲取音頻數(shù)據(jù),即只允許一個(gè)音頻錄制線程處于開(kāi)啟狀態(tài),多個(gè)音頻錄制 應(yīng)用無(wú)法同時(shí)進(jìn)行音頻錄制,影響了用戶(hù)同時(shí)使用錄音、視頻拍攝以及語(yǔ)音相關(guān)類(lèi)應(yīng)用的音頻錄制功能,影響用戶(hù)體驗(yàn)。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供一種實(shí)現(xiàn)音頻錄制的方法及終端,能夠同時(shí)使用錄音、視頻拍攝以及語(yǔ)音相關(guān)類(lèi)應(yīng)用的音頻錄制功能。
為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種實(shí)現(xiàn)音頻錄制的方法,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),包括:
開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);
各音頻錄制應(yīng)用的音頻錄制線程分別讀取共享音頻數(shù)據(jù);
各音頻錄制應(yīng)用分別重采樣各自讀取的共享音頻數(shù)據(jù),獲得所需的音頻數(shù)據(jù)。
進(jìn)一步地,按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)具體包括:
所述共享音頻錄制線程按照最大比特率和最大聲道數(shù)從錄音設(shè)備中讀取所述音頻數(shù)據(jù)。
進(jìn)一步地,存儲(chǔ)讀取的所述音頻數(shù)據(jù)具體包括:
將讀取的所述音頻數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)域。
進(jìn)一步地,重采樣共享音頻數(shù)據(jù)具體包括:
根據(jù)音頻錄制應(yīng)用的比特率和聲道數(shù)重采樣讀取的所述共享音頻數(shù)據(jù)。
進(jìn)一步地,該方法還包括:
當(dāng)所述音頻錄制應(yīng)用均關(guān)閉時(shí),關(guān)閉所述共享音頻錄制線程。
另一方面,本申請(qǐng)還提供一種實(shí)現(xiàn)音頻錄制的終端,包括:共享單元、與音頻錄制應(yīng)用成一一對(duì)應(yīng)關(guān)系的音頻錄制單元,其中,
共享單元,用于一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);
各音頻錄制單元分別包括相應(yīng)的讀取模塊和重采樣模塊;其中,
讀取模塊用于,音頻錄制應(yīng)用開(kāi)啟時(shí),讀取共享音頻數(shù)據(jù);
重采樣模塊用于,重采樣讀取的共享音頻數(shù)據(jù),獲得所需的音頻數(shù)據(jù)。
進(jìn)一步地,共享單元具體用于,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟所述共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照最大比特率和最大聲道數(shù)從所述錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為所述共享音頻數(shù)據(jù)。
進(jìn)一步地,共享單元具體用于,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù),并將讀取的所述音頻數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)域。
進(jìn)一步地,重采樣模塊具體用于,
根據(jù)音頻錄制應(yīng)用的比特率和聲道數(shù)重采樣讀取的所述共享音頻數(shù)據(jù)。
進(jìn)一步地,該終端還包括關(guān)閉單元,用于當(dāng)所述音頻錄制應(yīng)用均關(guān)閉時(shí),關(guān)閉所述共享音頻錄制線程。
與現(xiàn)有技術(shù)相比,本申請(qǐng)技術(shù)方案包括:一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);各音頻錄制應(yīng)用的音頻錄制線程分別讀取共享音頻數(shù)據(jù);各音頻錄制應(yīng)用分別重采樣各自讀取的共享音頻數(shù)據(jù),獲得所需的音頻數(shù)據(jù)。本發(fā)明方法通過(guò)共享音頻錄制線程讀取得到的共享音頻數(shù)據(jù),多個(gè)音頻錄制應(yīng)用均可開(kāi)啟音頻錄制線程讀取共享音頻數(shù)據(jù),避免了音頻錄制線程由于錄音設(shè)備被占用無(wú)法開(kāi)啟的問(wèn)題;多個(gè)音頻錄制應(yīng)用通過(guò)重采樣獲得各自所需的音頻數(shù)據(jù),實(shí)現(xiàn)了錄音、視頻拍攝和語(yǔ)音相關(guān)類(lèi)應(yīng)用的同時(shí)使用,提高了影響用戶(hù)體驗(yàn)。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1為現(xiàn)有技術(shù)音頻錄制的流程圖;
圖2為本發(fā)明實(shí)現(xiàn)音頻錄制的方法的流程圖;
圖3為本發(fā)明實(shí)現(xiàn)音頻錄制的終端的結(jié)構(gòu)程圖;
圖4為本發(fā)明第二實(shí)施例的方法流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
圖2為本發(fā)明實(shí)現(xiàn)音頻錄制的方法的流程圖,如圖2所示,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),包括:
步驟200、開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);
本步驟中,按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)具體包括:
共享音頻錄制線程按照最大比特率和最大聲道數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)。
存儲(chǔ)讀取的音頻數(shù)據(jù)具體包括:
將讀取的音頻數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)域。
步驟201、各音頻錄制應(yīng)用的音頻錄制線程分別讀取共享音頻數(shù)據(jù);
步驟202、各音頻錄制應(yīng)用分別重采樣各自讀取的共享音頻數(shù)據(jù),獲得所需的音頻數(shù)據(jù)。
本步驟中,重采樣共享音頻數(shù)據(jù)具體包括:
根據(jù)音頻錄制應(yīng)用的比特率和聲道數(shù)重采樣讀取的共享音頻數(shù)據(jù)。
本發(fā)明方法還包括:
當(dāng)音頻錄制應(yīng)用均關(guān)閉時(shí),關(guān)閉共享音頻錄制線程。
本發(fā)明方法通過(guò)共享音頻錄制線程讀取得到的共享音頻數(shù)據(jù),多個(gè)音頻錄制應(yīng)用均可開(kāi)啟音頻錄制線程讀取共享音頻數(shù)據(jù),避免了音頻錄制線程由于錄音設(shè)備被占用無(wú)法開(kāi)啟的問(wèn)題;多個(gè)音頻錄制應(yīng)用通過(guò)重采樣獲得各自 所需的音頻數(shù)據(jù),實(shí)現(xiàn)了錄音、視頻拍攝和語(yǔ)音相關(guān)類(lèi)應(yīng)用的同時(shí)使用,提高了影響用戶(hù)體驗(yàn)。
圖3為本發(fā)明實(shí)現(xiàn)音頻錄制的終端的結(jié)構(gòu)程圖,如圖3所示,包括:共享單元、與音頻錄制應(yīng)用成一一對(duì)應(yīng)關(guān)系的音頻錄制單元,其中,
共享單元,用于一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);
各音頻錄制單元分別包括相應(yīng)的讀取模塊和重采樣模塊;其中,
共享單元具體用于,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照最大比特率和最大聲道數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù)。
共享單元具體用于,一個(gè)或一個(gè)以上音頻錄制應(yīng)用開(kāi)啟時(shí),開(kāi)啟共享音頻錄制線程,并通過(guò)共享音頻錄制線程按照共享參數(shù)從錄音設(shè)備中讀取音頻數(shù)據(jù),并將讀取的音頻數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)域。
讀取模塊用于,音頻錄制應(yīng)用開(kāi)啟時(shí),讀取共享音頻數(shù)據(jù);
重采樣模塊用于,重采樣讀取的共享音頻數(shù)據(jù),獲得所需的音頻數(shù)據(jù)。
重采樣模塊具體用于,
根據(jù)音頻錄制應(yīng)用的比特率和聲道數(shù)重采樣讀取的共享音頻數(shù)據(jù)。
本發(fā)明終端還包括關(guān)閉單元,用于當(dāng)音頻錄制應(yīng)用均關(guān)閉時(shí),關(guān)閉共享音頻錄制線程。
以下通過(guò)具體實(shí)施例對(duì)本發(fā)明方法進(jìn)行清楚詳細(xì)的說(shuō)明,實(shí)施例僅用于陳述本發(fā)明,并不用于限定本發(fā)明方法的保護(hù)范圍。
實(shí)施例1
本實(shí)施例以安卓系統(tǒng)的終端為例,音頻錄制線程基于安卓系統(tǒng)框架層的錄音設(shè)備(AudioFlinger)服務(wù);
當(dāng)只有一個(gè)音頻錄制應(yīng)用開(kāi)啟時(shí),AudioFlinger創(chuàng)建并開(kāi)啟共享音頻錄制線程,共享音頻錄制線程按照最大比特率和最大聲道數(shù)從錄音設(shè)備中讀取 音頻數(shù)據(jù)并存儲(chǔ)為共享音頻數(shù)據(jù);本實(shí)施例將共享音頻數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)域。本實(shí)施例,共享音頻錄制線程讀取的比特率和聲道數(shù)通過(guò)預(yù)先進(jìn)行設(shè)定實(shí)施。
音頻錄制應(yīng)用開(kāi)啟的音頻錄制線程從共享存儲(chǔ)區(qū)域讀取共享音頻數(shù)據(jù)后,根據(jù)音頻錄制應(yīng)用自身的比特率和聲道數(shù)重采樣共享音頻數(shù)據(jù),獲得音頻錄制應(yīng)用所需的音頻數(shù)據(jù)。重采樣本領(lǐng)域技術(shù)人員的慣用技術(shù)手段,可以從高比特率和高聲道數(shù)的音頻數(shù)據(jù)中采用獲得低比特率和低聲道數(shù)的音頻數(shù)據(jù)。
根據(jù)本實(shí)施例方法,系統(tǒng)中一旦出現(xiàn)音頻錄制應(yīng)用開(kāi)啟,共享音頻錄制線程就會(huì)進(jìn)行讀取錄音設(shè)備的音頻數(shù)據(jù)存儲(chǔ)得到共享音頻數(shù)據(jù),由于共享音頻數(shù)據(jù)是按照最大比特率和最大聲道數(shù)從錄音設(shè)備獲得的音頻數(shù)據(jù),因此,系統(tǒng)中的音頻錄制應(yīng)用都可以根據(jù)自身的比特率和聲道數(shù)對(duì)共享音頻數(shù)據(jù)進(jìn)行重采樣,獲得相應(yīng)的所需的音頻數(shù)據(jù)。當(dāng)系統(tǒng)中所有音頻錄制應(yīng)用均關(guān)閉時(shí),共享音頻錄制線程相應(yīng)停止。
本實(shí)施例方法無(wú)論有多少音頻錄制應(yīng)用需要獲取音頻數(shù)據(jù),均可以通過(guò)各自開(kāi)啟的音頻錄制線程讀取共享音頻數(shù)據(jù),即無(wú)需讀取錄音設(shè)備的音頻數(shù)據(jù),只需讀取共享音頻數(shù)據(jù)進(jìn)行重采樣即可,多個(gè)音頻錄制應(yīng)用可以同時(shí)進(jìn)行音頻錄制,無(wú)需等待,提高了音頻錄制的工作效率,提升了用戶(hù)使用體驗(yàn)。
實(shí)施例2
在現(xiàn)有的安卓操作系統(tǒng)框架層,當(dāng)音頻錄制應(yīng)用需要開(kāi)啟時(shí),AudioFlinger會(huì)接收音頻錄制應(yīng)用的音頻錄制請(qǐng)求,在AudioFlinger中創(chuàng)建并開(kāi)啟音頻錄制線程從錄音設(shè)備讀取音頻數(shù)據(jù),每個(gè)音頻錄制應(yīng)用在AudioFlinger中都包含有相應(yīng)的音頻錄制線程,音頻錄制線程中包含有一個(gè)音頻輸入流對(duì)象,代表了打開(kāi)的錄制設(shè)備的句柄,音頻錄制線程就是通過(guò)音頻輸入流對(duì)象從錄音設(shè)備讀取音頻數(shù)據(jù);由于錄音設(shè)備只能供一個(gè)音頻錄制線程使用,所以只能由一個(gè)音頻錄制線程從音頻設(shè)備的音頻輸入流中讀取音頻數(shù)據(jù),即只能有一個(gè)音頻錄制線程可以正常工作。
本實(shí)施例共享音頻錄制線程實(shí)在出現(xiàn)音頻錄制應(yīng)用開(kāi)啟時(shí)觸發(fā)建立的線程,音頻錄制應(yīng)用包含有相應(yīng)的音頻錄制線程,用于讀取共享音頻數(shù)據(jù)后, 重采樣獲得所需的音頻數(shù)據(jù)。
共享音頻數(shù)據(jù)通過(guò)共享音頻錄制線程的線程循環(huán)(ThreadLoop)方法循環(huán)運(yùn)行,以按照最大采樣率和最大聲道數(shù)從錄音設(shè)備中讀取共享音頻數(shù)據(jù),讀取到共享音頻數(shù)據(jù)后,將共享音頻數(shù)據(jù)寫(xiě)入共享存儲(chǔ)區(qū)域中,供音頻錄制應(yīng)用的音頻錄制線程進(jìn)行讀取。
最后,將讀取的共享音頻數(shù)據(jù)按照音頻錄制應(yīng)用的采樣率和聲道數(shù)進(jìn)行重采樣,獲得需要的音頻數(shù)據(jù)。發(fā)送獲得的需要的音頻數(shù)據(jù)到音頻錄制應(yīng)用。
共享音頻錄制線程在讀取音頻設(shè)備的共享音頻數(shù)據(jù)時(shí),會(huì)進(jìn)行是否包含其他開(kāi)啟的音頻錄制線程的判斷;包含時(shí),繼續(xù)讀取共享音頻數(shù)據(jù);不包含時(shí),停止讀取共享音頻數(shù)據(jù)。
音頻錄制應(yīng)用的音頻錄制線程的ThreadLoop方法中,音頻錄制線程讀取共享音頻數(shù)據(jù)后,因?yàn)楣蚕硪纛l數(shù)據(jù)是按照最大的采樣率和最大聲道數(shù)去讀取錄音設(shè)備的音頻數(shù)據(jù),所以可以依照音頻錄制應(yīng)用的采樣率和聲道數(shù)進(jìn)行重采樣,然后將重采樣后的需要的音頻數(shù)據(jù)發(fā)送給音頻錄制應(yīng)用,音頻錄制線程的生命周期與沒(méi)有變化,只是讀取音頻數(shù)據(jù)的位置不同,讀取音頻數(shù)據(jù)后增加了重采樣的處理。
圖4為本發(fā)明第二實(shí)施例的方法流程圖,如圖4所示,包括:
步驟400、音頻錄制應(yīng)用向AudioFlinger發(fā)送音頻錄制請(qǐng)求。
步驟401、AudioFlinger創(chuàng)建并開(kāi)啟共享音頻錄制線程,創(chuàng)建并開(kāi)啟音頻錄制應(yīng)用的音頻錄制線程;
步驟402、共享音頻錄制線程按照ThreadLoop方法讀取錄音設(shè)備的輸入流作為共享音頻數(shù)據(jù);
步驟403、將讀取的共享音頻數(shù)據(jù)存儲(chǔ)到共享存儲(chǔ)區(qū)域;
步驟404、音頻錄制應(yīng)用的音頻錄制線程讀取存儲(chǔ)的共享音頻數(shù)據(jù),重采樣共享音頻數(shù)據(jù);
步驟405、重采樣共享音頻數(shù)據(jù)獲得的音頻數(shù)據(jù)發(fā)往音頻錄制應(yīng)用,作為音頻錄制應(yīng)用所需的音頻數(shù)據(jù)。
本實(shí)施例,共享音頻錄制線程的生命周期根據(jù)是否存在開(kāi)啟的音頻錄制 應(yīng)用進(jìn)行確定,音頻錄制應(yīng)用的生命周期保持不變。
雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專(zhuān)利保護(hù)范圍,仍須以所附的權(quán)利要求書(shū)所界定的范圍為準(zhǔn)。