摘要:利用語(yǔ)音卡發(fā)送語(yǔ)音通知是一種非常實(shí)用的技術(shù),可以極大的提高日常工作的辦事效率。重點(diǎn)介紹了語(yǔ)音服務(wù)器軟件的開發(fā)流程、主要技術(shù)及解決方案,并給出了實(shí)現(xiàn)系統(tǒng)的主要狀態(tài)圖及偽代碼。該方案對(duì)普通用戶進(jìn)行類似系統(tǒng)的開發(fā)具有一定的參考價(jià)值。
關(guān)鍵詞:狀態(tài)圖;數(shù)據(jù)庫(kù);極性反轉(zhuǎn);線程
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2008)29-0370-02
Design and Implementatioan of the Voice Software Based on Server
YANG Yi1, DOU Wan-feng1,2
(1.College of Mathematics and Computer Sience,Nanjing Normal University,Nanjing 210097,China;2.State Key Laboratory of Novel Software Technology, Nangjing University,Nanjing 210093,China)
Abstract: Sending speech notice through voice card is of bread-and-butter function, it can greatly bring efficiency to normal work of people. It mainly introduces the process ,key technology and scheme of solution during of developing the software. and then it provides thesomepseudo codes for system running. It is helpful in the development of other similar system for ordinary users.
Key words: state chart; database; polarity reversal; thread
1 引言
在手機(jī)和固定電話日益普及的今天,基于手機(jī)和電話開發(fā)的計(jì)算機(jī)軟件相繼涌出。在高校院系、政府、會(huì)展中心和其他通知或者信息發(fā)布比較頻繁的單位大多使用基于串口的短信群發(fā)系統(tǒng)[3]。作為短信群發(fā)系統(tǒng)的一個(gè)輔助,語(yǔ)音電話以語(yǔ)音的方式不知疲倦地向被通知者送達(dá)重要信息;同時(shí)由于有一段持續(xù)的響鈴,更容易引起被通知者的注意。因此語(yǔ)音電話特別適合于不方便使用發(fā)送短信的人員。語(yǔ)音服務(wù)器軟件對(duì)辦公人員的高效工作、提高辦事效率具有重要的意義。本文主要介紹了語(yǔ)音服務(wù)器軟件系統(tǒng)狀態(tài)轉(zhuǎn)換圖、使用到的主要技術(shù)和解決方案。
2 語(yǔ)音服務(wù)器軟件系統(tǒng)示意圖
語(yǔ)音服務(wù)器軟件要實(shí)現(xiàn)計(jì)算機(jī)無(wú)需人工交互的自動(dòng)對(duì)一組需要被通知的人員實(shí)現(xiàn)撥號(hào)功能。系統(tǒng)具體示意圖見圖1。首先,需要將市話線接入語(yǔ)音卡通道接口;然后,客戶端把語(yǔ)音文件和需被通知人的號(hào)碼上傳到web服務(wù)器的指定位置;最后語(yǔ)音服務(wù)器應(yīng)用程序從數(shù)據(jù)庫(kù)中取數(shù)據(jù),執(zhí)行逐條撥號(hào)任務(wù)發(fā)送語(yǔ)音通知文件。
3 語(yǔ)音服務(wù)器軟件處理狀態(tài)轉(zhuǎn)換圖及部分偽代碼
語(yǔ)音服務(wù)軟件的功能主要處理?yè)芴?hào)過(guò)程中的各種狀態(tài)轉(zhuǎn)換,這里重點(diǎn)給出系統(tǒng)的主狀態(tài)轉(zhuǎn)換圖(圖2)和撥號(hào)狀態(tài)轉(zhuǎn)換子圖(圖3)。
3.1 主狀態(tài)轉(zhuǎn)換處理流程詳細(xì)描述
1) 檢測(cè)數(shù)據(jù)庫(kù)發(fā)送任務(wù)表(SendTable)中有沒有記錄,有則讀入待發(fā)送隊(duì)列轉(zhuǎn)2),無(wú)則轉(zhuǎn)4);
2) 是有效號(hào)碼,并且語(yǔ)音文件存在,開始逐個(gè)撥號(hào),發(fā)送隊(duì)列撥號(hào)完畢則轉(zhuǎn)3);
3) 發(fā)送結(jié)果插入提醒表(WarnTable)轉(zhuǎn)4);
4) 等待一分鐘轉(zhuǎn)1)。
主流程偽代碼描述:
VoiceNoticMain()//處理發(fā)送業(yè)務(wù)的主函數(shù)。函數(shù)//名作為實(shí)參傳給創(chuàng)建的一線程函數(shù)
{ ……
switch(state){
case S_READ://讀狀態(tài)
取當(dāng)前系統(tǒng)時(shí)間stime
if (數(shù)據(jù)庫(kù)不空8<=stime<=20)//8~20點(diǎn)工作
{ ……
加載語(yǔ)音卡
GetDataFromDB();//從數(shù)據(jù)庫(kù)中讀數(shù)據(jù)
DeleSendTable();//清空SendTable表
……
state=S_SEND;//置發(fā)送狀態(tài)
}
else
{ DisableCard();//釋放語(yǔ)音卡
state=S_WAIT;//置等待狀態(tài)
}
break;
case S_SEND:
{ ……
逐個(gè)撥號(hào)發(fā)送通知
yzDialOut();
……
state=S_WRITE;//置寫發(fā)送結(jié)果狀態(tài)
}
break;
case S_WRITE://
{ ……
InsertWarnTable();//向提醒表中寫發(fā)送結(jié)果
……
state=S_WAIT;
}
break;
case S_WAIT://等新任務(wù)狀態(tài)
{……
Sleep(60000);//等待1分鐘再去從數(shù)據(jù)庫(kù)中讀數(shù)據(jù)
……
state=S_READ;
}
break;
}// end of switch
}//end of VoiceNoticeMain
3.2 撥號(hào)狀態(tài)轉(zhuǎn)換子圖詳細(xì)描述
進(jìn)入執(zhí)逐條行撥號(hào)狀態(tài)后,通過(guò)撥號(hào)檢測(cè)函數(shù)Sig_CheckDial()[1]檢測(cè)線路狀態(tài),如果是占線、無(wú)撥號(hào)音、無(wú)人接聽、無(wú)信號(hào)則置語(yǔ)音卡通道為空閑狀態(tài),準(zhǔn)備下一次撥號(hào),如果已經(jīng)連接,則依次摘機(jī)、播放錄音文件、掛機(jī)、重置通道為空閑狀態(tài).限于篇幅省略偽代碼描述。
4 關(guān)鍵技術(shù)及解決方案
4.1 與數(shù)據(jù)庫(kù)集成
本系統(tǒng)以Visual C++6.0實(shí)現(xiàn),采用ADO數(shù)據(jù)庫(kù)訪問(wèn)接口連接Microsoft SQL Server 2000[2]。ADO技術(shù)是基于OLE DB的訪問(wèn)接口,是Visual C++中提供面向?qū)ο蟮腛LE DB技術(shù)。OLE DB為任何數(shù)據(jù)源提供了高性能的訪問(wèn),這些數(shù)據(jù)源包括關(guān)系和非關(guān)系數(shù)據(jù)庫(kù),電子郵件,文件系統(tǒng),文本和圖形以及自定義業(yè)務(wù)對(duì)象等。ADO繼承了,OLE DB的優(yōu)點(diǎn),并對(duì)OLE DB作了封裝,屬于高層訪問(wèn)接口。
4.2 極性反轉(zhuǎn)問(wèn)題
在插表(WarnTable:存儲(chǔ)沒有發(fā)送成功的原因及相關(guān)信息)的過(guò)程中,需要通過(guò)語(yǔ)音卡開發(fā)包中接口函數(shù)Sig_CheckDial()[2] 檢測(cè)線路的狀況,是占線,無(wú)撥號(hào)音,無(wú)人接聽,還是無(wú)信號(hào)。對(duì)于固定電話,無(wú)論有無(wú)彩鈴都可以準(zhǔn)確的檢測(cè),參見圖4-a和圖4-b用信號(hào)分析工具Sig Analyze分析的兩種波形,兩圖的波形頻率一致,呈有固定頻率的矩形。但是對(duì)于手機(jī),有無(wú)彩鈴反饋的信號(hào)與固定電話不同,如撥號(hào)后有一段彩鈴或者有提示手機(jī)狀態(tài)的一段人工錄音,手機(jī)彩鈴的波形頻率不固定呈干擾信號(hào),參見圖4(d)。而波形的不規(guī)則導(dǎo)致無(wú)法檢測(cè)對(duì)方是否摘機(jī)。解決辦法是向當(dāng)?shù)仉娦欧?wù)提供商申請(qǐng)極性反轉(zhuǎn)業(yè)務(wù)。反極就是把電話線的極性在極短的時(shí)間反轉(zhuǎn),總局終端的每條通道都有自己獨(dú)立的極性反轉(zhuǎn)檢測(cè)電路,如果對(duì)方無(wú)人接聽或錯(cuò)誤提示,本地電話局不會(huì)反轉(zhuǎn)極性。如果對(duì)方的電話一摘機(jī),本地電話局在瞬間將用戶的電話線極性反轉(zhuǎn)。有了極性反轉(zhuǎn)就能解決有彩鈴手機(jī)無(wú)法檢測(cè)的問(wèn)題。
4.3 線程啟動(dòng)運(yùn)行
Windows提供了兩種線程: 輔助線程和用戶界面線
程。兩種線程均為MFC庫(kù)所支持。在本系統(tǒng)中,由于發(fā)送語(yǔ)音消息需較多地消耗資源,特別是在發(fā)送人員較多的情況下,用戶界面就如同死機(jī)般狀態(tài)失去響應(yīng)。若將發(fā)送語(yǔ)音消息作為一個(gè)輔助線程,就可解決這個(gè)問(wèn)題。發(fā)送語(yǔ)音消息時(shí),輔助線程在后臺(tái)運(yùn)行,就不會(huì)影響到用戶界面的美觀。
5 結(jié)束語(yǔ)
作為服務(wù)程序軟件其安全、可靠是第一位的,無(wú)論在何時(shí)何地都要保證系統(tǒng)的穩(wěn)定性、可靠性。所以在開發(fā)語(yǔ)音服務(wù)器軟件時(shí)要求在邏輯上不能有半點(diǎn)馬虎,在數(shù)據(jù)庫(kù)操作上要安全、可靠,對(duì)于可能發(fā)生的異常要能及時(shí)捕獲防止服務(wù)器宕機(jī)。此系統(tǒng)已經(jīng)使用,達(dá)到了設(shè)計(jì)要求。
參考文獻(xiàn):
[1] 東進(jìn)語(yǔ)音卡技術(shù)支持[EB/OL].http://www.donjin.com/jszc.asp.
[2] 王瑞,于速.Visual C++數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2006.
[3] 鐘金,竇萬(wàn)峰.基于串口的短信群發(fā)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].金陵科技學(xué)院學(xué)報(bào),2005,21(6):15-19.