| |
答:1、按以下顺序进行,a:dx_deltones(),删除tones值,加上busy(忙音)值;b:dx_blddtcad()(双频)或dx_bldstcad()(单频);c:dx_addtone(),看其返回值;d:dx_getevt()。2、也可用Dialogic自带的PBXpert工具进行测试或cooledit。以下是一个简单的过程(vc5+):
// 以下完成拨号功能
int cares,chdev;
DX_CAP capp;
char temp[30];
int lens;
int len=m_edit2.GetLength();
strncpy(temp,m_edit2,len);
temp[len]=0;
lens=strlen(temp)-len;
for(int i=0;i<lens;i++)strcat(temp,"0");
if (flag)
{
if((chdev=dx_open("dxxxB1C1",NULL))==-1) return;
dx_deltones(chdev);
dx_blddtcad(102,330,24,463,27,25,9,25,9,3);//挂断音添加----双频
dx_bldstcad(103,449,26,40,10,40,10,3);//挂断音添加----单频
if(dx_addtone(chdev,NULL,0)==-1){
AfxMessageBox("挂断音识别错误!");
}
Sleep(1000);
if((dx_sethook(chdev,DX_OFFHOOK,EV_SYNC))==-1);
dx_clrcap(&capp);
capp.ca_nbrdna=4;//defual 4:无人应答等待震铃次数
capp.ca_stdely=25;//d:25拨号完开始分析之间的延时
capp.ca_dtn_npres=300;//等待拨号音时间
capp.ca_hedge=2;//1上升缘采样2下降缘采样
m_listctrl.AddString("开始拨号!");
if((cares=dx_dial(chdev,temp,&capp,DX_CALLP|EV_SYNC))==-1)
return;
switch(cares)
{
case CR_CNCT:
m_listctrl.InsertItem(2,"连接成功");
m_listctrl.SetItemText(2,1,"请稍候...");
flag=true;
break;
case CR_BUSY:
m_listctrl.InsertItem(3,"线路正忙");
m_listctrl.SetItemText(3,1,"请检查...");
flag=false;
break;
case CR_NOANS:
m_listctrl.InsertItem(4,"无人应答");
m_listctrl.SetItemText(4,1,"请检查...");
flag=false;
break;
}
}
// 以下完成放音功能
DX_XPB playtpt;
DV_TPT playtpt2;
DV_TPT tpt[3];
if (flag)
{
m_listctrl.InsertItem(5,"开始放音");
m_listctrl.SetItemText(5,1,"请稍等...");
playtpt.wFileFormat=FILE_FORMAT_VOX;
playtpt.wDataFormat=DATA_FORMAT_ALAW;
playtpt.nSamplesPerSec=DRT_8KHZ;
tpt[0].tp_type=IO_CONT;
tpt[0].tp_termno=DX_DIGMASK;
tpt[0].tp_flags=TF_DIGMASK;
tpt[0].tp_length=DM_S;
tpt[1].tp_type=IO_CONT;
tpt[1].tp_termno=DX_TONE;
tpt[1].tp_length=102;
tpt[1].tp_flags=TF_LEVEL|TF_CLRBEG|TF_USE;
tpt[1].tp_data=DX_TONEON|DX_TONEOFF;
tpt[2].tp_type=IO_EOT;
tpt[2].tp_termno=DX_TONE;
tpt[2].tp_length=103;
tpt[2].tp_flags=TF_LEVEL|TF_CLRBEG|TF_USE;
tpt[2].tp_data=DX_TONEON|DX_TONEOFF;
if(dx_playvox(chdev,"Ch1.vox",&playtpt2,&tpt,0)==-1)
{
exit(4);
}
m_listctrl.InsertItem(6,"放音结束");
m_listctrl.SetItemText(6,1,"请稍候...");
}
Sleep(1000);
if((dx_sethook(chdev,DX_ONHOOK,EV_SYNC))==-1)
{
m_listctrl.InsertItem(7,"关闭线路");
m_listctrl.SetItemText(7,1,"请稍等...");
dx_close(chdev);
}
}
注:本过程仅完成拨号、放音功能,可以参照相应函数说明。请在使用时作相应的变化。
dx_deltones();
dx_blddtcad();
dx_bldstcad();
dx_addtone();设置后对整个过程都有用。
|