999国内精品永久免费视频,色偷偷9999www,亚洲国产成人爱av在线播放,6080亚洲人久久精品,欧美超高清xxxhd

語音卡應用編程實例

通訊地址:遼河油田油建二公司人教科張輝 郵編:124012
電子郵件:zhanghui@lh.cnpc.com.cn

目前電話語音產(chǎn)品已在各方面得到廣泛應用,常用的語音卡具有4線或8線通道,可以同時處理4線或8線電話的請求。以下介紹利用語音卡實現(xiàn)計算機自動應答的醫(yī)療及養(yǎng)老帳戶金語音查詢系統(tǒng)。
系統(tǒng)功能
當外線電話打入時,計算機自動檢測到振鈴信號,并開始播放提示音,同時開始接收用戶的電話按鍵信息。用戶通過電話按鍵選擇查詢類別、輸入身份證號碼、查詢年度,計算機根據(jù)接收的信息從后臺ORACLE數(shù)據(jù)庫中取得查詢結果數(shù)據(jù),并將相應帳戶金額數(shù)據(jù)進行語音合成,再通過語音卡的相應外線電話通道播放查詢結果,例如:"姓名張三 年度1999您的醫(yī)療帳戶金余額是一千二百三十四元五角六分 上年利息一百二十三元 統(tǒng)籌金劃入二十三元四角 個人繳納二十八元五角 帳戶內(nèi)報銷八百零八元八角八分"。用戶端電話接聽所查帳戶數(shù)據(jù)的語音信號。
編程思路
系統(tǒng)應劃分為6個運行階段:
1、 初始化語音卡、連接數(shù)據(jù)庫,等待外線電話打入。檢測到振鈴后進入下一階段。
2、 接收用戶選擇的查詢類別。
播放提示音:"歡迎使用,查詢醫(yī)療帳戶請撥1,查詢養(yǎng)老帳戶請撥2,查詢離退休金請撥3"。用戶選擇1-3后進入下一階段。默認選擇為1。
3、 接收用戶輸入的身份證號碼。
播放提示音:"請您輸入身份證號碼"。用戶輸入后,系統(tǒng)判斷數(shù)據(jù)庫中是否存在此身份證號碼,如果存在,則進入下一階段。否則提示重新輸入。
4、 接收用戶輸入查詢年度。
播放提示音:"請您輸入查詢年度"。用戶輸入后,生成查詢條件,取得查詢數(shù)據(jù)。進入下一階段。
5、 合成及播放姓名語音。
6、 帳戶金數(shù)額語音合成及播放。
具體實現(xiàn)
由于電話語音卡的編程接口以windows動態(tài)鏈接庫(TW8VID32.DLL)方式提供,可以使用目前常用的可視化開發(fā)工具,如:delphi ,vb, pb, visual c++等。下面以PB環(huán)境舉例說明。
首先建立一個新的application ,一個新的窗口yyk,在application的open事件中,連接后臺ORACLE數(shù)據(jù)庫,并對語音卡進行初始化。設置窗口的定時器。也可以在窗口yyk中設置一些代表各個通道當前狀態(tài)的提示文本,在系統(tǒng)響應用戶按鍵時可以隨時更新提示文本,以反映各通道的工作狀態(tài)。

函數(shù)聲明Global external functions ,以及常量定義
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"
......................略
詳細的函數(shù)聲明附錄在最后。

