网络通信 频道

语音卡应用编程实例(2)

case 4 //获取年度部分
CHOOSE CASE channel[chno].wstate
case WS_STARTFILE
f_start_file(chno,WS_ONFILE)
case WS_ONFILE
//........省略,与前面类似
case WS_WAITDTMF
//........省略,与前面类似
case WS_GETDTMF
//........省略,与前面类似
channel[chno].dtmfstr=channel[chno].dtmfstr+char(DtmfVal)
if len(channel[chno].dtmfstr)=4 then //如果接收到四位代表年度的按键
channel[chno].wstate=WS_retrievedatafromdb //转到检索数据部分
end if
case WS_retrievedatafromdb
channel[chno].nd=channel[chno].dtmfstr //赋值年度
if channel[chno].cx_select=1 then //查询医疗帐户
if integer(left(channel[chno].dtmfstr,4)) < 1996 then
channel[chno].dtmfstr=’1996’
channel[chno].nd=’1996’
end if
if integer(left(channel[chno].dtmfstr,4)) > year(today()) then
channel[chno].dtmfstr=string(today(),"yyyy")
channel[chno].nd=string(today(),"yyyy")
end if
//检索帐户内数据,例如上年余额,利息,统筹金划入,个人交纳,帐户内报销等
f_getdata_yiliao(chno)
//自定义函数f_getdata_yiliao(int i_chno)定义如下
//real aa1,aa2,aa3,aa4,aa5,aa6
//string sfz,s_nd
//sfz=channel[i_chno].sfzhm
//s_nd=channel[i_chno].nd
// SELECT "QA39"."SNYE",
// "QA39"."SNLX",
// "QA39"."DWHR",
// "QA39"."GRJN",
// "QA39"."ZHNBX"
// INTO :aa2,
// :aa3,
// :aa4,
// :aa5,
// :aa6
// FROM "QA39"
// WHERE ( "QA39"."SFZHM" = :sfz ) AND
// ( "QA39"."SJ" = :s_nd ) ;
// aa1 = aa2 + aa3 + aa4 + aa5 - aa6
//channel[i_chno].a1=Round(aa1,2)
//channel[i_chno].a2=Round(aa2,2)
//channel[i_chno].a3=Round(aa3,2)
//channel[i_chno].a4=Round(aa4,2)
//channel[i_chno].a5=Round(aa5,2)
//channel[i_chno].a6=Round(aa6,2)
//return 1
channel[chno].wstate=WS_STARTFILE
channel[chno].jieduan=5 //准备转到播放姓名部分
channel[chno].FName="ndxm.tw" //提示音文件,提示音"您的姓名"
end if
//养老帐户机离退休金省略
....
END CHOOSE
case 5 //播放姓名语音
CHOOSE CASE channel[chno].wstate
CASE WS_STARTFILE
//播放姓名语音"您的姓名"
f_start_file(chno,WS_ONFILE)
case WS_ONFILE
f_on_file(chno,WS_startoutputxingmin)
//自定义函数f_on_file(int ch_no,int next_state)定义如下:
//long retval
// if tv_monitorbusy(ch_no -1,SIG_BUSY1,5)<>0 or tv_monitorbusy(ch_no -1,SIG_BUSY2,5)<>0 then
// tv_stopplayfile(ch_no -1)
// channel[ch_no].wstate=WS_FREE
// tv_hangupctrl(ch_no -1)
// channel[ch_no].jieduan=1
// channel[ch_no].FName="welcome.tw"
// else
// retval=tv_playfilerest(ch_no -1) //继续播放剩余提示音
// if retval<=0 then
// channel[ch_no].wstate=next_state
// end if
// end if
// return 1
CASE WS_startoutputxingmin
password="12345678" //语音合成库口令
yyk_path="" //语音合成库路径,当前路径
temp=PasswordDetect(password,yyk_path)
if temp < 0 then //如果语音合成库出错,则挂机
tv_hangupctrl(chno -1)
channel[chno].wstate=WS_FREE
channel[chno].jieduan=1
channel[chno].FName="welcome.tw"
else
xm_temp=trim(channel[chno].xingmin)
retval=TV_StartPlayCh(chno -1,xm_temp) //播放姓名语音
if retval < 0 then //如果播放姓名语音出错,挂机
tv_hangupctrl(chno -1)
channel[chno].wstate=WS_FREE
channel[chno].jieduan=1
channel[chno].FName="welcome.tw"
else
channel[chno].wstate=WS_onoutputxingmin
end if
end if
case WS_onoutputxingmin
if tv_monitorbusy(chno -1,SIG_BUSY1,5)<>0 or tv_monitorbusy(chno -1,SIG_BUSY2,5)<>0 then
tv_stopplaych(chno -1)
channel[chno].wstate=WS_FREE
tv_hangupctrl(chno -1)
channel[chno].jieduan=1
channel[chno].FName="welcome.tw"
else
retval=tv_playchrest(chno -1) //继续播放姓名语音剩余部分
if retval<=0 then //播放姓名语音完毕
choose case channel[chno].cx_select
case 1 //yiliao
channel[chno].wstate=WS_yiliao_nd
channel[chno].jieduan=7 //准备转到播放医疗帐户数据部分
channel[chno].FName="nd.tw" //设置放音文件名,提示所查年度
case 2
.....
case 3
.....
end choose
end if
end if
end choose
case 6 //播放离退休金数据略

