本發(fā)明涉及移動終端技術(shù)領(lǐng)域,尤其涉及一種終端的麥克風(fēng)的數(shù)據(jù)處理方法和具有麥克風(fēng)的終端。
背景技術(shù):
在移動互聯(lián)網(wǎng)時代,隨著智能終端的推廣和普及,終端的錄音功能愈來愈智能化。例如在Android系統(tǒng)中,錄音機(jī),語音識別,語音搜索,視頻通話等應(yīng)用都會用到麥克風(fēng)的錄音功能。
參考圖1所示,現(xiàn)有技術(shù)中應(yīng)用獲取錄音的過程主要包括以下幾個模塊:應(yīng)用(Application)、操作系統(tǒng)的錄音模塊、硬件抽象層(HAL)、錄音硬件部分(Hardware)(包括麥克風(fēng)和DSP等,為了便于描述以下都用麥克風(fēng)代替錄音硬件部分進(jìn)行簡單說明)。其中,應(yīng)用包括錄音機(jī)、語音輸入、語音搜索等需要錄制聲音的應(yīng)用,應(yīng)用開啟錄音功能;操作系統(tǒng)的錄音模塊屬于Android操作系統(tǒng),包括Framework應(yīng)用框架,用于傳遞錄音開啟命令和錄音數(shù)據(jù);HAL是位于操作系統(tǒng)內(nèi)核(Linux內(nèi)核驅(qū)動)與上層錄音模塊之間的接口層,其目的在于將硬件抽象化;麥克風(fēng)用于根據(jù)錄音開啟命令采集錄音數(shù)據(jù)。具體的操作系統(tǒng)包括:Java接口、JNI接口(C++與Java之間的接口)、AudioRecord.cpp(Android錄音代碼)、C++錄音框架(AudioRecordThread)等。
現(xiàn)有技術(shù)應(yīng)用獲取錄音的方式有兩種,一種是通過Java接口的MediaRecorder(Android框架中的類)方式獲取到編碼過的數(shù)據(jù)(如錄音機(jī),錄像等應(yīng)用),另一種是通過Java接口的AudioRecord(Android框架中的類)獲取原始的數(shù)據(jù)(如語音識別,語音指令,語音搜索,視頻通話,語音輸入法等應(yīng)用)。兩種方式的差別在上述的錄音過程的Java接口->JNI(C++與Java之間的接口)->錄音框架部分。
方式一是MediaRecorder方式,具體為:應(yīng)用->MediaRecorder(java)->MediaRecorder(JNI)->編碼部分(StagefrightRecorder)->AudioRecord.cpp->AudioRecordThread->HAL->麥克風(fēng)。
方式二是AudioRecord方式,具體為:應(yīng)用->AudioRecord(java)->AudioRecord(JNI)->AudioRecord.cpp->AudioRecordThread->HAL->麥克風(fēng)。
應(yīng)用程序各式各樣,每個應(yīng)用可能會有不同的需求,因而會設(shè)置不同的錄音參數(shù)等。相應(yīng)的錄音參數(shù)會通過上述過程傳遞給麥克風(fēng),當(dāng)麥克風(fēng)收到錄音開啟指令之后,會按照應(yīng)用下達(dá)的錄音參數(shù)開啟,然后將采集到的錄音數(shù)據(jù)按照與上述順序相反的順序從麥克風(fēng)傳輸至應(yīng)用。當(dāng)麥克風(fēng)正以一應(yīng)用設(shè)置的固定錄音參數(shù)運行采集錄音數(shù)據(jù)的過程中,如果有第二個應(yīng)用要開啟錄音功能,這時為防止參數(shù)沖突,會阻止第二個應(yīng)用開啟錄音功能,操作系統(tǒng)將會報錯,第二個應(yīng)用無法開啟錄音功能,以至于無法獲取麥克風(fēng)的錄音數(shù)據(jù)。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施例提供一種終端的麥克風(fēng)的數(shù)據(jù)處理方法和具有麥克風(fēng)的終端,用以解決現(xiàn)有技術(shù)中當(dāng)有應(yīng)用正在調(diào)用麥克風(fēng)時,其他應(yīng)用無法開啟錄音功能的問題。
為達(dá)到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
第一方面、本發(fā)明實施例提供了一種終端的麥克風(fēng)的數(shù)據(jù)處理方法,所述終端包含與麥克風(fēng)通信的數(shù)據(jù)發(fā)送端口以及與所述數(shù)據(jù)發(fā)送端口具有一對多映射關(guān)系的數(shù)據(jù)接收端口,所述方法包括:
在麥克風(fēng)被第一應(yīng)用調(diào)用時,接收第二應(yīng)用發(fā)出的錄音開啟指令,從未被占用的數(shù)據(jù)接收端口中為所述第二應(yīng)用分配一個數(shù)據(jù)接收端口,通過所述數(shù)據(jù)發(fā)送端口獲取由所述麥克風(fēng)采集到的錄音數(shù)據(jù),并廣播所采集的錄音數(shù)據(jù),通過為第二應(yīng)用分配的數(shù)據(jù)接收端口接收廣播的錄音數(shù)據(jù),并將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。
第二方面、本發(fā)明實施例提供了一種具有麥克風(fēng)的終端,所述終端包括:
錄音模塊,所述錄音模塊與麥克風(fēng)連接,包括與麥克風(fēng)通信的數(shù)據(jù)發(fā)送端口以及與所述數(shù)據(jù)發(fā)送端口具有一對多映射關(guān)系的數(shù)據(jù)接收端口;
所述錄音模塊,用于在麥克風(fēng)被第一應(yīng)用調(diào)用時,接收第二應(yīng)用發(fā)出的錄音開啟指令,從未被占用的數(shù)據(jù)接收端口中為所述第二應(yīng)用分配一個數(shù)據(jù)接收端口,通過所述數(shù)據(jù)發(fā)送端口獲取由所述麥克風(fēng)采集到的錄音數(shù)據(jù),并廣播所采集的錄音數(shù)據(jù),通過為第二應(yīng)用分配的數(shù)據(jù)接收端口接收廣播的錄音數(shù)據(jù),并將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。
本發(fā)明實施例提供了一種終端的麥克風(fēng)的數(shù)據(jù)處理方法和具有麥克風(fēng)的終端,通過在操作系統(tǒng)的錄音模塊中增加一個數(shù)據(jù)發(fā)送端口和N個數(shù)據(jù)接收端口,使得當(dāng)在麥克風(fēng)被第一應(yīng)用調(diào)用時,終端接收第二應(yīng)用發(fā)出的錄音開啟指令,從未被占用的數(shù)據(jù)接收端口中為所述第二應(yīng)用分配一個數(shù)據(jù)接收端口,通過所述數(shù)據(jù)發(fā)送端口獲取由所述麥克風(fēng)采集到的錄音數(shù)據(jù),并廣播所采集的錄音數(shù)據(jù),通過為第二應(yīng)用分配的數(shù)據(jù)接收端口接收廣播的錄音數(shù)據(jù),并將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。也就是當(dāng)?shù)谝粦?yīng)用正在調(diào)用麥克風(fēng),使用錄音功能獲取錄音數(shù)據(jù)時,第二應(yīng)用開啟了錄音功能,終端通過為第二應(yīng)用分配一個數(shù)據(jù)接收端口,然后通過數(shù)據(jù)發(fā)送端口數(shù)據(jù)接收端口等獲得錄音數(shù)據(jù)發(fā)回給第二應(yīng)用。這樣通過類似于網(wǎng)絡(luò)服務(wù)的方式來實現(xiàn)數(shù)據(jù)重用,從而解決了現(xiàn)有技術(shù)中當(dāng)有應(yīng)用正在調(diào)用麥克風(fēng)時,其他應(yīng)用無法開啟錄音功能的問題。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)提供的一種應(yīng)用開啟錄音功能并獲取錄音數(shù)據(jù)的框架圖;
圖2為本發(fā)明實施例提供的一種應(yīng)用開啟錄音功能并獲取錄音數(shù)據(jù)的框架圖;
圖3為本發(fā)明實施例提供的一種終端的麥克風(fēng)的數(shù)據(jù)處理方法的流程圖;
圖4為本發(fā)明實施例提供的一種具有麥克風(fēng)的終端的框圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實施例中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本發(fā)明實施例中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
為了便于清楚描述本發(fā)明實施例的技術(shù)方案,在本發(fā)明的實施例中,術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括一個或者更多個該特征。在本發(fā)明的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
本發(fā)明實施例中“多個應(yīng)用同時開啟錄音功能”的含義可以是多個應(yīng)用同一時間開啟錄音功能,也可以是在至少一個應(yīng)用開啟錄音功能且未關(guān)閉錄音功能之前,又有其他應(yīng)用開啟了錄音功能。應(yīng)用調(diào)用麥克風(fēng)就是指應(yīng)用開啟錄音功能。
本發(fā)明實施例的工作原理在于修改JNI接口至HAL層之間的代碼,即現(xiàn)有技術(shù)中錄音模塊中Android錄音代碼及C++錄音框架這兩部分。且在不修改應(yīng)用軟件、Java接口、JNI接口(接口部分為了保證現(xiàn)有以及將來新出現(xiàn)軟件的兼容問題,也不做任何修改)、硬件抽象層、錄音硬件部分的前提下,僅修改Android錄音代碼及C++錄音框架,將原來的單一線程轉(zhuǎn)換為多個線程,支持多個應(yīng)用可以同時獲取錄音數(shù)據(jù),從而實現(xiàn)多個應(yīng)用可以同時開啟錄音功能。也就是說,本發(fā)明實施例在不修改應(yīng)用軟件和硬件部分的前提下,僅通過軟件部分的修改,實現(xiàn)終端中的多個應(yīng)用可以同時開啟錄音功能。
本發(fā)明實施例獲取錄音數(shù)據(jù)的過程的主要變化在Android錄音代碼及C++錄音框架這兩部分,且對這兩部分的修改有兩種方案。其中方案一是在保留現(xiàn)有技術(shù)中錄音開啟指令的下發(fā)以及錄音數(shù)據(jù)上傳過程的基礎(chǔ)上,通過增加數(shù)據(jù)發(fā)送端口(protocol port)和N個數(shù)據(jù)接收端口的方式增加了一種錄音數(shù)據(jù)上傳的方法;方案二是保留現(xiàn)有技術(shù)中錄音開啟指令的下發(fā)過程,將原有錄音數(shù)據(jù)上傳的方法改成通過數(shù)據(jù)發(fā)送端口和數(shù)據(jù)接收端口的錄音數(shù)據(jù)上傳的方法。具體的參考圖2所示(需要說明的是:其中實線表示現(xiàn)有技術(shù)的錄音開啟指令的下發(fā)以及錄音數(shù)據(jù)上傳過程,虛線表示本發(fā)明實施例增加的錄音數(shù)據(jù)上傳過程。圖中以三個應(yīng)用同時開啟錄音功能為例。),通過類似于網(wǎng)絡(luò)服務(wù)的方式來實現(xiàn)數(shù)據(jù)重用,在Android錄音代碼及C++錄音框架之間增加一個數(shù)據(jù)發(fā)送端口和N個數(shù)據(jù)接收端口,N大于等于2。
給需要獲取錄音數(shù)據(jù)的應(yīng)用分配一個未被占用的數(shù)據(jù)接收端口。數(shù)據(jù)發(fā)送端口從C++錄音框架獲取錄音數(shù)據(jù),然后通過廣播的方式發(fā)送至N個數(shù)據(jù)接收端口。已被應(yīng)用占用的數(shù)據(jù)協(xié)議端口收到錄音數(shù)據(jù)之后,將數(shù)據(jù)返回對應(yīng)的應(yīng)用。
實施例一
本發(fā)明實施例提供了一種終端的麥克風(fēng)的數(shù)據(jù)處理方法,該方法的執(zhí)行主體可以是終端,也可以是終端中的軟件或硬件,示例的,可以是終端中的錄音模塊。終端包含與麥克風(fēng)通信的數(shù)據(jù)發(fā)送端口以及與所述數(shù)據(jù)發(fā)送端口具有一對多映射關(guān)系的數(shù)據(jù)接收端口。數(shù)據(jù)發(fā)送端口和數(shù)據(jù)接收端口之間可以是根據(jù)某種協(xié)議進(jìn)行通信。優(yōu)選的,數(shù)據(jù)發(fā)送端口和數(shù)據(jù)接收端口之間根據(jù)用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,簡稱UDP),因為UDP協(xié)議相對比較簡單且滿足本發(fā)明實施例的需要;可選的,數(shù)據(jù)發(fā)送端口和數(shù)據(jù)接收端口之間也可以是根據(jù)傳輸控制協(xié)議(Transmission Control Protocol,簡稱TCP)等其他協(xié)議進(jìn)行通信,這里不做限定。參考圖3所示,該方法包括以下步驟:
S101、在麥克風(fēng)被第一應(yīng)用調(diào)用時,接收第二應(yīng)用發(fā)出的錄音開啟指令。
需要說明的是:本發(fā)明實施例中要保護(hù)的是在第一應(yīng)用可以獲得錄音數(shù)據(jù)的前提下,第二應(yīng)用發(fā)出錄音開啟指令,并獲得錄音數(shù)據(jù)的情況。第一應(yīng)用指的是在第二應(yīng)用發(fā)出錄音開啟指令之前,任意一個正在調(diào)用麥克風(fēng)的應(yīng)用,也就是任意一個已經(jīng)開啟錄音功能并正在使用錄音功能的應(yīng)用。若該第一應(yīng)用是第一個開啟錄音功能的應(yīng)用,則該第一應(yīng)用可以完全按照現(xiàn)有技術(shù)的方法實現(xiàn)錄音開啟指令的下發(fā)以及錄音數(shù)據(jù)的上傳;也可以按照現(xiàn)有技術(shù)中的方法實現(xiàn)錄音開啟指令的下發(fā),但實現(xiàn)錄音數(shù)據(jù)的上傳按照本發(fā)明實施例提供的通過數(shù)據(jù)發(fā)送端口和數(shù)據(jù)接收端口上傳錄音數(shù)據(jù)的方法。
當(dāng)一應(yīng)用開啟錄音功能時,會向終端發(fā)出錄音開啟指令,該錄音開啟指令包括應(yīng)用所需的錄音參數(shù)、開啟麥克風(fēng)指令和返回錄音數(shù)據(jù)。其中,錄音參數(shù)包括下述的一種或多種:采樣率,聲道數(shù),和錄音格式。優(yōu)選的,錄音參數(shù)包括采樣率,聲道數(shù),和錄音格式等其他設(shè)定錄音效果的參數(shù),這樣可以得到應(yīng)用所需的最優(yōu)的錄音數(shù)據(jù)。
終端獲取該錄音開啟指令,并將該錄音開啟指令發(fā)送給麥克風(fēng)。具體的通過依次調(diào)用Java接口、JNI接口、Android錄音代碼、C++錄音框架獲取應(yīng)用的錄音開啟命令,并將該命令傳遞給硬件抽象層,通過硬件抽象層來開啟麥克風(fēng)。
第一個開啟錄音功能的應(yīng)用,終端會根據(jù)該應(yīng)用的錄音開啟指令中的開啟麥克風(fēng)指令開啟麥克風(fēng)。在開啟麥克風(fēng)時,可以按照錄音開啟指令中的錄音參數(shù)為麥克風(fēng)配置錄音參數(shù),也可以是按照預(yù)設(shè)的錄音參數(shù)為麥克風(fēng)配置錄音參數(shù)。其中預(yù)設(shè)的錄音參數(shù)可以是手機(jī)設(shè)備出廠時設(shè)置好的,也可以是某次使用前重新設(shè)置的,但在麥克風(fēng)使用過程通常不修改該錄音參數(shù)。
需要說明的是,在現(xiàn)有技術(shù)中,麥克風(fēng)是按照其出廠時設(shè)置的固定的錄音參數(shù)采集錄音數(shù)據(jù)的,然后通過DSP等其他硬件部分對采集到的錄音數(shù)據(jù)進(jìn)行轉(zhuǎn)換處理,以獲得應(yīng)用所需的錄音數(shù)據(jù),再通過硬件抽象層將應(yīng)用所需的錄音數(shù)據(jù)返回給C++錄音框架,最后在一步步返回給應(yīng)用。在本發(fā)明實施例中的麥克風(fēng)是代表錄音硬件部分(包括DSP、麥克風(fēng)等),而不僅僅是指實際上的麥克風(fēng),因此麥克風(fēng)的錄音參數(shù)是可以設(shè)置的。
從第二個開啟錄音功能的應(yīng)用開始以后的開啟錄音功能的應(yīng)用,也就是說當(dāng)麥克風(fēng)正在錄音時,開啟錄音功能的應(yīng)用,終端在將該應(yīng)用的錄音開啟指令下發(fā)后,通過C++錄音框架及Android錄音代碼會收到指示錄音開啟失敗的消息,表明已經(jīng)有其他應(yīng)用開啟了麥克風(fēng)功能,此時麥克風(fēng)處于開啟狀態(tài)。執(zhí)行步驟S102-S104。
示例的,指示錄音開啟失敗消息可以是錄音開啟指令的返回值,若返回失敗,說明麥克風(fēng)被占用,處于開啟狀態(tài)。當(dāng)然若錄音開啟失敗,也可以返回其他設(shè)定值,例如No、不可以、0等值,指示麥克風(fēng)被占用,處于開啟狀態(tài)。錄音開啟指令的返回值為成功、Yes、可以、1等值,這指示麥克風(fēng)未被占用,處于關(guān)閉狀態(tài),當(dāng)然也可以不返回任何值,直接返回錄音數(shù)據(jù)。
S102、從未被占用的數(shù)據(jù)接收端口中為所述第二應(yīng)用分配一個數(shù)據(jù)接收端口。
終端通過AudioRecord.cpp從未被占用的數(shù)據(jù)接收端口中為第二應(yīng)用分配一個數(shù)據(jù)接收端口,分配的時候可以是依次分配的,例如給N個數(shù)據(jù)接收端口編號,依次分配這N個數(shù)據(jù)接收端口;也可以是任意分配的,例如為一應(yīng)用分配了一個端口,但該端口已經(jīng)被占用,則為該應(yīng)用分配下一個端口,直到為該應(yīng)用分配到未被占用的端口為止。
第一應(yīng)用分配有另外一個對應(yīng)的數(shù)據(jù)接收端口。若第一應(yīng)用為第一個開啟錄音功能的應(yīng)用,則第一應(yīng)用可能分配有另外一個對應(yīng)的數(shù)據(jù)接收端口,也可能未分配有另外一個對應(yīng)的數(shù)據(jù)接收端口;若第一應(yīng)用不是第一個開啟錄音功能的應(yīng)用,那么第一應(yīng)用分配有另外一個對應(yīng)的數(shù)據(jù)接收端口。
S103、通過數(shù)據(jù)發(fā)送端口獲取由麥克風(fēng)采集到的錄音數(shù)據(jù),并廣播所采集的錄音數(shù)據(jù)。
在本發(fā)明實施例中,當(dāng)麥克風(fēng)采集完一定量的錄音數(shù)據(jù)后,通過硬件抽象層返回給C++錄音框架。若第一個開啟錄音功能的應(yīng)用按照現(xiàn)有技術(shù)的方法獲得錄音數(shù)據(jù),則C++錄音框架將錄音數(shù)據(jù)復(fù)制,一份發(fā)直接返回給Android錄音代碼,Android錄音代碼將錄音數(shù)據(jù)返回給第一個開啟錄音功能的應(yīng)用;一份發(fā)送給數(shù)據(jù)發(fā)送端口,然后數(shù)據(jù)發(fā)送端口廣播該錄音數(shù)據(jù)。若第一個開啟錄音功能的應(yīng)用按照本發(fā)明的方法獲得錄音數(shù)據(jù),那么C++錄音框架直接將錄音數(shù)據(jù)發(fā)送給數(shù)據(jù)發(fā)送端口,然后數(shù)據(jù)發(fā)送端口廣播該錄音數(shù)據(jù)。
終端通過數(shù)據(jù)發(fā)送端口獲取由麥克風(fēng)采集到的錄音數(shù)據(jù)的過程:可選的,數(shù)據(jù)發(fā)送端口向C++錄音框架發(fā)出獲取錄音數(shù)據(jù)的指令,C++錄音框架將錄音數(shù)據(jù)復(fù)制發(fā)送給數(shù)據(jù)發(fā)送端口??蛇x的,當(dāng)C++錄音框架獲取了麥克風(fēng)采集到的錄音數(shù)據(jù)后,主動將錄音數(shù)據(jù)發(fā)送給數(shù)據(jù)發(fā)送端口。具體的,在終端的C++錄音框架中增加將錄音數(shù)據(jù)復(fù)制再分別發(fā)送的程序代碼,或者在終端的C++錄音框架中將原有的將錄音數(shù)據(jù)發(fā)送給Android錄音代碼的程序代碼改成將錄音數(shù)據(jù)發(fā)送給數(shù)據(jù)發(fā)送端口的程序代碼。
數(shù)據(jù)發(fā)送端口收到數(shù)據(jù)之后,通過廣播的方式將數(shù)據(jù)發(fā)送給了N個數(shù)據(jù)接收端口。此時C++錄音框架可能同時將數(shù)據(jù)發(fā)送給了Android錄音代碼,從而返回給第一個開啟錄音功能的應(yīng)用,若第一個開啟錄音功能的應(yīng)用關(guān)閉錄音功能,則C++錄音框架不需要再將錄音數(shù)據(jù)同時發(fā)送給Android錄音代碼。
S104、通過為第二應(yīng)用分配的數(shù)據(jù)接收端口接收廣播的錄音數(shù)據(jù),并將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。
終端通過為第二應(yīng)用分配的數(shù)據(jù)接收端口接收廣播的錄音數(shù)據(jù),并通過Android錄音代碼、JNI接口和Java接口等將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。需要說明的是:在本發(fā)明實施例中,以終端將廣播的錄音數(shù)據(jù)返回給第二應(yīng)用的過程為例來說明通過數(shù)據(jù)發(fā)送端口、數(shù)據(jù)接收端口、Android錄音代碼、JNI接口和Java接口等獲得錄音數(shù)據(jù)的過程。
在整個錄音過程中,麥克風(fēng)始終以一個固定的錄音參數(shù)來采集錄音數(shù)據(jù)。這個固定的錄音參數(shù)可以是第一個開啟錄音功能的應(yīng)用所需的錄音參數(shù),即其他應(yīng)用所需的錄音參數(shù)不會作用到麥克風(fēng)上;優(yōu)選的是系統(tǒng)預(yù)設(shè)的錄音參數(shù),即所有應(yīng)用所需的錄音參數(shù)都不會作用到麥克風(fēng)上。并且返回給應(yīng)用的錄音數(shù)據(jù)的內(nèi)容一定是應(yīng)用需要的,但錄音效果不一定是應(yīng)用需要的,即返回給應(yīng)用的錄音數(shù)據(jù)可能不符合應(yīng)用所需的錄音參數(shù)。因此可選的,可以直接將由麥克風(fēng)集到的錄音數(shù)據(jù)返回給應(yīng)用,返回的錄音數(shù)據(jù)的效果不一定是應(yīng)用需要的,優(yōu)選的可以是將應(yīng)用所需的錄音數(shù)據(jù)返回給應(yīng)用。
在將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用之前,將由所述麥克風(fēng)采集到的錄音數(shù)據(jù)按照所述第二應(yīng)用所需的錄音參數(shù)進(jìn)行轉(zhuǎn)換處理。這里的轉(zhuǎn)換方法可以使用現(xiàn)有技術(shù)中的任一種,只要能將所接收的錄音數(shù)據(jù)轉(zhuǎn)換成第二應(yīng)用所需的即可,示例的,可以是將所接收的錄音數(shù)據(jù)按照第二應(yīng)用所需的錄音參數(shù)進(jìn)行重采樣,以獲得第二應(yīng)用所需的錄音數(shù)據(jù)。
重采樣的過程可以是在數(shù)據(jù)接收端口進(jìn)行的,則數(shù)據(jù)接收端口收到錄音數(shù)據(jù)之后,將錄音數(shù)據(jù)重采樣;重采樣的過程也可以是在Android錄音代碼中進(jìn)行的,則數(shù)據(jù)接收端口收到錄音數(shù)據(jù)之后,將錄音數(shù)據(jù)返回給Android錄音代碼,Android錄音代碼將錄音數(shù)據(jù)重采樣,或者C++錄音框架獲取錄音數(shù)據(jù)之后,將錄音數(shù)據(jù)返回給Android錄音代碼,Android錄音代碼將錄音數(shù)據(jù)重采樣。當(dāng)然重采樣的過程也可以是在JNI接口或Java接口中進(jìn)行,在此不再贅述。
若由麥克風(fēng)采集到的錄音數(shù)據(jù)為麥克風(fēng)按照第一個開啟錄音功能的應(yīng)用所需的錄音參數(shù)采集到的錄音數(shù)據(jù),則該錄音數(shù)據(jù)即為應(yīng)用所需的數(shù)據(jù),終端可以直接將該數(shù)據(jù)返回給應(yīng)用。
當(dāng)應(yīng)用關(guān)閉錄音功能之后,釋放終端為應(yīng)用分配的數(shù)據(jù)接收端口。
終端為應(yīng)用分配的數(shù)據(jù)接收端口,即為應(yīng)用占用的數(shù)據(jù)接收端口。
可選的,當(dāng)占用數(shù)據(jù)接收端口的應(yīng)用關(guān)閉錄音功能時,不釋放其占用的數(shù)據(jù)接收端口。
優(yōu)選的,當(dāng)占用數(shù)據(jù)接收端口的應(yīng)用關(guān)閉錄音功能時,釋放其占用的數(shù)據(jù)接收端口,釋放的數(shù)據(jù)接收端口可以供其他應(yīng)用再次使用。這樣可以節(jié)約被占用的空間及占用端口數(shù)量,可以復(fù)用端口,節(jié)約整個程序的執(zhí)行時間,例如當(dāng)應(yīng)用關(guān)閉了錄音功能,但數(shù)據(jù)接收端口還在給應(yīng)用返回數(shù)據(jù),或在為一個新應(yīng)用分配數(shù)據(jù)接收端口時,可能要分配很多次才能為應(yīng)用分配到未被占用的數(shù)據(jù)接收端口。
若該應(yīng)用是第一個開啟了錄音功能的應(yīng)用,且該應(yīng)用根據(jù)現(xiàn)有技術(shù)的方法獲取的錄音數(shù)據(jù),即該應(yīng)用未占用數(shù)據(jù)接收端口,則當(dāng)該應(yīng)用關(guān)閉錄音功能時,優(yōu)選的C++錄音框架不再將錄音數(shù)據(jù)發(fā)送給Android錄音代碼。即關(guān)閉該應(yīng)用獲取數(shù)據(jù)的路徑,但不關(guān)閉麥克風(fēng),且C++錄音框架仍可以從麥克風(fēng)獲取錄音數(shù)據(jù),然后將錄音數(shù)據(jù)發(fā)送給數(shù)據(jù)發(fā)送端口。
當(dāng)所有開啟錄音功能的應(yīng)用都關(guān)閉錄音功能時,關(guān)閉麥克風(fēng),關(guān)閉錄音模塊。
示例的,只有一個應(yīng)用開啟錄音功能,可選的,錄音模塊采用現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令,采用本發(fā)明提供的方法上傳錄音數(shù)據(jù)。優(yōu)選的錄音模塊采用現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令以及上傳錄音數(shù)據(jù)。這樣可以減少程序的復(fù)雜度。
示例的,有2個應(yīng)用開啟錄音功能。第一個開啟了錄音功能的應(yīng)用,錄音模塊可以按照現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令,采用本發(fā)明提供的方法上傳錄音數(shù)據(jù);錄音模塊也可以采用現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令以及上傳錄音數(shù)據(jù)。在第一個仍在使用錄音功能時,第二個開啟了錄音功能的應(yīng)用,錄音模塊采用本發(fā)明提供的方法下發(fā)錄音開啟指令和上傳錄音數(shù)據(jù)。
示例的,有3個應(yīng)用開啟了錄音功能,第一個開啟了錄音功能的應(yīng)用,錄音模塊可以按照現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令,采用本發(fā)明提供的方法上傳錄音數(shù)據(jù);錄音模塊也可以采用現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令以及上傳錄音數(shù)據(jù)。在第一個仍在使用錄音功能時,第二個、第三個應(yīng)用開啟了錄音功能,錄音模塊采用本發(fā)明提供的方法下發(fā)錄音開啟指令和上傳錄音數(shù)據(jù)。
示例的,有3個應(yīng)用開啟了錄音功能,第一個開啟了錄音功能的應(yīng)用,錄音模塊可以按照現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令,采用本發(fā)明提供的方法上傳錄音數(shù)據(jù);錄音模塊也可以采用現(xiàn)有技術(shù)的方法下發(fā)錄音開啟指令以及上傳錄音數(shù)據(jù)。在第一個開啟了錄音功能的應(yīng)用仍在使用錄音功能時,第二個應(yīng)用開啟了錄音功能,錄音模塊采用本發(fā)明提供的方法下發(fā)錄音開啟指令和上傳錄音數(shù)據(jù)。在第一個開啟了錄音功能的應(yīng)用已關(guān)閉錄音功能,第二個開啟了錄音功能的應(yīng)用仍在使用錄音功能時,第三個應(yīng)用正在開啟錄音功能,錄音模塊采用本發(fā)明提供的方法下發(fā)錄音開啟指令和上傳錄音數(shù)據(jù)。
本發(fā)明實施例提供了一種向應(yīng)用返回錄音數(shù)據(jù)的方法,在麥克風(fēng)被第一應(yīng)用調(diào)用時,通過數(shù)據(jù)接收端口和數(shù)據(jù)發(fā)送端口等,將獲得的錄音數(shù)據(jù)發(fā)回給第二應(yīng)用。這樣通過類似于網(wǎng)絡(luò)服務(wù)的方式來實現(xiàn)數(shù)據(jù)重用,從而解決了現(xiàn)有技術(shù)中當(dāng)有應(yīng)用正在調(diào)用麥克風(fēng)時,其他應(yīng)用無法開啟錄音功能的問題。
實施例二
本發(fā)明實施例提供了一種具有麥克風(fēng)的終端,其中各個功能模塊的實現(xiàn)可以參考上述實施例,在此不再贅述。參考圖4所示,所述終端包括:
錄音模塊11,所述錄音模塊11與麥克風(fēng)12連接,包括與麥克風(fēng)12通信的數(shù)據(jù)發(fā)送端口111以及與所述數(shù)據(jù)發(fā)送端口111具有一對多映射關(guān)系的數(shù)據(jù)接收端口112;
所述錄音模塊11,用于在麥克風(fēng)被第一應(yīng)用調(diào)用時,接收第二應(yīng)用發(fā)出的錄音開啟指令,從未被占用的數(shù)據(jù)接收端口中為所述第二應(yīng)用分配一個數(shù)據(jù)接收端口112,通過所述數(shù)據(jù)發(fā)送端口111獲取由所述麥克風(fēng)采集到的錄音數(shù)據(jù),并廣播所采集的錄音數(shù)據(jù),通過為第二應(yīng)用分配的數(shù)據(jù)接收端口112接收廣播的錄音數(shù)據(jù),并將所接收的錄音數(shù)據(jù)返回給第二應(yīng)用。
可選的,所述錄音開啟指令包括所述第二應(yīng)用所需的錄音參數(shù),所述錄音參數(shù)包括下述的一種或多種:采樣率,聲道數(shù),和錄音格式。
可選的,所述錄音模塊11:還用于在將所接收的錄音數(shù)據(jù)返回給所述第二應(yīng)用之前,將由所述麥克風(fēng)12采集到的錄音數(shù)據(jù)按照所述第二應(yīng)用所需的錄音參數(shù)進(jìn)行轉(zhuǎn)換處理。
可選的,所述第一應(yīng)用分配有另外一個對應(yīng)的數(shù)據(jù)接收端口112。
可選的,所述數(shù)據(jù)發(fā)送端口111和數(shù)據(jù)接收端口112之間根據(jù)用戶數(shù)據(jù)報協(xié)議UDP進(jìn)行通信。
需要說明的是,本實施例中的錄音模塊可以為單獨設(shè)立的處理器,也可以集成在終端的某一個處理器中實現(xiàn),此外,也可以以程序代碼的形式存儲于終端的存儲器中,由終端的某一個處理器調(diào)用并執(zhí)行以上各個單元的功能。這里所述的處理器可以是一個中央處理器(英文全稱:Central Processing Unit,英文簡稱:CPU),或者是特定集成電路(英文全稱:Application Specific Integrated Circuit,英文簡稱:ASIC),或者是被配置成實施本發(fā)明實施例的一個或多個集成電路。
本發(fā)明實施例提供了一種具有麥克風(fēng)的終端,該終端的錄音模塊在麥克風(fēng)被第一應(yīng)用調(diào)用時,通過數(shù)據(jù)接收端口和數(shù)據(jù)發(fā)送端口等,將獲得的錄音數(shù)據(jù)發(fā)回給第二應(yīng)用。這樣通過類似于網(wǎng)絡(luò)服務(wù)的方式來實現(xiàn)數(shù)據(jù)重用,從而解決了現(xiàn)有技術(shù)中當(dāng)有應(yīng)用正在調(diào)用麥克風(fēng)時,其他應(yīng)用無法開啟錄音功能的問題。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理包括,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory,簡稱ROM)、隨機(jī)存取存儲器(Random Access Memory,簡稱RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。