定義結構ch_stru
{    string Fname //通道放音文件名
    int wstate //通道狀態(tài)
    int jieduan //運行階段
    int cx_select //查詢類型
    string sfzhm //身份證號碼
    string nd //查詢年度
    string xingmin //姓名
    string sentence //通道放音字符 }

定義全局變量ch_stru channel[8]
            int chnum
定義application的open事件
integer i
string ls_startupfile
l_startupfile = "yyk.ini"
//設置數(shù)據(jù)庫事務對象參數(shù)
sqlca.DBMS = ProfileString (l_startupfile, "database", "dbms", "")
sqlca.database = ProfileString (l_startupfile, "database", "database", "")
sqlca.userid = ProfileString (l_startupfile, "database", "userid", "")
sqlca.dbpass = ProfileString (l_startupfile, "database", "dbpass", "")
sqlca.logid = ProfileString (l_startupfile, "database", "logid", "")
sqlca.logpass = ProfileString (l_startupfile, "database", "LogPassWord", "")
sqlca.servername = ProfileString (l_startupfile, "database", "servername", "")
sqlca.dbparm = ProfileString (l_startupfile, "database", "dbparm", "")
connect; //連接數(shù)據(jù)庫
if sqlca.sqlcode <> 0 then
MessageBox ("不能連通數(shù)據(jù)庫", sqlca.sqlerrtext)
return
end if
open(yyk)
if timer(0.06,yyk)=-1 then
MessageBox ("錯誤提示","設置定時器失敗, 程序不能執(zhí)行!")
    return
end if
chnum=tv_installed()
if chnum<=0 then
MessageBox ("錯誤提示","未安裝語音卡!")
else
    tv_initialize() //初始化語音卡
    if chnum>8 then
        chnum=8
    end if
    initchannel () //初始化各通道
end if
//application的open事件定義結束

定義函數(shù)initchannel (),初始化各通道結構channel[i]
for i=1 to 8
    channel[i].FName="welcome.tw"
    channel[i].wstate=WS_FREE
    channel[i].jieduan=1
    channel[i].cx_select=1
    channel[i].sfzhm=''
    channel[i].nd=''
    channel[i].xingmin=''
    channel[i].sentence=" "
    if i>chnum then
        channel[i].chtype = CT_EMPTY
    else
        channel[i].chtype=tv_channelType(i -1) //判斷通道類型,外線或內(nèi)線或空
    end if
next
//退出應用時,使語音卡無效。
if chnum>0 then
    tv_disable()
end if
disconnect using sqlca ; //取消連接數(shù)據(jù)庫

//在窗口yyk的timer事件中處理各通道的請求
int i
for i=1 to chnum
            if channel[i].chtype=1 then
                //如果是外線通道,處理請求
                externalyyk (i) //自定義函數(shù)
            end if
next

自定義函數(shù)externalyyk (int chno)定義如下:
// 函數(shù)externalyyk ()開始
long retval
integer DtmfVal,temp
unsignedinteger sigtype
double num
string strRet, password,yyk_path,xm_temp
CHOOSE CASE channel[chno].jieduan
case 1 //選擇查詢類別
       
CHOOSE CASE channel[chno].wstate
    CASE WS_FREE
        if tv_ringdetect(chno -1) > 1 then //檢測到振鈴
            channel[chno].wstate=WS_STARTFILE
            tv_offhookctrl(chno -1) //控制摘機
            tv_flushdtmf(chno -1) //清空某通道的雙音多頻碼(dtmf)
    end if
    case WS_STARTFILE
//開始播放提示音,"歡迎使用,查詢醫(yī)療帳戶請撥1,查詢養(yǎng)老帳戶......"            
            f_start_file(chno,WS_ONFILE)
//自定義函數(shù)f_start_file(int chno ,int next_state) 定義如下:
//        long retval
//啟動某通道文件放音
//    retval=tv_startplayfile(ch_no -1,channel[ch_no].FName,0,300000)
//        if retval<=0 then
//            tv_hangupctrl(ch_no -1) //如果啟動放音失敗則掛斷
//             channel[ch_no].wstate=WS_FREE
//             channel[ch_no].jieduan=1
//            設置提示音文件
//             channel[ch_no].FName="welcome.tw"
//        else
//             否則改變通道狀態(tài)標志
//             channel[ch_no].wstate=next_state
//        end if
//       
//        return 1
case WS_ONFILE
        //如果檢測到忙音,則停止放提示音,并控制掛斷。
        if tv_monitorbusy(chno -1,SIG_BUSY1,5)<>0 or tv_monitorbusy(chno -1,SIG_BUSY2,5)<>0 then
            tv_stopplayfile(chno -1)
            channel[chno].wstate=WS_FREE
            tv_hangupctrl(chno -1)
            channel[chno].jieduan=1
        else
        //否則繼續(xù)播放剩余提示音
            retval=tv_playfilerest(chno -1)
            if retval<=0 then //如果提示音播放完畢
                //設置等待接收雙音多頻碼DTMF的時間為35秒
                tv_starttimer(chno -1,35)
                //準備轉到接收雙音多頻碼DTMF
                channel[chno].wstate=WS_WAITDTMF
            else
                DtmfVal=tv_getdtmfchar(chno -1) //檢測用戶按鍵信息
                if DtmfVal<>-1 then
                    tv_stopplayfile(chno -1) //檢測到按鍵,停止播放提示音
                    channel[chno].wstate=WS_WAITDTMF
                    if char(DtmfVal)<>'*' and char(DtmfVal)<>'#' then
                        channel[chno].DtmfStr=""
                        channel[chno].DtmfStr=channel[chno].dtmfstr+char(dtmfval)
                        if len(channel[chno].dtmfstr)>=1 then
                            channel[chno].wstate=WS_STARTFILE
                            channel[chno].jieduan=2 //準備轉到身份證輸入部分
                            channel[chno].FName="srsfzhm.tw" //設置提示音文件,提示輸入身份證
                            if integer(left(channel[chno].dtmfstr,1)) > 3 or integer(left(channel[chno].dtmfstr,1)) < 1 then
                                channel[chno].cx_select=1 //默認選擇為1
                            else
                                channel[chno].cx_select=integer(left(channel[chno].dtmfstr,1))
                            end if
                        end if
                    end if
        end if
            end if
        end if
    case WS_WAITDTMF
        DtmfVal=tv_getdtmfchar(chno -1) //檢測用戶按鍵信息
        if DtmfVal<>-1 then //檢測到按鍵
            channel[chno].wstate=WS_WAITDTMF
            if char(DtmfVal)<>'*' and char(DtmfVal)<>'#' then
                channel[chno].DtmfStr=""
                channel[chno].DtmfStr=channel[chno].dtmfstr+char(dtmfval)
                if len(channel[chno].dtmfstr)>=1 then
                    channel[chno].wstate=WS_STARTFILE
                    channel[chno].jieduan=2 //準備轉到接收身份證號部分
                    channel[chno].FName="srsfzhm.tw" //設置放音文件名,提示輸入身份證號碼
                    if integer(left(channel[chno].dtmfstr,1)) > 3 or integer(left(channel[chno].dtmfstr,1)) < 1 then
                        channel[chno].cx_select=1 //默認選擇為1(查詢醫(yī)療帳戶)
                    else
                        channel[chno].cx_select=integer(left(channel[chno].dtmfstr,1))
                    end if
                end if
            end if            
           
        else //未檢測到用戶按鍵信息
            if tv_monitorbusy(chno -1,SIG_BUSY1,5)<>0 or tv_monitorbusy(chno -1,SIG_BUSY2,5)<>0 then
                channel[chno].wstate=WS_FREE //檢測到忙音,掛機,改變通道狀態(tài)為空閑
                tv_hangupctrl(chno -1)
            else
                if tv_timerelapsed(chno -1)<0 then
                    channel[chno].wstate=WS_FREE //等待接收Dtmf數(shù)據(jù)碼超時,掛機
                    tv_hangupctrl(chno -1)
                end if
            end if
        end if
    end choose
case 2 //獲取身份證號部分
       
CHOOSE CASE channel[chno].wstate
    case WS_STARTFILE
        f_start_file(chno,WS_ONFILE)
case WS_ONFILE
//........省略,與前面類似
    case WS_WAITDTMF
//........省略,與前面類似
    case WS_GETDTMF
//..............省略
            if len(channel[chno].dtmfstr)=15 then
                channel[chno].sfzhm=channel[chno].dtmfstr //得到身份證號碼(15位)
                //準備轉到查詢數(shù)據(jù)庫中是否存在此身份證號部分
                channel[chno].wstate=WS_looksfzhmfromdb
            end if
    case WS_looksfzhmfromdb
        channel[chno].a1=0
        //判斷數(shù)據(jù)庫中是否存在所輸?shù)纳矸葑C號碼
        choose case channel[chno].cx_select
            case 1 //從數(shù)據(jù)庫中醫(yī)療帳戶表中查找
                //a1>=1表示數(shù)據(jù)庫中存在所輸?shù)纳矸葑C號碼
                channel[chno].a1=f_count_yiliao(channel[chno].sfzhm)
            case 2 //從數(shù)據(jù)庫中養(yǎng)老帳戶表中查找
                channel[chno].a1=f_count_yanglao(channel[chno].sfzhm)
            case 3 //從數(shù)據(jù)庫中離退休表中查找
                channel[chno].a1=f_count_lituixiu(channel[chno].sfzhm)
        end choose
        //如果數(shù)據(jù)庫中存在所輸?shù)纳矸葑C號碼
                if channel[chno].a1 >= 1 then
                    //從數(shù)據(jù)庫中獲取姓名
                    choose case channel[chno].cx_select
                        case 3
                            channel[chno].xingmin=f_getxingmin_lituixiu(chno)
                        case 2
                            channel[chno].xingmin=f_getxingmin_yanglao(chno)
                        case 1
                            channel[chno].xingmin=f_getxingmin_yiliao(chno)
                    end choose
                        channel[chno].wstate=WS_STARTFILE
                        channel[chno].jieduan=4 //準備轉到接收查詢年度部分
                        channel[chno].FName="srnd.tw" //設置放音文件名,提示輸入查詢年度
                else
                    //數(shù)據(jù)庫中不存在所輸?shù)纳矸葑C號碼
                        channel[chno].wstate=WS_STARTFILE
                        channel[chno].jieduan=2 //準備轉到接收身份證號碼部分
                        //設置放音文件名,身份證號碼有誤或為找到,請重輸
                        channel[chno].FName="nosfzhm.tw"
                end if   
    end choose
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 //轉到檢索數(shù)據(jù)部分
        end if
    case WS_retrievedatafromdb
            channel[chno].nd=channel[chno].dtmfstr //賦值年度
            if channel[chno].cx_select=1 then //查詢醫(yī)療帳戶
                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                
                //檢索帳戶內(nèi)數(shù)據(jù),例如上年余額,利息,統(tǒng)籌金劃入,個人交納,帳戶內(nèi)報銷等
                f_getdata_yiliao(chno)
//自定義函數(shù)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
            //養(yǎng)老帳戶機離退休金省略
            ....
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)
//自定義函數(shù)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) //繼續(xù)播放剩余提示音
//            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) //繼續(xù)播放姓名語音剩余部分
            if retval<=0 then //播放姓名語音完畢
                choose case channel[chno].cx_select
                    case 1 //yiliao
                        channel[chno].wstate=WS_yiliao_nd
                        channel[chno].jieduan=7 //準備轉到播放醫(yī)療帳戶數(shù)據(jù)部分
                        channel[chno].FName="nd.tw" //設置放音文件名,提示所查年度
                    case 2
                        .....
                    case 3
                        .....
                end choose
            end if
        end if        