case 7 //播放医疗帐户数据
CHOOSE CASE channel[chno].wstate
case WS_yiliao_nd
f_start_file(chno,WS_yiliao_on_nd) //播放年度提示语音
case WS_yiliao_on_nd
f_on_file(chno,WS_yiliao_nd_data)
case WS_yiliao_nd_data
f_start_year(chno,channel[chno].nd,WS_yiliao_on_nd_data) //播放年度数据语音
case WS_yiliao_on_nd_data
f_onmoney(chno,WS_yiliao_a1,"ye.tw")
//自定以函数f_onmoney(int ch_no,int next_state,string fname)如下:
//long retval
// if tv_monitorbusy(ch_no -1,SIG_BUSY1,5)<>0 or tv_monitorbusy(ch_no -1, SIG_BUSY2,5)<>0 then
// channel[ch_no].wstate=WS_FREE
// tv_stopplayfile(ch_no -1)
// tv_hangupctrl(ch_no -1)
// channel[ch_no].jieduan=1
// channel[ch_no].FName="welcome.tw"
// else
// retval=tv_playsentencerest(ch_no -1) //继续播放剩余的放音字符
// if retval<=0 then
// channel[ch_no].wstate=next_state
// channel[ch_no].FName=fname
// end if
// end if
// return 1
case WS_yiliao_a1
f_start_file(chno,WS_on_yiliao_a1)
case WS_on_yiliao_a1
f_on_file(chno,WS_yiliao_a1_data)
case WS_yiliao_a1_data
f_startmoney(chno,channel[chno].a1,WS_on_yiliao_a1_data)
//自定以函数f_startmoney(int ch_no,real data_a,int next_state)如下:
//long retval
//double num
// num=double(data_a)/1.0
// 赋值生成的放音字符串,makemoney(num)对给定的数生成xx千x百X十X元X角X分放音字符
// channel[ch_no].sentence=makemoney(num)
// 播放帐户金额语音
// retval=tv_playsentence(ch_no -1,channel[ch_no].sentence)
// if retval<=0 then // 播放帐户金额语音失败
// channel[ch_no].wstate=WS_FREE
// tv_hangupctrl(ch_no -1)
// channel[ch_no].jieduan=1
// channel[ch_no].FName="welcome.tw"
// else
// channel[ch_no].wstate=next_state
// end if
// return 1
//自定以函数makemoney(real num)
//string strTmp
//string strRet
//double yuan, jiao, fen
//if money=0 then
// strRet=char(2)
// strRet=strRet+char(19)
// return strRet
//end if
//strRet=""
//strTmp=space(60)
//if money<0 then
// strRet=strRet+char(18)
// money=abs(money)
//end if
//yuan=truncate(money,0)
//money=(money - yuan)*10.0
//jiao=truncate(money,0)
//money=(money - jiao)*10.0
//fen = truncate(money,0)
//if (yuan>0) then
// tv_MakeSentence(yuan,strTmp) //生成多文件放音字符串
// strRet=strRet + strTmp
//// strRet=strRet + strTmp + char(19) //元
//end if
//if jiao=0 then
// if fen>0 then
// strRet=strRet+char(2)+char(fen+2)+char(21)
// end if
//else
// strRet=strRet+char(jiao+2)+char(20) // 角
// if fen>0 then
// strRet=strRet+char(fen+2)+char(21) // 分
// end if
//end if
//return strRet
case WS_on_yiliao_a1_data
f_onmoney(chno,WS_yiliao_a2,"snye.tw")
//播放"上年余额"数据语音
case WS_yiliao_a2
f_start_file(chno,WS_on_yiliao_a2)
case WS_on_yiliao_a2
f_on_file(chno,WS_yiliao_a2_data)
case WS_yiliao_a2_data
f_startmoney(chno,channel[chno].a2,WS_on_yiliao_a2_data)
case WS_on_yiliao_a2_data
f_onmoney(chno,WS_yiliao_a3,"snlx.tw")
//播放"上年利息"数据语音等
case WS_yiliao_a3
....
case WS_on_yiliao_a3_data
retval=tv_playsentencerest(chno -1)
if retval<=0 then
channel[chno].wstate=WS_STARTFILE
channel[chno].jieduan=1
channel[chno].FName="welcome.tw"
end if
END CHOOSE
case 8 //播放养老帐户数据略
END CHOOSE
// 函数externalyyk ()结束
应用效果
本系统已经应用于油田采油厂,方便了人们对帐户金的查询。无论距离多远,仅需使用电话就可以得到所需信息,全天24小时随时提供查询服务。达到了系统设计要求,具有准确性、易于操作的特点。

