摘 要: 設(shè)計(jì)和實(shí)現(xiàn)了一款基于Android的語音排隊(duì)系統(tǒng)。系統(tǒng)包括語音呼叫終端(Android系統(tǒng))和醫(yī)生控制端(基于Windows)兩部分,它們之間通過Socket進(jìn)行呼叫通信。系統(tǒng)很好地實(shí)現(xiàn)了兩個(gè)終端之間的通信并實(shí)現(xiàn)語音呼叫,具有較強(qiáng)的實(shí)用價(jià)值和開發(fā)指導(dǎo)意義。
關(guān)鍵詞: 語音呼叫;Android系統(tǒng);TTS語音合成;排隊(duì)系統(tǒng)
自2007年Google推出開源手機(jī)操作系統(tǒng)Android[1]以來,Android的應(yīng)用開發(fā)一時(shí)風(fēng)靡全球,各高科技領(lǐng)域應(yīng)用都在向Android進(jìn)軍[2],各種基于Android系統(tǒng)的設(shè)備層出不窮。Android的盛行取決于其獨(dú)特的優(yōu)勢(shì):(1)開放性,Android是一款基于Linux內(nèi)核的開源系統(tǒng),對(duì)第三方應(yīng)用開發(fā)完全開放,開發(fā)人員具有較大的自由度[3];(2)易開發(fā),Android應(yīng)用程序的開發(fā)采用Java語言,通過應(yīng)用框架層提供的API[4],使開發(fā)簡(jiǎn)單、周期短;(3)免授權(quán)費(fèi),Android一直采用免授權(quán)費(fèi)的策略,這讓所有手持設(shè)備廠商都可以選擇Android系統(tǒng),這也是Android如此流行的很大原因之一,因?yàn)閷?duì)這些廠商來說,采用安卓系統(tǒng)能夠帶來比WinCE更多的利潤(rùn)。
排隊(duì)系統(tǒng)(或稱排隊(duì)機(jī))是一種綜合運(yùn)用計(jì)算機(jī)、網(wǎng)絡(luò)、多媒體、通信控制的高新技術(shù)產(chǎn)品,以取代各類服務(wù)性窗口傳統(tǒng)的由顧客站立排隊(duì)的方式,改由計(jì)算機(jī)系統(tǒng)代替客戶進(jìn)行排隊(duì)。該系統(tǒng)適用于各類窗口服務(wù)行業(yè),已經(jīng)廣泛應(yīng)用于金融、醫(yī)院、電信以及各級(jí)政府對(duì)外服務(wù)窗口等行業(yè)[5]。雖然現(xiàn)在市場(chǎng)上已經(jīng)出現(xiàn)各種各樣的語音呼叫終端,但Android的出現(xiàn)及其廣泛應(yīng)用,特別是Android系統(tǒng)設(shè)備的普及化,使得設(shè)備成本大大下降,開發(fā)一個(gè)基于Android系統(tǒng)的語音呼叫系統(tǒng)很有實(shí)用意義。
1 現(xiàn)有語音排隊(duì)系統(tǒng)綜述
隨著語音合成技術(shù)的發(fā)展,語音排隊(duì)系統(tǒng)已經(jīng)發(fā)展很多年了,目前的語音呼叫系統(tǒng)中,根據(jù)系統(tǒng)的組成,可以分為兩種應(yīng)用類型:?jiǎn)渭冋Z音呼叫盒和帶顯示屏的語音呼叫系統(tǒng)。
其中語音呼叫盒通常由語音芯片合成聲音,多應(yīng)用于銀行、郵政之類的集中排隊(duì)叫號(hào)服務(wù),這種盒子合成的聲音比較慢,聽起來一頓一頓的,用戶感覺差,隨著語音芯片技術(shù)的提高,以后有望做到一個(gè)更好的水平。
語音呼叫系統(tǒng)除了一個(gè)聲音呼叫以外,還帶有一個(gè)顯示終端,終端會(huì)顯示當(dāng)前叫號(hào)人員甚至下一個(gè)排隊(duì)者的姓名或其他信息,通常用于醫(yī)院等較為分散的排隊(duì)叫號(hào)服務(wù),方便用戶在沒有聽到聲音時(shí)看到排隊(duì)信息。語音的屏顯功能,有的直接后臺(tái)帶電腦主機(jī),這樣構(gòu)成的成本較高;還有的利用分屏技術(shù)進(jìn)行分屏顯示,但總體下來成本也不低。
總體而言,目前主要利用語音芯片合成聲音的較多,隨著語音呼叫的需求發(fā)展,需要更多發(fā)展真人語音合成服務(wù),但受限于語音合成芯片的資源限制,從長(zhǎng)遠(yuǎn)來看,需要將電腦級(jí)的語音合成技術(shù)帶入到語音排隊(duì)系統(tǒng)中。而目前的語音呼叫系統(tǒng)由于技術(shù)上的原因成本過高。隨著Android設(shè)備的發(fā)展,有很多顯示終端已經(jīng)內(nèi)置了Android系統(tǒng),特別是Android系統(tǒng)對(duì)TTS語音合成的支持標(biāo)準(zhǔn)化,為開發(fā)新一代呼叫系統(tǒng)提供了可能,同時(shí)由于單一設(shè)備實(shí)現(xiàn)了顯示與語音呼叫,有效地降低了設(shè)備成本。
2 基于Android系統(tǒng)的語音呼叫優(yōu)勢(shì)
TTS(Text To Speech),即“從文本到語音”,是人機(jī)對(duì)話的一部分,讓計(jì)算機(jī)能夠說話。它是同時(shí)運(yùn)用語言學(xué)和心理學(xué)的杰出之作,在內(nèi)置芯片的支持下,通過神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì),把文字智能地轉(zhuǎn)化為自然語音流。TTS技術(shù)對(duì)文本文件進(jìn)行實(shí)時(shí)轉(zhuǎn)換,轉(zhuǎn)換時(shí)間之短可以秒計(jì)算。在其特有智能語音控制器作用下,文本輸出的語音音律流暢,使得聽者在聽取信息時(shí)感覺自然,毫無機(jī)器語音輸出的冷漠與生澀感。TTS語音合成技術(shù)即將覆蓋國標(biāo)一、二級(jí)漢字,具有英文接口,自動(dòng)識(shí)別中、英文,支持中英文混讀。所有聲音采用真人普通話為標(biāo)準(zhǔn)發(fā)音,實(shí)現(xiàn)了120~150個(gè)漢字/s的快速語音合成,朗讀速度達(dá)3~4個(gè)漢字/s,使用戶可以聽到清晰悅耳的音質(zhì)和連貫流暢的語調(diào)。
基于Android系統(tǒng)的語音呼叫有以下技術(shù)優(yōu)勢(shì):
?。?)軟件優(yōu)勢(shì)。Android1.6版本及之后的系統(tǒng)都默認(rèn)安裝了TTS引擎,這為開發(fā)基于Android系統(tǒng)的語音呼叫系統(tǒng)提供了可能。
(2)硬件優(yōu)勢(shì)?,F(xiàn)在已經(jīng)有帶Android系統(tǒng)的智能電視、智能顯示器、電視機(jī)頂盒等硬件供開發(fā)使用,而且由于Android系統(tǒng)費(fèi)用很低,做出來的產(chǎn)品比原來不帶Android系統(tǒng)的產(chǎn)品功能上有很大提升,但成本增加很少。
?。?)可重用性高。基于Android的語音呼叫,如果硬件更換,例如從Android顯示器換成Android電視機(jī),由于都是基于Android系統(tǒng),可能不經(jīng)過修改就能直接使用。如果是Android系統(tǒng)版本變化過大(比如新發(fā)布版本的API更新過大),也可能只需要經(jīng)過重新編譯指定版本即可在新機(jī)器上使用,這為后續(xù)的開發(fā)部署提供了很大的便利,不會(huì)出現(xiàn)因?yàn)橛布兓枰匦麻_發(fā)軟件的問題。
3 系統(tǒng)架構(gòu)
整體而言,本系統(tǒng)采用Client/Server架構(gòu),醫(yī)生客戶端從排隊(duì)服務(wù)器讀取當(dāng)前排隊(duì)列表,由醫(yī)生決定呼叫排隊(duì)者,呼叫由Android呼叫終端完成。系統(tǒng)架構(gòu)如圖1所示[6]。
圖1中,每個(gè)陰影方塊表示不同的房間號(hào),一個(gè)房間有多個(gè)醫(yī)生時(shí),可以多個(gè)醫(yī)生共用一個(gè)顯示屏叫號(hào)。其中的呼叫終端,可以是帶Android系統(tǒng)的智能電視,也可以是智能顯示器甚至是機(jī)頂盒加顯示器的配置。
系統(tǒng)的整體流程簡(jiǎn)單明了,主要難點(diǎn)在于醫(yī)生客戶端與呼叫終端之間的聯(lián)系,通過Socket通信實(shí)現(xiàn)了通信過程。
4 Android端軟件實(shí)現(xiàn)
本節(jié)主要討論Android系統(tǒng)下的語音呼叫系統(tǒng)實(shí)現(xiàn),主要包括呼叫服務(wù)建立和語音呼叫過程的實(shí)現(xiàn)。軟件系統(tǒng)的主要程序流程圖如圖2所示。
Thread服務(wù)創(chuàng)建很關(guān)鍵,通過它建立起Socket偵聽線程與消息處理線程。在Android編程中,Thread的作用與Windows下的多線程編程作用一樣,其目的是讓主線程不至于“陷入”到消息等待中。
4.1 Android服務(wù)進(jìn)程建立
在此,需要在Android系統(tǒng)上建立一個(gè)Socket服務(wù)器,用來與醫(yī)生客戶端建立連接,以完成呼叫信息的接收工作。
在主界面的Create()過程中,建立一個(gè)線程mThreadServer用于偵聽端口:
mThreadServer=new Thread(mcreateRunnable);
mThreadServer.start();
其中的mcreateRunnable過程如下:
//線程:監(jiān)聽服務(wù)器發(fā)來的消息
private RunnablemcreateRunnable=new Runnable()
{
public void run()
{
try
{
serverSocket=new ServerSocket(5678);
//方法用于等待客戶連接
mSocketServer=serverSocket.accept();
//接受客戶端數(shù)據(jù)
new Thread( ServerRunnable).start();
}
catch (IOException e)
{
Message msg=new Message();
msg.what=0;
recvMessageServer="創(chuàng)建異常:"+e.getMes
sage()+e.toString()+"\n";
return;
}
}
};
在偵聽線程完成建立之后,即完成了語音呼叫服務(wù)的建立,醫(yī)生客戶端就可以訪問指定的端口與呼叫終端進(jìn)行數(shù)據(jù)傳輸了。
4.2 Android語音呼叫實(shí)現(xiàn)
在Android系統(tǒng)下,由于已經(jīng)有了標(biāo)準(zhǔn)化的TTS語音呼叫引擎,完成一個(gè)語音呼叫的過程顯得非常容易,只需要根據(jù)Google提供的標(biāo)準(zhǔn)化API就能完成呼叫服務(wù)。
使用系統(tǒng)提供的TTS引擎,可以使用TextToSpeech類來執(zhí)行TTS操作,或者用setEngineByPackageName()方法來自定義一個(gè)引擎。在Android4.0后可以通過一個(gè)新的TextToSpeech的構(gòu)造方法來指定引擎,該方法接收一個(gè)TTS引擎的包名。還可以通過getEngines()來查詢可用的TTS引擎,這個(gè)方法返回一個(gè)TextToSpeech.EngineInfo對(duì)象的集合,該對(duì)象包含引擎的圖標(biāo)、標(biāo)簽和包名等信息。
通過如下過程完成語音引擎的初始化:
if (status==TextToSpeech.SUCCESS){
int result=mTts.setLanguage(Locale.CHINESE);
if(result==TextToSpeech.LANG_MISSING_DATA
||result==TextToSpeech.
LANG_NOT_SUPPORTED)
{
Log.e(TAG,"初始化成功,但是找不到語言包");
//TODO安裝語言安裝包
}
}
引擎初始化之后,就可以開始讓引擎發(fā)音了:
try {
mTts.speak(mContent,TextToSpeech.QUEUE_FLUSH, null);
} catch (Exception e) {
e.printStackTrace();
showToast("出錯(cuò)了~");
}
以上過程完成了一個(gè)語音引擎的初始化并讀出從醫(yī)生客戶端中接收到的文本信息。
圖3是本系統(tǒng)實(shí)際使用的效果圖。
本文介紹了一個(gè)基于Android系統(tǒng)的醫(yī)院語音呼叫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)過程,限于篇幅,本文實(shí)現(xiàn)過程主要針對(duì)Android部分的實(shí)現(xiàn),實(shí)際上還有醫(yī)生客戶端的實(shí)現(xiàn)。由于介紹在Windows端實(shí)現(xiàn)Socket通信的文獻(xiàn)已經(jīng)很多,本文不在此做過多贅述。
本文設(shè)計(jì)實(shí)現(xiàn)的基于Android的語音呼叫系統(tǒng)在實(shí)際應(yīng)用中取得了很好的效果。隨著Android系統(tǒng)設(shè)備的大量普及,這種基于Android系統(tǒng)的語音呼叫終端因?yàn)橄到y(tǒng)成本低且使用可靠,一定會(huì)得到推廣使用。
參考文獻(xiàn)
[1] 劉安戰(zhàn),賈曉輝.基于Android的私密短信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(17):51-56.
[2] 周時(shí)偉,謝維波.基于Android的智能家居終端設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(14):11-14.
[3] 葛艷,高占江.基于Android系統(tǒng)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2014,33(1):5-8.
[4] 弋改珍,解爭(zhēng)龍,張琨.基于Android的火車時(shí)刻表查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(4):41-44.
[5] 但成福,劉曉明.一種用排隊(duì)論指導(dǎo)的CAN總線語音通信系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(2):22-25.
[6] 曾建平,邵艷潔.Android系統(tǒng)架構(gòu)及應(yīng)用程序開發(fā)研究[J].微計(jì)算機(jī)信息,2011,27(9):1-3.