end choose
case 6 //播放離退休金數(shù)據(jù)略

case 7 //播放醫(yī)療帳戶數(shù)據(jù)
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) //播放年度數(shù)據(jù)語音
    case WS_yiliao_on_nd_data       
        f_onmoney(chno,WS_yiliao_a1,"ye.tw")        
//自定以函數(shù)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) //繼續(xù)播放剩余的放音字符
//            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)
//自定以函數(shù)f_startmoney(int ch_no,real data_a,int next_state)如下:
//long retval
//double num
//        num=double(data_a)/1.0
// 賦值生成的放音字符串,makemoney(num)對給定的數(shù)生成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
//自定以函數(shù)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")
//播放"上年余額"數(shù)據(jù)語音
    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")
//播放"上年利息"數(shù)據(jù)語音等
    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 //播放養(yǎng)老帳戶數(shù)據(jù)略
END CHOOSE
// 函數(shù)externalyyk ()結束
應用效果
本系統(tǒng)已經(jīng)應用于油田采油廠,方便了人們對帳戶金的查詢。無論距離多遠,僅需使用電話就可以得到所需信息,全天24小時隨時提供查詢服務。達到了系統(tǒng)設計要求,具有準確性、易于操作的特點。

附錄
//設置函數(shù)聲明,設置系統(tǒng)常量
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