附录
//设置函数声明,设置系统常量
FUNCTION int TV_Installed() library "tw8vid32.dll"
SUBROUTINE TV_Initialize() library "tw8vid32.dll"
SUBROUTINE TV_Disable() library"tw8vid32.dll"
FUNCTION int TV_ChannelType(int chno) library"tw8vid32.dll"
FUNCTION int TV_OffHookDetect(int chno) library"tw8vid32.dll"
FUNCTION int TV_RingDetect(int chno) library"tw8vid32.dll"
FUNCTION unsignedint TV_StartPlay(int chno,string sp,unsignedint play) library"tw8vid32.dll"
FUNCTION unsignedint TV_StopPlay(int chno) library"tw8vid32.dll"
FUNCTION unsignedint TV_PlayRest(int chno) library"tw8vid32.dll"
FUNCTION long TV_StartPlayFile(int chno,string sp,long long_min,long long_max) library"tw8vid32.dll"
FUNCTION long TV_PlayFileRest(int chno) library"tw8vid32.dll"
FUNCTION long TV_StopPlayFile(int chno) library"tw8vid32.dll"
SUBROUTINE TV_MakeSentence(double double_test, REF string sp) library"tw8vid32.dll"
FUNCTION long TV_PlaySentence(int chno,string sp) library"tw8vid32.dll"
FUNCTION long TV_PlaySentenceRest(int chno) library"tw8vid32.dll"
SUBROUTINE TV_FlushDTMF(int chno) library"tw8vid32.dll"
FUNCTION int TV_GetDTMFChar(int chno) library"tw8vid32.dll"
FUNCTiON string TV_GetDTMFStr(int chno) library"tw8vid32.dll"
FUNCTION int TV_CheckSignal(int chno,int int1,int int2) library"tw8vid32.dll"
FUNCTION int TV_ListenerOffHook(int chno) library"tw8vid32.dll"
SUBROUTINE TV_StartMonitor(int chno) library"tw8vid32.dll"
FUNCTION int TV_MonitorOffHook(int chno,int tirme) library"tw8vid32.dll"
FUNCTION int TV_MonitorBusy(int chno,int int1,int int2) library"tw8vid32.dll"
SUBROUTINE TV_StartTimer(int chno,long timer) library"tw8vid32.dll"
FUNCTION long TV_TimerElapsed(int chno) library"tw8vid32.dll"
SUBROUTINE TV_SetVoicei(int num,string fn) library"tw8vid32.dll"
FUNCTION int PasswordDetect(string password,string path) library"Playch32.dll"
FUNCTION int TV_StartPlayCh(int chn,string sentence) library"Playch32.dll"
FUNCTION int TV_PlayChRest(int chn) library"Playch32.dll"
FUNCTION int TV_StopPlayCh(int chn) library"Playch32.dll"
CONSTANT Integer WS_NULL=0
CONSTANT Integer WS_FREE=1
CONSTANT Integer WS_STARTFILE=2
CONSTANT Integer WS_ONFILE=3
CONSTANT Integer WS_WAITDTMF=4
CONSTANT Integer WS_GETDTMF=5
CONSTANT Integer WS_STARTSENTENCE=6
CONSTANT Integer WS_ONSENTENCE=7
CONSTANT Integer WS_STARTMONEY=8
CONSTANT Integer WS_ONMONEY=9
CONSTANT Integer WS_WAITEND=10
CONSTANT Integer WS_looksfzhmfromdb=11
CONSTANT Integer WS_retrievedatafromdb=12
CONSTANT Integer WS_startoutputxingmin=13
CONSTANT Integer WS_onoutputxingmin=14
CONSTANT Integer WS_yiliao_nd=16
CONSTANT Integer WS_yiliao_on_nd=18
CONSTANT Integer WS_yiliao_nd_data =100
CONSTANT Integer WS_yiliao_on_nd_data =101
CONSTANT Integer WS_yiliao_a1 =40
CONSTANT Integer WS_on_yiliao_a1 =41
CONSTANT Integer WS_yiliao_a1_data =42
CONSTANT Integer WS_on_yiliao_a1_data =43
CONSTANT Integer WS_yiliao_a2 =44
CONSTANT Integer WS_on_yiliao_a2 =45
CONSTANT Integer WS_yiliao_a2_data =46
CONSTANT Integer WS_on_yiliao_a2_data =47
CONSTANT Integer WS_yiliao_a3 =48
CONSTANT Integer WS_on_yiliao_a3 =49
CONSTANT Integer WS_yiliao_a3_data =50
CONSTANT Integer WS_on_yiliao_a3_data =51

 

转载地址:http://www.voipchina.cn/technology/2004-03-24/36868.shtml

0
相关文章