信号音的生成与检测
一、设置GTG模板(对Board设备的设置)
1、GTG自定义音频模板参数说明如下
参数名
GTG_id;
Freq1_Index
Freq1_Amp
Freq2_Index
参数说明
有效值0x30—0x3F 48(G,拨号音),49(H,回铃音),50(I,忙音
1),51(J,忙音2),52(K,忙音3),53(L,传真音)
频率一索引值,有效值0-15。
频率一幅度值。对应16位线性幅度值
频率二索引值,有效值0-15。设为0xFF表示无第二个频率分量
Freq2_Amp
Envelope_Mode 音频包络类型,
频率二幅度值。对应16位线性幅度值
0表示无包络限制。
1表示包络定义包含一个“ON-OFF”,
2表示包络定义包含两个“ON-OFF”。
包络重复次数,达到该重复次数才返回GTG COMPLETE事件。(无包络
限制时此记数不起作用)
包络第一个ON TIME时间(ms),也是无包络限制时的信号持续时间
Repeat_Count
On_Time1
Off_Time1
On_Time2
Off_Time2
包络第一个OFF TIME时间(ms)
包络第二个ON TIME时间(ms)
包络第二个OFF TIME时间(ms)
2、对忙音J的GTG模板设置的代码
DJ_U16
CmdParamData_GtgProtoType_t TmpGtgProto;
CmdParamData_GtgFreq_t
u16ParamType, u16ParamSize;
TmpGtgFreq;
u16ParamType = BOARD_PARAM_SETGTGFREQ ;
u16ParamSize = sizeof(CmdParamData_GtgFreq_t);
memset(&TmpGtgFreq, 0, sizeof(CmdParamData_GtgFreq_t) );
TmpGtgFreq.m_u16Freq_Index = 0;
TmpGtgFreq.m_u16Freq_Coef =800;
r = XMS_ctsSetParam( g_acsHandle, pDevice,
u16ParamType,u16ParamSize,(DJ_Void *)&TmpGtgFreq );
u16ParamType = BOARD_PARAM_SETGTGTONE ;
u16ParamSize = sizeof(CmdParamData_GtgProtoType_t);
memset ( &TmpGtgProto, 0, sizeof(CmdParamData_GtgProtoType_t));
TmpGtgProto.m_u8GTG_id=51;
TmpGtgProto.m_u8Freq1_Index=0;
TmpGtgProto.m_u16Repeat_Count=3;
TmpGtgProto.m_u16Envelope_Mode=1;
TmpGtgProto.m_u16Freq1_Amp=8192;
TmpGtgProto.m_u16On_Time1=900;
TmpGtgProto.m_u16Off_Time1= 200;
r =XMS_ctsSetParam( g_acsHandle,pDevice,
u16ParamType,u16ParamSize,(DJ_Void *)&TmpGtgProto );
二、通过XMS_ctsSendIOData函数产生信号音
u16IoType = XMS_IO_TYPE_GTG;
u16IoLen = 1;
IoDataBuf[0] = 'J';
r =XMS_ctsSendIOData(g_acsHandle,pFreeVocDeviceID,
u16IoType,u16IoLen,IoDataBuf);
三、设置GTD模板(对Board设备的设置)
Bit0—Bit15对应16个全局定义频点检
测使能,对应位为1时使能。当使能
两个或以上频点时,只要其中任意一
个频点有效即认为频率有效。
On_Time、Off_Time等单位是15ms
Min_Off_Time1 10:150ms
2、对忙音J的GTD模板设置的代码
u16ParamType, u16ParamSize;
DJ_U16
CmdParamData_GtdFreq_t
TmpGtdFreq;
CmdParamData_GtdProtoType_t TmpGtdProto;
u16ParamType = BOARD_PARAM_SETGTDFREQ ;
u16ParamSize = sizeof(CmdParamData_GtdFreq_t);
memset(&TmpGtdFreq, 0, sizeof(CmdParamData_GtdFreq_t));
TmpGtdFreq.m_u16Freq_Index = 0;
TmpGtdFreq.m_u16Freq_Coef = 800;
r = XMS_ctsSetParam( g_acsHandle, pDevice,
u16ParamType, u16ParamSize, (DJ_Void *)&TmpGtdFreq );
u16ParamType = BOARD_PARAM_SETGTDTONE ;
u16ParamSize = sizeof(CmdParamData_GtdProtoType_t);
memset ( &TmpGtdProto, 0, sizeof(CmdParamData_GtdProtoType_t) );
TmpGtdProto.m_u16GtdID = 51;
TmpGtdProto.m_u16Freq_Mask = 1;
TmpGtdProto.m_u16Envelope_Mode = 1;
TmpGtdProto.m_u16Repeat_Count = 2;
TmpGtdProto.m_u16Min_On_Time1 = 57;
TmpGtdProto.m_u16Max_On_Time1 = 63;
TmpGtdProto.m_u16Min_Off_Time1 = 10;
TmpGtdProto.m_u16Max_Off_Time1 = 17;
r = XMS_ctsSetParam( g_acsHandle, pDevice,
u16ParamType, u16ParamSize, (DJ_Void *)&TmpGtdProto );
四、使能GTD(根据设置的GTD模板对信号音进行检测)
DJ_U16 u16ParamType, u16ParamSize;
CmdParamData_Voice_t TmpVoice;
u16ParamType = VOC_PARAM_UNIPARAM;
u16ParamSize = sizeof(CmdParamData_Voice_t);
memset(&TmpVoice,0,sizeof(CmdParamData_Voice_t));
TmpVoice.m_u8GtdCtrlValid = 1;
TmpVoice.m_VocGtdControl.m_u8ChannelEnable = 1;
TmpVoice.m_VocGtdControl.m_u8GTDEnable = 1;
TmpVoice.m_VocGtdControl.m_u8GTDID[0]='J';
r=XMS_ctsSetParam(g_acsHandle,pDevice,
u16ParamType,u16ParamSize,(DJ_Void*)&TmpVoice);