專利名稱:嵌入式設(shè)備的音頻管理裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在嵌入式設(shè)備(比如手^L)上實(shí)現(xiàn)^免于第三方 程序移4直的音頻管理的纟支術(shù)。
背景技術(shù):
目前運(yùn)4亍在手才幾終端上的最典型的才喿作系全充是Linux和 WinCE。以Linux為例, 一般應(yīng)用是與操作系統(tǒng)進(jìn)行交互,這些應(yīng) 用都是通過4喿作系統(tǒng)4是供的接口 (比如驅(qū)動程序接口 )進(jìn)行操作。 例如,應(yīng)用程序要播放聲音,就要與聲卡(音頻,下同)驅(qū)動程序交 互,一^殳要通過調(diào)用open()、 ioctl()、 write()、 read()、 close()等函凄t 來才乘作聲卡。普通的系統(tǒng)音頻結(jié)構(gòu),如圖1所示。簡單的嵌入式系統(tǒng)與功能強(qiáng)大的PC機(jī)有很大的區(qū)別,比如,簡單的聲卡設(shè)備,不 允許多個應(yīng)用同時打開聲卡,同時播方文聲音,也就是i兌如果一個應(yīng) 用正在^f吏用聲卡,則另外的應(yīng)用就無法4吏用聲卡,只有等待前一個 應(yīng)用使用完將聲卡關(guān)閉后才能使用。這個問題不是不能解決,比如, 不允許多個應(yīng)用同時打開聲卡,是因?yàn)槁暱ㄔO(shè)備只有一個,如果增 加聲卡硬件設(shè)備,就可以解決這個問題,不過這樣會導(dǎo)致成本的增 加,因此一般很少使用。另外手機(jī)上的音頻管理有其獨(dú)有的特點(diǎn)一個典型的手4幾終端,用戶Y吏用時會有i午多場景,比如來電、 打電話中、MP3播放中、接收短消息、響鬧鈴中等等。這些場景,可能單獨(dú)發(fā)生,也有可能同時發(fā)生,比如正在纟番放MP3,此時鬧鈴 響了,或者來電話了,又或者來短消息了等等,因此手^/L軟件開發(fā) 時,必然要考慮到如來電鈴音、按鍵音、鬧鈴音、短消息提示音、 MP3音樂等等各種聲音需要播放。但是這些聲音又有各不相同的特 點(diǎn),比如,來電鈴音,可以i兌是實(shí)時的,優(yōu)先級最高的,不i侖當(dāng)時 在做什么,只要有來電,就必須馬上播鈴音提示,并且不能中間打 斷;而按鍵音的特點(diǎn)是優(yōu)先級比較低, 一般正在播放其它聲音的時 候,可以不播按鍵音;MP3音樂的特點(diǎn)是播放時間一般很長,在播 放期間,可能發(fā)生其它很多事情,有很多其它聲音需要播放, 一般 來說,MP3音樂此時應(yīng)該暫停。許多場景并發(fā)時就會遇到我們前面 -說的問題 一個應(yīng)用正在^f吏用聲卡,會4吏后面所有的應(yīng)用都無法及 時使用聲卡。解決該問題的辦法有4艮多,如可以使用一個單獨(dú)的服務(wù)程序,負(fù)責(zé)對聲卡設(shè)備進(jìn)行管理,對 各種聲音進(jìn)行有優(yōu)先級的排隊(duì),優(yōu)先級高的聲音先播放。該服務(wù)程 序,可以放在應(yīng)用層,如圖2中的音頻管理模塊,對聲卡的操作都 由此服務(wù)程序完成,其它任何應(yīng)用不應(yīng)該自己操作聲卡,其它應(yīng)用 只能通過向服務(wù)程序發(fā)消息的方法通知服務(wù)程序執(zhí)行相應(yīng)的操作。 不過這種方法也有缺點(diǎn), 一是此服務(wù)程序?qū)崿F(xiàn)復(fù)雜,要考慮多種情 況,比如,對簡單的鈴音,可以直接使用文件名做消息參數(shù),由服 務(wù)程序自己調(diào)用codec (編解碼器)解壓,由其操作聲卡播放;對 于MP3音樂,由于一般MP3播放器自己就已經(jīng)調(diào)用codec將數(shù)據(jù) 解壓了 ,因此服務(wù)程序只須將解開的數(shù)據(jù)直接寫到聲卡播放就行了 , 但是這個數(shù)據(jù)如何從媒體播放器傳遞到服務(wù)程序也存在問題,畢竟 這是兩個不同的進(jìn)程,需要傳輸?shù)臄?shù)據(jù)量又非常大,這樣需要復(fù)雜 的進(jìn)程間通訊和同步機(jī)制、進(jìn)程間大量數(shù)據(jù)傳輸機(jī)制;二是這個方 法不便于移植其它程序到系統(tǒng),原因很簡單,比如要移植一個游戲到系統(tǒng),由于所有的游戲都是直接#:作聲卡播;改聲音的,因此顯然是與系統(tǒng)沖突的,這給移植帶來很大的麻煩;有第三方移植程序的 時候,如果4巴第三方程序也當(dāng)成普通應(yīng)用,則系統(tǒng)結(jié)構(gòu)圖仍舊如圖 2所示,但是這個方案顯然要對第三方程序做大的修改;如果讓第 三方程序直4妄訪問驅(qū)動程序,則系統(tǒng)結(jié)構(gòu)圖如圖3所示,這種方案 顯然會導(dǎo)致音頻管理沖突。也可以將這些復(fù)雜的音頻管理邏輯全部寫入音頻驅(qū)動程序,盡 量保證驅(qū)動程序的接口不做變化,如圖4所示。這種方法的優(yōu)點(diǎn)在 于第三方程序的移植方便了,但它具有下列明顯缺點(diǎn) 一是對音頻 驅(qū)動要進(jìn)行很大的改動,這是系統(tǒng)不穩(wěn)定的重要因素;二是將不應(yīng) 該由驅(qū)動做的事情,做到了驅(qū)動里,導(dǎo)致整個系統(tǒng)結(jié)構(gòu)不清晰,邏 輯混亂,驅(qū)動和上層應(yīng)用嚴(yán)重相互依賴,不利于移4直和擴(kuò)展,不利 于獨(dú)立發(fā)展。因此,需要一種嵌入式設(shè)備的音頻管理的解決方案,能夠解決 上述相關(guān)技術(shù)中的問題。發(fā)明內(nèi)容本發(fā)明的目的是提出一種使用偽驅(qū)動方便手機(jī)等設(shè)備上第三方 程序移植的音頻管理的方案,即通過在驅(qū)動程序里估文一個虛的音頻 設(shè)備,來避免第三方程序由于直接操作聲卡而導(dǎo)致系統(tǒng)音頻管理沖突。根據(jù)本發(fā)明的一個方面,提供了 一種嵌入式設(shè)備的音頻管理裝 置,包括用于驅(qū)動聲卡工作的音頻驅(qū)動模塊,該音頻管理裝置還包 括虛擬音頻驅(qū)動模塊,用于在同步模塊的控制下響應(yīng)于第三方的 #:作來驅(qū)動聲卡工作;以及同步才莫塊,用于4艮據(jù)音頻驅(qū)動才莫塊的工 作狀態(tài)來控制虛擬音頻驅(qū)動模塊的運(yùn)行。在音頻驅(qū)動才莫塊在虛擬音頻驅(qū)動沖莫塊運(yùn)行的情況下開始運(yùn)^f亍 時,同步模塊阻塞虛擬音頻驅(qū)動模塊運(yùn)行。在音頻驅(qū)動模塊開始工作而虛擬音頻驅(qū)動模塊未工作時,同步 模塊禁止虛擬音頻驅(qū)動模塊運(yùn)行。在音頻驅(qū)動模塊停止運(yùn)行時,同步模塊允許虛擬音頻驅(qū)動模塊 運(yùn)行-根據(jù)本發(fā)明的另 一個方面,提供了 一種嵌入式設(shè)備的音頻管理方法,包括以下步驟步驟一,同步才莫塊在虛擬音頻驅(qū)動才莫塊與音 頻驅(qū)動模塊之間建立同步機(jī)制;步驟二,在第三方對虛擬音頻驅(qū)動 模塊進(jìn)行操作時,同步模塊根據(jù)音頻驅(qū)動模塊的工作狀態(tài)并利用同 步機(jī)制來控制虛擬音頻驅(qū)動模塊的運(yùn)行。步驟二包括以下步驟在音頻驅(qū)動4莫塊在虛擬音頻驅(qū)動才莫塊運(yùn) 行的情況下開始運(yùn)行時,同步模塊利用同步機(jī)制阻塞虛擬音頻驅(qū)動 才莫塊;以及步-腺二進(jìn)一步包括以下步驟同步才莫塊利用同步才幾制阻 塞虛擬音頻驅(qū)動模塊后,虛擬音頻驅(qū)動模塊暫停運(yùn)行;以及在音頻 驅(qū)動模塊停止運(yùn)行時,同步模塊利用同步機(jī)制使虛擬音頻驅(qū)動模塊 /人暫停位置處繼續(xù)運(yùn)4亍,以由虛擬音頻驅(qū)動才莫塊和音頻驅(qū)動4莫塊分 時驅(qū)動聲卡工作。步驟二包括以下步驟在音頻驅(qū)動模塊和虛擬音頻驅(qū)動模塊均 處于未運(yùn)行狀態(tài)時,同步模塊利用同步機(jī)制允許虛擬音頻驅(qū)動模塊 運(yùn)行;以及步驟二進(jìn)一步包括以下步驟在音頻驅(qū)動模塊開始運(yùn)行 時,同步模塊利用同步機(jī)制禁止虛擬音頻驅(qū)動模塊運(yùn)行。本發(fā)明通過使第三方程序直接操作虛擬音頻設(shè)備,而不是直接 操作真實(shí)的音頻設(shè)備,來通過真實(shí)設(shè)備和虛擬設(shè)備之間的同步等一些手段,避免了系統(tǒng)音頻管理上的沖突,比如,避免一個程序占著音頻i殳備不放,別的程序就無法使用音頻設(shè)備。本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部 分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā) 明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附 圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申 請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并 不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中圖1是示出通常系統(tǒng)的音頻架構(gòu)示意圖;圖2是示出現(xiàn)有技術(shù)中的將音頻管理模塊放在應(yīng)用層的音頻架 構(gòu)示意圖;圖3是示出現(xiàn)有技術(shù)中的將音頻管理模塊放在驅(qū)動層的音頻架 構(gòu)示意圖;圖4是示出現(xiàn)有技術(shù)中的將音頻管理模塊放在應(yīng)用層以及第三 方程序直接訪問驅(qū)動的音頻架構(gòu)示意圖;圖5是示出根據(jù)本發(fā)明實(shí)施例的嵌入式設(shè)備的音頻管理裝置的 框圖;流程圖;圖7是示出根據(jù)本發(fā)明 一個實(shí)施例的音頻管理裝置的框圖;圖8是示出現(xiàn)有技術(shù)中的在音頻驅(qū)動中播放函數(shù)的流程圖;圖9是示出根據(jù)本發(fā)明實(shí)施例的在音頻驅(qū)動中播放函數(shù)的流程圖;圖10是示出現(xiàn)有技術(shù)中的在音頻驅(qū)動中關(guān)閉函數(shù)的流程圖;具體實(shí)施方式
下面將結(jié)合附圖來詳細(xì)說明本發(fā)明的實(shí)施例。圖5是示出根據(jù)本發(fā)明實(shí)施例的嵌入式設(shè)備的音頻管理裝置的 框圖。參照圖5,根據(jù)本發(fā)明實(shí)施例的嵌入式設(shè)備的音頻管理裝置 包括音頻驅(qū)動模塊502,用于驅(qū)動聲卡工作;虛擬音頻驅(qū)動模塊 504,用于在同步模塊的控制下響應(yīng)于第三方的操作來驅(qū)動聲卡工 作;以及同步模塊506,用于根據(jù)音頻驅(qū)動模塊的工作狀態(tài)來控制 虛擬音頻驅(qū)動模塊的運(yùn)行。該裝置還包4舌聲卡508,其由音頻驅(qū)動才莫塊502或虛擬音頻驅(qū) 動才莫塊504驅(qū)動來工作。在音頻驅(qū)動^莫塊502在虛擬音頻驅(qū)動一莫塊504運(yùn)4于的情況下開 始運(yùn)行時,同步模塊506阻塞虛擬音頻驅(qū)動模塊運(yùn)行,因此,由音 頻驅(qū)動模塊502驅(qū)動聲卡工作。在音頻驅(qū)動才莫塊502開始工作而虛擬音頻驅(qū)動4莫塊504未工作 時,同步才莫塊506禁止虛擬音頻驅(qū)動4莫塊運(yùn)^f亍,因此,由音頻驅(qū)動 模塊502驅(qū)動聲卡工作。在音頻驅(qū)動模塊502停止運(yùn)行時,同步模塊506允許虛擬音頻 驅(qū)動模塊504運(yùn)行,此時,可以由虛擬音頻驅(qū)動模塊504或音頻驅(qū) 動才莫塊502驅(qū)動聲卡工作。,設(shè)會曰3貫觀官流程圖。參照圖6,本發(fā)明實(shí)施例的嵌入式設(shè)備的音頻管理方法包 括以下步驟步驟S602,同步才莫塊在虛擬音頻驅(qū)動才莫塊與音頻驅(qū)動 模塊之間建立同步機(jī)制;步驟S604,在第三方對虛擬音頻驅(qū)動模塊 進(jìn)行操作時,同步模塊根據(jù)音頻驅(qū)動模塊的工作狀態(tài)并利用同步機(jī) 制來控制虛擬音頻驅(qū)動模塊的運(yùn)行,以由虛擬音頻驅(qū)動才莫塊和音頻 驅(qū)動模塊分時驅(qū)動聲卡工作。優(yōu)選地,步驟S604包括以下步驟在音頻驅(qū)動才莫塊在虛擬音 頻驅(qū)動模塊運(yùn)行的情況下開始運(yùn)行時,同步模塊利用同步機(jī)制阻塞 虛擬音頻驅(qū)動模塊;以及步驟S604進(jìn)一步包括以下步驟同步模塊 利用同步機(jī)制阻塞虛擬音頻驅(qū)動模塊后,虛擬音頻驅(qū)動才莫塊暫停運(yùn) 4亍;以及在音頻驅(qū)動才莫塊停止運(yùn)行時,同步才莫塊利用同步機(jī)制使虛 擬音頻驅(qū)動模塊從暫停位置處繼續(xù)運(yùn)行。優(yōu)選地,步驟S604包括以下步驟在音頻驅(qū)動才莫塊和虛擬音 頻驅(qū)動模塊均處于未運(yùn)行狀態(tài)時,同步模塊利用同步機(jī)制允許虛擬 音頻驅(qū)動模塊運(yùn)行;以及步驟S604進(jìn)一步包括以下步驟在音頻驅(qū) 動模塊開始運(yùn)行時,同步模塊利用同步機(jī)制禁止虛擬音頻驅(qū)動模塊 運(yùn)行。下面參照圖7至圖11來說明本發(fā)明的一個實(shí)施例。該實(shí)施例仍然以Linux系統(tǒng)為例進(jìn)^f亍"i兌明,正常的聲卡驅(qū)動要 實(shí)i見下列才示準(zhǔn)4妄口 open()、 ioctl()、 write()、 read()、 close(),本實(shí)施 例對這些方法及其參凄t個lt、參tt類型、返回值不估文任何修改,只是在具體實(shí)現(xiàn)時,增加一個虛擬的音頻驅(qū)動或者叫音頻設(shè)備,這個 設(shè)備具有與真實(shí)驅(qū)動一樣的接口 ,該實(shí)施例中的音頻管理裝置的構(gòu)成4口圖7所示,該實(shí)施例所估文的具體》爹改有以下幾點(diǎn)一. 實(shí)現(xiàn)虛擬音頻驅(qū)動的write()函數(shù),主要的邏輯都使用真實(shí) 驅(qū)動的邏輯,只是在開始播放之前,有一個與真實(shí)驅(qū)動同步的過程, 見圖9中虛線的部分。當(dāng)真實(shí)設(shè)備正在使用的時候,這個同步過程 起作用,最簡單的作用就是阻塞虛擬設(shè)備。這樣,虛擬設(shè)備的工作 就不會對真實(shí)設(shè)備產(chǎn)生影響。二. 修改真實(shí)設(shè)備的write ()函數(shù)。見圖9中實(shí)線的部分,對 這個函數(shù)的修改很小,主要邏輯都不做變化,只是在函數(shù)的開頭, 增加一個同步邏輯,在真實(shí)設(shè)備開始播放的時候,禁止虛擬設(shè)備播 放。圖8是修改之前的邏輯。三. 修改真實(shí)設(shè)備的close()函數(shù)。對這個函數(shù)的修改也很小, 主要邏輯都不做變化,只是在函數(shù)的末尾,增加一個同步邏輯,在 真實(shí)設(shè)備停止播放的時候,允許虛擬設(shè)備播放。參見圖11。圖10 是修改之前的邏輯。下面詳細(xì)解釋一下沖突的處理如果當(dāng)前第三方程序有個音頻正在播放,這時真實(shí)設(shè)備需要播 》文,貝寸1. 真實(shí)設(shè)備會通過同步邏輯,阻塞虛擬設(shè)備,這樣真實(shí)設(shè)備就 可以不受影響的播^欠了。2. 虛擬設(shè)備由于被阻塞,相當(dāng)于程序暫停。3. 真實(shí)設(shè)備播放完畢后,通過同步邏輯,允許虛擬設(shè)備播放。4.虛擬設(shè)備退出阻塞狀態(tài),從暫停位置繼續(xù)播放。四.其它^奮改。配合上述邏輯,對驅(qū)動程序估文其它一些必要的 修改。本發(fā)明通過使第三方程序直接操作虛擬音頻設(shè)備,而不是直接 操作真實(shí)的音頻設(shè)備,來通過真實(shí)設(shè)備和虛擬設(shè)備之間的同步等一些手4殳,避免了系統(tǒng)音頻管理上的沖突,比如,避免一個程序占著 音頻設(shè)備不放,別的程序就無法使用音頻設(shè)備。以上所述l又為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明, 對于本領(lǐng)域的^支術(shù)人員來"i兌,本發(fā)明可以有各種更改和變化。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等, 均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1. 一種嵌入式設(shè)備的音頻管理裝置,包括用于驅(qū)動聲卡工作的音頻驅(qū)動模塊,其特征在于,所述音頻管理裝置還包括虛擬音頻驅(qū)動模塊,用于在同步模塊的控制下響應(yīng)第三方的操作來驅(qū)動所述聲卡工作;以及所述同步模塊,用于根據(jù)所述音頻驅(qū)動模塊的工作狀態(tài)來控制所述虛擬音頻驅(qū)動模塊的運(yùn)行。
2. 根據(jù)權(quán)利要求1所述的音頻管理裝置,其特征在于,在所述音 頻驅(qū)動模塊在所述虛擬音頻驅(qū)動模塊運(yùn)行的情況下開始運(yùn)行 時,所述同步模塊阻塞所述虛擬音頻驅(qū)動模塊運(yùn)行。
3. 根據(jù)權(quán)利要求1所述的音頻管理裝置,其特征在于,在所述音 頻驅(qū)動一莫塊開始工作而所述虛擬音頻驅(qū)動^莫塊未工作時,所述 同步模塊禁止所述虛擬音頻驅(qū)動模塊運(yùn)行。
4. 根據(jù)權(quán)利要求3所述的音頻管理裝置,其特征在于,在所述音 頻驅(qū)動才莫塊停止運(yùn)行時,所述同步才莫塊允許所述虛擬音頻驅(qū)動 模塊運(yùn)行。
5. —種用于前述任一權(quán)利要求所述的音頻管理裝置的音頻管理 方法,其特;f正在于,包括以下步驟步驟一,同步模塊在虛擬音頻驅(qū)動模塊與音頻驅(qū)動模塊之 間建立同步才幾制;步驟二,在第三方對所述虛擬音頻驅(qū)動模塊進(jìn)行操作時, 所述同步模塊根據(jù)所述音頻驅(qū)動模塊的工作狀態(tài)并利用所述同步機(jī)制來控制所述虛擬音頻驅(qū)動才莫塊的運(yùn)行,以由所述虛擬 音頻驅(qū)動模塊和所述音頻驅(qū)動模塊分時驅(qū)動聲卡工作。
6. 才艮據(jù)^L利要求5所述的音頻管理方法,其特4正在于,所述步驟 二包4舌以下步-驟在所述音頻驅(qū)動模塊在所述虛擬音頻驅(qū)動模塊運(yùn)行的情 況下開始運(yùn)行時,所述同步模塊利用所述同步機(jī)制阻塞所述虛 擬音頻驅(qū)動^t塊。
7. 根據(jù)權(quán)利要求6所述的音頻管理方法,其特征在于,所述步驟 二還包括以下步驟所述同步才莫塊利用所述同步4幾制阻塞所述虛擬音頻驅(qū)動 模塊后,所述虛擬音頻驅(qū)動模塊暫停運(yùn)行。
8. 根據(jù)權(quán)利要求7所述的音頻管理方法,其特征在于,所述步驟 二還包括以下步驟在所述音頻驅(qū)動模塊停止運(yùn)行時,所述同步模塊利用所述 同步機(jī)制使所述虛擬音頻驅(qū)動模塊從暫停位置處繼續(xù)運(yùn)行。
9. 根據(jù)權(quán)利要求5所述的音頻管理方法,其特征在于,所述步驟 二包4舌以下步艱纟在所述音頻驅(qū)動才莫塊和所述虛擬音頻驅(qū)動才莫塊均處于未 運(yùn)行狀態(tài)時,所述同步才莫塊利用所述同步才幾制允許所述虛擬音 頻驅(qū)動模塊運(yùn)行。
10. 根據(jù)權(quán)利要求9所述的音頻管理方法,其特征在于,所述步驟 二還包括以下步驟在所述音頻驅(qū)動才莫塊開始運(yùn)行時,所述同步?jīng)_莫塊利用所述 同步才幾制禁止所述虛擬音頻驅(qū)動才莫塊運(yùn)4亍。
全文摘要
本發(fā)明公開了一種嵌入式設(shè)備的音頻管理裝置及方法,該方法包括以下步驟步驟一,同步模塊在虛擬音頻驅(qū)動模塊與音頻驅(qū)動模塊之間建立同步機(jī)制;步驟二,在第三方對虛擬音頻驅(qū)動模塊進(jìn)行操作時,同步模塊根據(jù)音頻驅(qū)動模塊的工作狀態(tài)并利用同步機(jī)制來控制虛擬音頻驅(qū)動模塊的運(yùn)行,以由虛擬音頻驅(qū)動模塊和音頻驅(qū)動模塊分時驅(qū)動聲卡工作。本發(fā)明避免了系統(tǒng)音頻管理上的沖突。
文檔編號G06F13/10GK101266582SQ20081009930
公開日2008年9月17日 申請日期2008年5月9日 優(yōu)先權(quán)日2008年5月9日
發(fā)明者亮 劉 申請人:中興通訊股份有限公司