[IT/计算机]USB电话语音盒编程接口函数
5.4 USB电话语音盒编程接口函数
在Windows系统平台,USB语音盒的所有接口函数名称和所需参数基本上与PCI语音
卡是一致的,除非特别说明,两者函数兼容。
USB语音盒提供的编程接口函数如下:
初始化和关闭系统接口函数包括:
unsigned short GX_InitializeSystem(void);
unsigned short GX_CloseSystem(void);
获取系统参数接口函数
unsigned long GX_GetCardSerialNo(unsigned short CardNo);
unsigned short GX_GetTotalCardCount(void);
unsigned short GX_GetCardStatus(unsigned short CardNo);
unsigned short GX_GetTotalChannelCount(void);
unsigned short GX_GetTotalVoiceChannel(void);
unsigned short GX_GetChannelType(unsigned short ChannelNo);
unsigned short GX_GetChannelStatus(unsigned short ChannelNo);
unsigned short GX_UsbWorkStatus();
unsigned short GX_SetBugMsg(unsigned short Type);
设置压缩函数
unsigned short GX_SetVoiceCompress(unsigned short CompressType) 打开关闭语音通道接口函数
unsigned short GX_OpenChannel(unsigned short ChannelNo);
unsigned short GX_CloseChannel(unsigned short ChannelNo); 获取事件接口函数
unsigned short GX_GetMessageForWindows(unsigned short WaitTime,
PGX_MESSAGE_INFO pMessageBuffer);
unsigned short CheckMessageForWindows(unsigned short WaitTime,
PGX_MESSAGE_INFO pMessageBuffer);
两线模拟中继模块操作接口函数包括:
unsigned short GX_TrunkHookOff(unsigned short ChannelNo);
unsigned short GX_TrunkHookOn(unsigned short ChannelNo);
unsigned short GX_StartDetectTrunkPolarity(unsigned short ChannelNo);
unsigned short GX_StopDetectTrunkPolarity(unsigned short ChannelNo);
unsigned short GX_StartTrunkPickUp(unsigned short ChannelNo,
unsigned short TimeByMicroSecond);
unsigned short GX_StopTrunkPickUp(unsigned short ChannelNo); 用户模块操作接口函数
unsigned short GX_UserRingOn(unsigned short ChannelNo,
unsigned short RingOnTime,unsigned short RingOffTime,
unsigned short TotalTimes);
unsigned short GX_UserRingOff(unsigned short ChannelNo);
unsigned short GX_SetUserPickUpTime(unsigned short TimeByMicroSecond); 侦听通道接口函数
unsigned short GX_ListenChannel(unsigned short ChannelNo,unsigned short
SourceChannel);
unsigned short GX_UnListenChannel(unsigned short ChannelNo);
unsigned short GX_SetLink(unsigned short ChannelNo,
unsigned short OtherChannel);
unsigned short GX_ClearLink(unsigned short ChannelNo,
unsigned short OtherChannel);
声卡监听/放音接口函数
unsigned short GX_StartPlaySound(char *FileName,
unsigned long Offset,unsigned long Length,BOOL bWav);
unsigned short GX_StopPlaySound();
unsigned short GX_StartMonitorSound(unsigned short ChannelNo);
unsigned short GX_StopMonitorSound();
信号音识别接口函数
unsigned short GX_StartDetectDialTone(unsigned short ChannelNo);
unsigned short GX_StopDetectDialTone(unsigned short ChannelNo);
unsigned short GX_StartDetectBackTone(unsigned short ChannelNo);
unsigned short GX_StopDetectBackTone(unsigned short ChannelNo);
unsigned short GX_StartDetectBusyTone(unsigned short ChannelNo);
unsigned short GX_StopDetectBusyTone(unsigned short ChannelNo);
unsigned short GX_StartDetectToneData(unsigned short ChannelNo);
unsigned short GX_StopDetectToneData(unsigned short ChannelNo);
unsigned short GX_SetToneFrequency(unsigned short ChannelNo,
unsigned short Frequency);
unsigned short GX_GetToneInfo(unsigned short ChannelNo,
PGX_TONE_INFO ToneInfo);
unsigned short GX_SetToneInfo(unsigned short ChannelNo,
PGX_TONE_INFO ToneInfo);
unsigned short GX_SetSpecialSignalFrequency(unsigned short ChannelNo,
unsigned short Frequency);
unsigned short GX_StartDetectSpecialSignal(unsigned short ChannelNo,
unsigned short TimeByMilliSecond);
unsigned short GX_StopDetectSpecialSignal(unsigned short ChannelNo); 信号音产生接口函数
unsigned short GX_StartGenerateSignal(unsigned short ChannelNo,
unsigned short Frequency0, unsigned short Frequency1,
unsigned short OnTime, unsigned short OffTime,
unsigned short TotalTimes,char StopChar);
unsigned short GX_StopGenerateSignal(unsigned short ChannelNo);
unsigned short GX_StartPlaySignal(unsigned short ChannelNo,
unsigned short Type,unsigned short TotalTimes,char StopChar);
unsigned short GX_StopPlaySignal(unsigned short ChannelNo); DTMF按键产生和识别接口函数
unsigned short GX_StartDetectDTMF(unsigned short ChannelNo, unsigned short
SmartLevel);
unsigned short GX_StopDetectDTMF(unsigned short ChannelNo); unsigned short GX_ClearDTMFBuffer(unsigned short ChannelNo); unsigned short GX_GetDTMFKey(unsigned short ChannelNo, unsigned short
DTMFCount,char *DTMFKey);
unsigned short GX_GenerateDTMFString(unsigned short ChannelNo,
char *DTMFString);
unsigned short GX_AutoDialOut(unsigned short ChannelNo,
char *DTMFString);
录音接口函数
unsigned short GX_StartRecordFile(unsigned short ChannelNo,
char *FileName,unsigned long Offset,unsigned long Length,
char StopChar);
unsigned short GX_StartRecordWaveFile(unsigned short ChannelNo,
char *FileName,unsigned long Offset,unsigned long Length,
char StopChar);
unsigned short GX_StartRecordBuffer(unsigned short ChannelNo,
char *Buffer,unsigned long Offset,unsigned long Length,
char StopChar);
unsigned short GX_StopRecordVoice(unsigned short ChannelNo); unsigned short GX_GetRecordLength(unsigned short ChannelNo, unsigned long
*RecordLength);
放音接口函数
unsigned short GX_StartPlayFile(unsigned short ChannelNo,char *FileName,
unsigned long Offset,unsigned long Length,char StopChar);
unsigned short GX_StartPlayWavFile(unsigned short ChannelNo,
char *FileName,unsigned long Offset,unsigned long Length,
char StopChar);
unsigned short GX_StartPlayBuffer(unsigned short ChannelNo,char *Buffer,
unsigned long Offset,unsigned long Length,char StopChar); unsigned short GX_StopPlayVoice(unsigned short ChannelNo); unsigned short GX_GetPlayLength(unsigned short ChannelNo, unsigned long
*PlayLength);
unsigned short GX_InitPlayIndexFile(unsigned short ChannelNo); unsigned short GX_AddPlayIndexFile(unsigned short ChannelNo,
char *FileName);
unsigned short GX_StartPlayIndexFile(unsigned short ChannelNo,
char StopChar)
unsigned short GX_InitPlayIndexBuffer(void)
unsigned short GX_AddPlayIndexBuffer(char *Buffer,unsigned long Length) unsigned short GX_StartPlayIndexBuffer(unsigned short ChannelNo,
unsigned short *IndexTable, unsigned short IndexCount,
char StopChar)
循环录放音接口函数
unsigned short GX_StartPlayCircleBuffer(unsigned short ChannelNo,
char *Buffer,unsigned long TotalLength,char StopChar)
unsigned short GX_StartRecordCircleBuffer(unsigned short ChannelNo,
char *Buffer,unsigned long TotalLength,char StopChar)
语音/静音识别接口函数
unsigned short GX_StartDetectHelloVoice(unsigned short ChannelNo,
unsigned short ThresholdValue);
unsigned short GX_StopDetectHelloVoice(unsigned short ChannelNo);
unsigned short GX_StartDetectBackToneHalt(unsigned short ChannelNo,
unsigned short HaltTimeByMs);
unsigned short GX_StopDetectBackToneHalt(unsigned short ChannelNo);
unsigned short GX_StartDetectSilence(unsigned short ChannelNo,
unsigned short ThresholdValue)
unsigned short GX_StopDetectSilence(unsigned short ChannelNo) 超时设置接口函数
unsigned short GX_StartTimeOutForWindows(unsigned short ChannelNo,
unsigned short TimeBySecond)
unsigned short GX_StopTimeOutForWindows (unsigned short ChannelNo)
unsigned short GX_SetTimeOutValueForWindows (unsigned short ChannelNo,
unsigned short TimeBySecond)
主叫识别接口函数
unsigned short GX_StartDetectCallerID(unsigned short ChannelNo)
unsigned short GX_StopDetectCallerID(unsigned short ChannelNo)
unsigned short GX_GetRawFskCallerID(unsigned short ChannelNo,
char *CallerIDString)
unsigned short GX_GetFskCallerID(unsigned short ChannelNo,
char *DateTime,char *TelNo,char *Name)
unsigned short GX_GetDTMFCallerID(unsigned short ChannelNo,
char *CallerIDString)
停止语音通道所有操作接口函数
unsigned short GX_StopAllOperate(unsigned short ChannelNo)
TTS接口函数
unsigned short GX_InitTTS(void)
unsigned short GX_CloseTTS(void)
unsigned short GX_TTSFileToFile(char *TextFileName, char *VoiceFileName)
unsigned short GX_TTSBufferToBuffer(char *TextBuffer,
unsigned long TextCount,char *VoiceBuffer,
unsigned long *VoiceCount)
unsigned short GX_TTSBufferToFile(char *TextBuffer,
unsigned long TextCount,char *VoiceFileName)
语音转换接口函数
unsigned short GX_AlawToWave(char *AlawFileName, char *WaveFileName)
unsigned short GX_WaveToAlaw(char *WaveFileName, char *AlawFileName)
unsigned short GX_AlawToAdpcm(char *AlawFileName, char *AdpcmFileName)
unsigned short GX_AdpcmToAlaw(char *AdpcmFileName, char *AlawFileName) unsigned short GX_AlawAGC(char *SourceFileName, char *TargetFileName) unsigned short GX_AlawToWaveAGC(char *AlawFileName, char *WaveFileName) unsigned short GX_WaveToAlawAGC(char *WaveFileName, char *AlawFileName) unsigned short GX_WavAlawToGsm(char *AlawFileName, char *GsmFileName) unsigned short GX_WavGsmToAlaw(char *GsmFileName, char *AlawFileName)
5.4.1 初始化和关闭函数
? GX_InitializeSystem
函数原型: unsigned short GX_InitializeSystem(void)
功 能: 该函数初始化USB语音盒的驱动程序参数,所以在使用任何USB语
音盒提供的接口函数前,一定要先调用该函数。
参 数: 无
返 回: 如果函数成功,返回0;否则返回错误码。错误码如下:
代号 数值 含义
GX_OK / GX_NO_ERROR 0 没有错误
GX_ERROR 0xFFFF 一般性错误
GX_ERROR_LOAD_PROGRAM 0xFFFE 装载程序错误
GX_ERROR_OPEN_DRIVER 0xFFFD 打开设备错误
注 释: 只有该函数返回0,语音卡才能正常操作;否则,调用失败。如果该
函数调用失败,请依据错误类型来检查语音盒的硬件和软件设置
? GX_CloseSystem
函数原型: unsigned short GX_CloseSystem(void)
功 能: 该函数释放USB语音盒的驱动程序所申请的系统资源,所以当停止
USB语音盒操作时,应该调用该函数。
参 数: 无
返 回: 如果函数成功,返回0;否则返回错误码。
注 释: 如果调用过该函数之后,需要再次使用语音卡,需要再次调用函数
GX_InitializeSystem来初始化语音卡
5.4.2 获取系统参数接口函数
? GX_GetCardSerialNo
函数原型: unsigned long GX_GetCardSerialNo(unsigned short CardNo) 功 能: 该函数取得插入计算机中的USB语音盒的序列号,可用于加密。
参 数: CardNo 插入计算机中的第几个语音盒
返 回: 函数返回插入计算机中指定语音盒的序列号
注 释: USB返回一般是8位数字
? GX_GetTotalCardCount
函数原型: unsigned short GX_GetTotalCardCount(void)
功 能: 该函数取得插入计算机中的USB语音盒的数量
参 数: 无
返 回: 函数返回插入计算机中的USB语音盒的数量
注 释: 无
? GX_GetCardStatus
函数原型: unsigned short GX_GetCardStatus(unsigned short CardNo)
功 能: 该函数取得插入计算机中的某个USB语音盒出错的错误号码。
该函数主要检测插入机器中的语音卡是否都正常。
参 数: CardNo 卡号,取值从0开始,最大值是插入语音卡的数量减一。 返 回: 函数返回值如下:
代号 数值 含义
GX OK / GX_NO_ERROR 0 没有错误
GX_ERROR 0xFFFF 一般性错误
GX_ERROR_LOAD_PROGRAM 0xFFFE 装载程序错误 注 释: 只有当相应的语音盒没有错误时,USB语音盒上的通道才能正常工
作。如果某个USB语音盒发生错误,则该个盒上的语音通道数量为0。
? GX_GetTotalChannelCount
函数原型: unsigned short GX_GetTotalChannelCount(void)
功 能: 该函数取得插入计算机中的USB语音盒的逻辑通道总数量,包括语
音通道和传真通道
参 数: 无
返 回: 函数返回插入计算机中的USB语音盒的逻辑通道总数量 注 释: 逻辑通道数量是包括语音和传真所有通道在内的
? GX_GetTotalVoiceChannel
函数原型: unsigned short GX_GetTotalVoiceChannel(void)
功 能: 该函数取得插入计算机中的USB语音盒的语音逻辑通道数量 参 数: 无
返 回: 函数返回插入计算机中的USB语音盒的语音逻辑通道数量 注 释: 语音逻辑通道数量是只包括语音通道,不包括传真通道在内
? GX_GetChannelType
函数原型: unsigned short GX_GetChannelType(unsigned short ChannelNo)
功 能: 该函数获取语音逻辑通道号码为ChannelNo的通道所对应的物理通
道类型
参 数: ChannelNo 语音逻辑通道号码
返 回: 函数返回语音逻辑通道号码为ChannelNo的通道所对应的物理通道
类型
物理通道类型常量的定义如下:
代号 数值 含义
CHANNEL_TYPE_NONE 0 逻辑通道上没有任何模块
CHANNEL_TYPE_USER 1 逻辑通道上为用户模块(也叫坐席模块)
CHANNEL_TYPE_TRUNK 2 逻辑通道上为外线模块(也叫中继模块)
CHANNEL_TYPE_RECORD 3 逻辑通道上为录音模块(也叫高阻模块)
CHANNEL_TYPE_MIX 4 逻辑通道上为混合模块
注 释: ChannelNo不能超过最大语音逻辑通道数量减一
? GX_GetChannelStatus
函数原型: unsigned short GX_GetChannelStatus(unsigned short ChannelNo)
功 能: 该函数获取语音逻辑通道号码为ChannelNo的通道的当前状态
参 数: ChannelNo 语音逻辑通道号码,取值从0开始。
返 回: 函数返回语音逻辑通道号码为ChannelNo的通道所对应的通道状态。
通道状态往往是各种状态的组合,即下面的几个通道状态常量的或
值。
通道状态常量的定义如下:
代号 数值 含义
CHANNEL_STATUS_IDLE 0x0001 通道空闲,没有打开
CHANNEL_STATUS_OPEN 0x0002 通道已经打开
CHANNEL_STATUS_TRUNK_HOOK 0x0004 通道已经摘机
CHANNEL_STATUS_USER_RING 0x0008 通道正在振铃
CHANNEL_STATUS_PLAY 0x0010 通道正在放音
CHANNEL_STATUS_RECORD 0x0020 通道正在录音
CHANNEL_STATUS_GENERATE_DTMF 0x0040 通道正在产生DTMF
CHANNEL_STATUS_SEND_FSK 0x0080 通道正在产生FSK
CHANNEL_STATUS_GENERATE_SIGNAL 0x0100 通道正在产生信号音
CHANNEL_STATUS_DETECT_DTMF 0x0200 通道正在识别DTMF
CHANNEL_STATUS_DETECT_CID 0x0400 通道正在识别主叫
CHANNEL_STATUS_DETECT_FSK 0x0800 通道正在识别FSK
CHANNEL_STATUS_DETECT_SIGNAL 0x1000 通道正在识别信号音
CHANNEL_STATUS_SEND_FAX 0x2000 通道正在发送传真
CHANNEL_STATUS_RECEIVE_FAX 0x4000 通道正在接收传真
CHANNEL_STATUS_AUTO_DIAL_OUT 0x8000 通道正在自动拨号
注 释: ChannelNo不能超过最大语音逻辑通道数量减一。
通道的状态可以是以上几种状态的与。
? GX_UsbWorkStatus
函数原型: unsigned short WINAPI GX_UsbWorkStatus()
功 能: 检测USB盒工作是否正常
参 数: 无
返 回: 如果调用成功,返回0
注 释: 通过不断的调用该函数检测,以确定USB盒是否拔除或USB口是否
死掉。
? GX_SetBugMsg
函数原型: unsigned short WINAPI GX_SetBugMsg(unsigned short Type)
功 能: 生成调试信息
参 数: Type 0-不生成 1-生成
返 回: 如果调用成功,返回0
注 释: 调用该函数自动在c:\bug下生成调试信息文件,以便调试。信息文
件按日期时间分。当前的文件不能打开,关闭应用程序就可以打开。
5.4.3 设置语音压缩
? GX_SetVoiceCompress
函数原型: unsigned short GX_SetVoiceCompress(
unsigned short CompressType) 功 能: 设置压缩(初始化语音盒后调用)
参 数: CompressType 取值如下
定义 取值 含义
COMPRESS_TYPE_64KBPS 0x00 A-law格式,不压缩
COMPRESS_TYPE_32KBPS 0x01 ADPCM格式,2倍压缩
COMPRESS_TYPE_GSM 0x04 GSM格式,5倍压缩
返 回: 如果调用成功,返回0
注 释: USB语音盒录音和放音数据支持A-law、ADPCM、GSM三种格式。缺省
为A-law格式。
5.4.4 打开关闭语音通道接口函数
? GX_OpenChannel
函数原型: unsigned short GX_OpenChannel(unsigned short ChannelNo)
功 能: 打开语音通道
参 数: ChannelNo 要打开语音通道的逻辑号码
返 回: 如果打开成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数,可以不调用。对于PCI卡
每一个逻辑通道,只有被打开之后才能正常工作。
对于内线模块,通道打开后,GX08 PCI驱动程序给它所对应的物理
通道供电,并实时检测内线模块的摘机、挂机和拍插动作,并在内线
模块有动作时,传递相应事件给应用程序。
对于中继模块,通道打开后,GX08 PCI驱动程序实时检测中继模块
的振铃和极性信息,并在中继模块有振铃时,传递振铃事件;在模块
摘机后,开始检测极性是否反转,在有极性反转时,发送极性反转事
件,而在模块挂机后,停止极性反转检测,如果需要特殊的极性反转
检测,请使用GX_StartDetectTrunkPolarity和
GX_StopDetectTrunkPolarity函数。
对于录音模块,通道打开后,GX08 PCI驱动程序实时检测与录音模
块并接的话机的摘机和挂机动作,并在有动作时,传递相应事件给应
用程序。
特别说明: USB语音盒可以不调用该函数,初始化卡后自动启动
? GX_CloseChannel
函数原型: unsigned short GX_CloseChannel(unsigned short ChannelNo)
功 能: 关闭语音通道
参 数: ChannelNo 要关闭语音通道的逻辑号码
返 回: 如果打开成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数,可以不调用。PCI卡在不
再使用已经打开的某些通道时,为减少占用语音卡的板上资源,可
以关闭不再使用的通道。如果要使用某个已经被关闭的通道,必须
再调用函数GX_OpenChannel重新打开。
特别说明: USB语音盒可以不支持该函数,调用无意义
5.4.5 获取事件接口函数
? GX_GetMessageForWindows
函数原型: unsigned short GX_GetMessageForWindows(
unsigned short WaitTime,PGX_MESSAGE_INFO pMessageBuffer)
功 能: 获取USB语音盒的事件
参 数: WaitTime 无意义,保留
pMessageBuffer 指向GX_MESSAGE_INFO结构的地址指针,用于存放
返回的事件,GX_MESSAGE_INFO的结构定义如下:
typedef struct _GX_MESSAGE_INFO
{
USHORT MessageCode;
USHORT ChannelNo;
USHORT Parameter[6];
} GX_MESSAGE_INFO, *PGX_MESSAGE_INFO;
如果该函数返回0,则表示有事件发生,事件类型以及其它指
示存于上面结构中。GX_MESSAGE_INFO结构中的各项含义如下:
MessageCode 指示事件的类型,取值如下:
代号 数值 含义
MESSAGE_HAVE_CID_FSK 0x0000 有FSK方式的主叫事件
MESSAGE_HAVE_CID_DTMF 0x0001 有DTMF方式的主叫事件
MESSAGE_HAVE_CID_ERROR 0x0002 有主叫错误事件
MESSAGE_HAVE_DTMF 0x0003 有DTMF按键事件
MESSAGE_PLAY_VOICE_END 0x0004 放音结束事件
MESSAGE_PLAY_VOICE_EXIT 0x0005 放音中断事件
MESSAGE_RECORD_VOICE_END 0x0006 录音结束事件
MESSAGE_RECORD_VOICE_EXIT 0x0007 录音中断事件
MESSAGE_GENERATE_SIGNAL_END 0x0008 产生信号音结束事件
MESSAGE_GENERATE_SIGNAL_EXIT 0x0009 产生信号音中断事件
MESSAGE_GENERATE_DTMF_END 0x000A 产生DTMF完毕事件
MESSAGE_SEND_FSK_END 0x000B 发送FSK完毕事件
MESSAGE_HAVE_DIAL_TONE 0x000C 有拨号音事件
MESSAGE_HAVE_BUSY_TONE 0x000D 有忙音事件
MESSAGE_HAVE_BACK_TONE 0x000E 有回铃音事件
MESSAGE_HAVE_TONE_DATA 0x000F 有信号音数据事件
MESSAGE_HAVE_HELLO_VOICE 0x0010 有语音事件
MESSAGE_HAVE_SILENCE_DATA 0x0011 有静音数据事件
MESSAGE_HAVE_TIME_OUT 0x0012 有超时事件
MESSAGE_HAVE_FSK_DATA 0x0013 有收到FSK事件
MESSAGE_PLAY_CIRCLE_FIRST_END 0x0014 循环放音第一遍结束
MESSAGE_PLAY_CIRCLE_SECOND_END 0x0015循环放音第二遍结束
MESSAGE_RECORD_CIRCLE_FIRST_END 0x0016循环录音第一遍结束
MESSAGE_RECORD_CIRCLE_SECOND_END 0x0017循环录音第二遍结束
MESSAGE_AUTO_DIAL_NO_DIAL_TONE 0x0018 自动拨号无拨号音
MESSAGE_AUTO_DIAL_NONE_LISTEN 0x0019自动拨号无人接听
MESSAGE_AUTO_DIAL_HAVE_BUSY 0x001A 自动拨号有忙音事件
MESSAGE_AUTO_DIAL_HOOK_OFF 0x001B 自动拨号有摘机事件
MESSAGE_HAVE_SPECIAL_SIGNAL 0x001C 指定频率信号音事件
MESSAGE_HAVE_BACK_TONE_HALT 0x001E 无回铃音事件
MESSAGE_USER_HOOK_OFF 0x1001 用户模块摘机事件
MESSAGE_USER_HOOK_ON 0x1002 用户模块挂机事件
MESSAGE_USER_PICK_UP 0x1003 用户模块拍插事件
MESSAGE_USER_RING_END 0x1004 用户模块振铃完毕事件
MESSAGE_TRUNK_RING 0x2000 中继模块有振铃事件
MESSAGE_TRUNK_POLE 0x2001 中继模块有极性反转事件
MESSAGE_TRUNK_PICK_UP_END 0x2002 中继模块拍叉结束事件
MESSAGE_RECORD_HOOK_OFF 0x3001 录音模块有摘机事件
MESSAGE_RECORD_HOOK_ON 0x3002 录音模块有挂机事件
MESSAGE_RECORD_RING 0x3003 录音模块震铃事件
MESSAGE_RECORD_OPEN_CIRCLE 0x3004 录音模块接线事件
MESSAGE_RECORD_NO_OPEN_CIRCLE 0x3005录音模块断线事件
MESSAGE_SEND_FAX_OK 0x6000 发送传真成功事件
MESSAGE_SEND_FAX_ERROR 0x6001发送传真失败事件
MESSAGE_RECEIVE_FAX_OK 0x6002接收传真成功事件
MESSAGE_RECEIVE_FAX_ERROR 0x6003接收传真失败事件
MESSAGE_FAX_HAVE_REMOTE_TEL_NO 0x6004 有对方传真号码事件
MESSAGE_FAX_HAVE_INFORMATION 0x6005 有传真信息事件
MESSAGE_PLAY_SOUND_END 0x7031 声卡放音结束事件
MESSAGE_PLAY_SOUND_EXIT 0x7032 声卡放音退出事件
ChannelNo 指示发生事件的逻辑通道号码。传真通道和语音通道独立。
Parameter与相应事件相关联的参数,不同的事件附带不同的参数,关于事件 类型及其它参数的详细解释,请参考事件类型的相关章节。
返 回: 如果有事件,返回0,相应的事件内容存于pMessageBuffer中。
注 释: 一定在本函数返回0时,pMessageBuffer中的内容才有意义。
用户应用程序需要不断的循环调用该函数,取得各个通道的事件,并
进行处理或根据实际需要发送命令,才能保证USB语音系统的正常运
行。一般情况下,在初始化USB语音盒之后,便开始循环调用该函数。
两次调用该函数的时间间隔不能大于100毫秒,否则语音不连续。
? GX_CheckMessageForWindows
函数原型: unsigned short CheckMessageForWindows(
unsigned short WaitTime, PGX_MESSAGE_INFO pMessageBuffer)
功 能: 检测语音卡的事件
参 数: ChannelNo 逻辑通道号码。
pMessageBuffer 指向PGX_MESSAGE_INFO结构的地址指针,用于存
放返回的事件,具体说明参见GX_GetMessageForWindows函数 返 回: 如果调用成功,返回0。
注 释: 调用CheckMessageForWindows函数检测语音卡是否有事件,但检测
到有事件后必须调用GX_GetMessageForWindows函数把事件取走。推
荐直接调用GX_GetMessageForWindows函数查询语音卡事件。
5.4.6 两线模拟中继模块接口函数
? GX_TrunkHookOff
函数原型: unsigned short GX_TrunkHookOff(unsigned short ChannelNo)
功 能: 设置中继模块摘机。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0。
注 释: 对于中继模块通道,当有振铃事件或需要向外拨号时,必须首先摘
机,才能进行其它操作。如在有振铃事件时,先摘机,然后进行放
音、录音或DTMF识别等操作。
? GX_TrunkHookOn
函数原型: unsigned short GX_TrunkHookOn(unsigned short ChannelNo)
功 能: 设置中继模块挂机。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0
注 释: 对于中继模块通道,当双方通话完毕或检测到对方挂机时,应该挂
机。
? GX_StartDetectTrunkPolarity
函数原型: unsigned short GX_StartDetectTrunkPolarity(
unsigned short ChannelNo) 功 能: 开始检测中继模块的极性反转,该函数主要用于在特殊情况下,需
要检测极性反转时,使用该函数如果检测到有极性反转,则送出事
件MESSAGE_TRUNK_HAVE_POLE,并停止检测极性反转;如果需要停止
检测,可以调用GX_StopDetectTrunkPolarity函数。
当用于呼出时,判定对方是否摘机的极性反转,系统自动检测,无
须调用该函数。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0
注 释: 在使用本功能时,必须首先向电信公司申请极性反转功能。
? GX_StopDetectTrunkPolarity
函数原型: unsigned short GX_StopDetectTrunkPolarity(
unsigned short ChannelNo) 功 能: 停止检测中继模块的极性反转。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartTrunkPickUp
函数原型: unsigned short GX_StartTrunkPickUp(unsigned short ChannelNo,
unsigned short TimeByMicroSecond) 功 能: 中继模块拍叉簧。
参 数: ChannelNo 逻辑通道号码。
TimeByMicroSecond 拍叉簧动作的时间,单位毫秒。 返 回: 如果调用成功,返回0
注 释: 所谓的拍插动作,就是当模块由摘机状态转换到挂机状态,然后再回
到摘机状态的总共时间小于一定时间的动作
? GX_StopTrunkPickUp
函数原型: unsigned short GX_StopTrunkPickUp(unsigned short ChannelNo)
功 能: 停止中继模块拍叉簧。如果 GX_StartTrunkPickUp中拍叉簧动
作的时间太长,可调用该函数终止。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0
注 释:
5.4.7 用户模块接口函数
? GX_UserRingOn
函数原型: unsigned short GX_UserRingOn(
unsigned short ChannelNo,unsigned short
RingOnTime, unsigned short RingOffTime,
unsigned short TotalTimes) 功 能: 设置用户模块振铃。振铃信号是周期性的,每个周期由两段组成,
即有无,每一段时间均可设定,总的振铃周期数量也可以设定。在
振铃完毕时,会返回振铃结束(MESSAGE_USER_RING_END)事件,如果
在振铃期间发送停止振铃命令,则立即停止振铃,并且没有任何事
件返回。
参 数: ChannelNo 逻辑通道号码
RingOnTime 代表振铃时间,单位毫秒,取值0x0001—0xFFFF。
RingOffTime 代表不振铃时间,单位毫秒,取值0x0000—0xFFFF。
TotalTimes 代表总的振铃周期数量,取值0x0001--0xFFFF。 返 回: 如果调用成功,返回0
注 释:
送出的振铃信号波形如下:
OnTime OffTime OnTime OffTime
… … …
第一个振铃周期 第二个振铃周期
? GX_UserRingOff
函数原型: unsigned short GX_UserRingOff(unsigned short ChannelNo)
功 能: 停止用户模块振铃。
参 数: ChannelNo 逻辑通道号码。
返 回: 如果调用成功,返回0
注 释:
? GX_SetUserPickUpTime
函数原型: BOOL unsigned short GX_SetUserPickUpTime(unsigned short
TimeByMicroSecond)
功 能: 设置用户模块拍插时间。
参 数: TimeByMicroSecond 以毫秒为单位的时间,该缺省值为500ms。
返 回: 如果调用成功,返回0
注 释: 该函数对整个系统的所有用户模块均发生作用,当用户模块有拍插
动作时,USB语音盒发送MESSAGE_USER_PICK_UP事件。
所谓的拍插动作,就是当用户模块由摘机状态转换到挂机状态,然
后再回到摘机状态的总共时间小于一定时间的动作。
5.4.8 侦听通道接口函数
? GX_ListenChannel
函数原型: unsigned short GX_ListenChannel(
unsigned short ChannelNo,unsigned short SourceChannel)
功 能: 侦听通道,即逻辑通道号码为ChannelNo的通道侦听逻辑通道号码
为SourceChannel的通道。
参 数: ChannelNo 目的通道的逻辑号码
SourceChannel 源通道的逻辑号码
返 回: 如果调用成功,返回0
注 释: 当函数成功调用后,目的通道的信息来源于被侦听的通道,而在这
种情况下发送放音命令时,将无法正确放音。
特别说明: USB语音盒是使用声卡侦听,ChannelNo必须是0,SourceChannel
才是侦听的逻辑通道号。
? GX_UnListenChannel
函数原型: unsigned short GX_UnListenChannel(unsigned short ChannelNo)
功 能: 停止侦听,即停止逻辑通道号码为ChannelNo的通道侦听其它通道。
参 数: ChannelNo 目的通道的逻辑号码
返 回: 如果调用成功,返回0
注 释:
特别说明: USB语音盒是使用声卡侦听,ChannelNo必须是0
? GX_SetLink
函数原型: unsigned short GX_SetLink(unsigned short ChannelNo,
unsigned short OtherChannel);
功 能: 两路连通通话。
参 数: ChannelNo 通道号一
OtherChannel 通道号二
返 回: 如果调用成功,返回0
注 释: 两路拆除连通调用GX_ClearLink。
特别说明: USB语音盒两路连通通话只能是同一个盒中的线路通话,ChannelNo
和OtherChannel是在同一盒中线路。
? GX_ClearLink
函数原型:unsigned short GX_ClearLink(unsigned short ChannelNo,
unsigned short OtherChannel)
功 能:两路拆除连通。
参 数:ChannelNo 通道号一
OtherChannel 通道号二
返 回:如果调用成功,返回0
注 释:必须在GX_SetLink两路连通不用时使用
特别说明:USB语音盒两路连通通话只能是同一个盒中的线路通话,ChannelNo和
OtherChannel是在同一盒中线路。
5.4.9 声卡监听/放音接口函数
USB语音盒的放音、监听通过电脑声卡实现,接听时把音响或耳机插头插入电脑声卡插孔即可。
? GX_StartPlaySound
函数原型: unsigned short GX_StartPlaySound(char *FileName,
unsigned long Offset,unsigned long Length,BOOL bWav);
功 能: 开始声卡放音,放音结束时发送MESSAGE_PLAY_SOUND_END事件给应
用程序。
参 数: FileName 放音文件名,含有文件存放的路径,最大长度为
MAX_FILE_NAME_NUM-1
Ofsset 指定放音文件的字节偏移长度
Length 指定放音文件的字节长度,如果设为0xFFFFFFFF,则
表示一直到文件结尾
bWav 该文件是否为Windows的WAV文件
返 回: 如果调用成功,返回0
注 释: 该函数不检测播放的文件格式,播放的文件格式与
GX_SetVoiceCompress函数设置的格式有关,如果放的音不正确,请
检查设置的语音数据格式是否正确。如果播放的是WAV文件,该函数
只支持A-Law和GSM格式,与GX_SetVoiceCompress函数也相关。
? GX_StopPlaySound
函数原型: unsigned short GX_StopPlaySound(); 功 能: 停止声卡放音
参 数: 无
返 回: 如果调用成功,返回0
注 释:
? GX_StartMonitorSound
函数原型: unsigned short GX_StartMonitorSound(
unsigned short ChannelNo); 功 能: 开始声卡监听
参 数: ChannelNo 监听的逻辑通道
返 回: 如果调用成功,返回0
注 释:
? GX_StopMonitorSound
函数原型: unsigned short GX_StopMonitorSound; 功 能: 停止声卡监听
参 数: 无
返 回: 如果调用成功,返回0
注 释: 开始声卡监听后,在不再监听或要监听其他通道后调用该函数
5.4.10 信号音识别接口函数
? GX_StartDetectDialTone
函数原型: unsigned short GX_StartDetectDialTone(
unsigned short ChannelNo) 功 能: 开始识别标准450Hz的拨号音,当识别到拨号音时,发送
MESSAGE_HAVE_DIAL_TONE(有拨号音)事件给应用程序。 参 数: ChannelNo 通道的逻辑号码
返 回: 如果调用成功,返回0
注 释: 该函数仅仅识别标准的拨号音,这个函数常常在中继模块的摘机之
后,而在拨号之前调用,以验证线路是否可以拨号。在检测到标准
拨号音后,USB语音盒继续检测标准拨号音,并不停止;如果要停止
检测,必须调用函数GX_StopDetectDialTone。
? GX_StopDetectDialTone
函数原型: unsigned short GX_StopDetectDialTone(
unsigned short ChannelNo) 功 能: 停止检测标准拨号音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartDetectBackTone
函数原型: unsigned short GX_StartDetectBackTone(
unsigned short ChannelNo) 功 能: 开始识别标准450Hz的回铃音,当识别到回铃音(2个周期)时,发送
MESSAGE_HAVE_BACK_TONE(有回铃音)事件给应用程序。 参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0。
注 释: 该函数仅仅识别标准的回铃音,这个函数常常在中继模块的拨号之
后调用,以验证线路是否接通。
在检测到标准回铃音后,USB语音盒继续检测标准回铃音,并不停止;
如果要停止检测,必须调用函数GX_StopDetectBackTone。
? GX_StopDetectBackTone
函数原型: unsigned short GX_StopDetectBackTone(
unsigned short ChannelNo) 功 能: 停止检测标准回铃音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartDetectBusyTone
函数原型: unsigned short GX_StartDetectBusyTone(
unsigned short ChannelNo) 功 能: 开始识别标准450Hz的忙音,当识别到,个忙音周期时(350/700),
发送MESSAGE_HAVE_BUSY_TONE(有忙音)事件给应用程序。 参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 该函数仅仅识别标准的忙音,这个函数常常在中继模块拨号之后调
用,以验证线路是否接通;或在双方通话之中调用,以检测对方是
否挂机。在检测到标准忙音后,USB语音盒继续检测标准忙音,并不
停止;如果要停止检测,必须调用函数GX_StopDetectBusyTone。
? GX_StopDetectBusyTone
函数原型: unsigned short GX_StopDetectBusyTone(
unsigned short ChannelNo) 功 能: 停止检测标准忙音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartDetectToneData
函数原型: unsigned short GX_StartDetectToneData(
unsigned short ChannelNo) 功 能: 识别450Hz频率的声音,定时(每个204ms)送出识别的结果数据事
件(MESSAGE_HAVE_Tone_DATA)。识别结果数据由16位的一个字表
示,这个字的每一位的1或0分别代表有要识别的语音和没有要识
别的语音。祥细说明参见GX_StartDetectSilence函数。 参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。要停止识别,必须调用函
数GX_StopDetectToneData。
特别说明: USB语音盒不支持该函数,调用后无意义。
? GX_StopDetectToneData
函数原型: unsigned short GX_StopDetectToneData(
unsigned short ChannelNo) 功 能: 停止识别信号音数据
参 数: ChannelNo 通道的逻辑号码
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。
特别说明: USB语音盒不支持该函数,调用后无意义。
? GX_SetToneFrequency
函数原型: unsigned short GX_SetToneFrequency(unsigned short ChannelNo,
unsigned short Frequency) 功 能: 设置识别信号音数据的频率。该函数设置语音卡检测拨号音、回铃
音、忙音的频率。
参 数: ChannelNo 通道的逻辑号码
Frequency 检测信号音的频率,单位Hz(赫兹)
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。语音卡缺省自动检测450Hz
的标准信号音的拨号音、回铃音和忙音。如果交换机不标准,那么信
号音的就频率就不是450Hz,此时可调用该函数设置语音卡检测信号
音的频率
特别说明: USB语音盒不支持该函数,调用后无意义。
? GX_GetToneInfo
函数原型: unsigned short GX_GetToneInfo(
unsigned short ChannelNo,PGX_TONE_INFO ToneInfo)
功 能: 获取当前语音卡识别信号音的参数
参 数: ChannelNo 通道的逻辑号码
PGX_TONE_INFO 结构的地址指针,定义如下:
typedef struct _GX_TONE_INFO
{
unsigned short DialToneMinTotalTime;
unsigned short BusyToneMaxTotalTime;
unsigned short BusyToneMinTotalTime;
unsigned short BusyToneRatio;
unsigned short BusyToneErrorBetweenTwo;
unsigned short BusyToneTotalTimes;
unsigned short BackToneMaxTotalTime;
unsigned short BackToneMinTotalTime;
unsigned short BackToneRatio;
unsigned short BackToneErrorBetweenTwo;
unsigned short BackToneTotalTimes; }GX_TONE_INFO, *PGX_TONE_INFO; DialToneMinTotalTime 声音持续认为是拨号音的最短时间,
缺省为2500毫秒
BusyToneMaxTotalTime 忙音断续声中,认为声音是忙音的最
大时间长度,缺省为1500毫秒
BusyToneMinTotalTime 忙音断续声中,认为声音是忙音的最
小时间长度,缺省为500毫秒
BusyToneRatio 忙音断续声中,认为是忙音时一次有
声音的时间与断续声时间之和的百
分比,缺省为50%
BusyToneErrorBetweenTwo 忙音断续声中,一次有声音的时间与
断续声时间之和的百分比少于多少
认为不是忙音,缺省为10%
BusyToneTotalTimes 检测忙音次数,语音卡检测到多少次
忙音的断续音才认为有忙音,缺省为
3次
BackToneMaxTotalTime 回铃音断续声中,认为声音是回铃音
的最大时间长度,缺省为6000毫秒
BackToneMinTotalTime 回铃音断续声中,认为声音是回铃音
的最小时间长度,缺省为4000毫秒
BackToneRatio 回铃音断续声中,认为是回铃音时一
次有声音的时间与断续声时间之和
的百分比,缺省为20%
BackToneErrorBetweenTwo 回铃音断续声中,一次有声音的时间
与断续声时间之和的百分比少于多
少认为不是回铃音,缺省为10%
BackToneTotalTimes 检测回铃音次数,语音卡检测到多少
次回铃音的断续音才认为有回铃音,
缺省为2个
返 回: 如果调用成功,返回0
注 释:
? GX_SetToneInfo
函数原型: unsigned short GX_SetToneInfo(
unsigned short ChannelNo,PGX_TONE_INFO ToneInfo)
功 能: 设置语音卡识别信号音参数
参 数: ChannelNo 通道的逻辑号码
PGX_TONE_INFO 结构的地址指针,定义如下:
typedef struct _GX_TONE_INFO
{
unsigned short DialToneMinTotalTime;
unsigned short BusyToneMaxTotalTime;
unsigned short BusyToneMinTotalTime;
unsigned short BusyToneRatio;
unsigned short BusyToneErrorBetweenTwo;
unsigned short BusyToneTotalTimes;
unsigned short BackToneMaxTotalTime;
unsigned short BackToneMinTotalTime;
unsigned short BackToneRatio;
unsigned short BackToneErrorBetweenTwo;
unsigned short BackToneTotalTimes; }GX_TONE_INFO, *PGX_TONE_INFO; DialToneMinTotalTime 声音持续认为是拨号音的最短时间,
缺省为2500毫秒
BusyToneMaxTotalTime 忙音断续声中,认为声音是忙音的最
大时间长度,缺省为1500毫秒
BusyToneMinTotalTime 忙音断续声中,认为声音是忙音的最
小时间长度,缺省为500毫秒
BusyToneRatio 忙音断续声中,认为是忙音时一次有
声音的时间与断续声时间之和的百
分比,缺省为50%
BusyToneErrorBetweenTwo 忙音断续声中,一次有声音的时间与
断续声时间之和的百分比少于多少
认为不是忙音,缺省为10%
BusyToneTotalTimes 检测忙音次数,语音卡检测到多少次
忙音的断续音才认为有忙音,缺省为
3次
BackToneMaxTotalTime 回铃音断续声中,认为声音是回铃音
的最大时间长度,缺省为6000毫秒
BackToneMinTotalTime 回铃音断续声中,认为声音是回铃音
的最小时间长度,缺省为4000毫秒
BackToneRatio 回铃音断续声中,认为是回铃音时一
次有声音的时间与断续声时间之和
的百分比,缺省为20%
BackToneErrorBetweenTwo 回铃音断续声中,一次有声音的时间
与断续声时间之和的百分比少于多
少认为不是回铃音,缺省为10%
BackToneTotalTimes 检测回铃音次数,语音卡检测到多少
次回铃音的断续音才认为有回铃音,
缺省为2个
返 回: 如果调用成功,返回0
注 释:
? GX_SetSpecialSignalFrequency(选配)
函数原型: unsigned short GX_SetSpecialSignalFrequency
(unsigned short ChannelNo, unsigned short Frequency)
功 能: 设置识别信号音的频率。该函数设置频率对拨号音、回铃音、忙音
等标准信号音无影响
参 数: ChannelNo 通道的逻辑号码
Frequency 识别信号音的频率
返 回: 如果调用成功,返回0
注 释: 该函数设置识别指定频率的信号音,对拨号音、回铃音、忙音等标准
信号音无影响。可用于识别2100Hz的传真信号音,判断对方是否为
传真。该功能是选配功能,在购买语音卡时必须说明选配。
注 释: USB语音盒上为兼容PCI接口保留该函数。
特别说明: USB语音盒不支持该函数,调用无意义。
? GX_StartDetectSpecialSignal(选配)
函数原型: unsigned short GX_StartDetectSpecialSignal(
unsigned short ChannelNo,
unsigned short TimeByMilliSecond) 功 能: 开始识别指定频率的信号音
参 数: ChannelNo 通道的逻辑号码
TimeByMilliSecond 识别信号音持续的时间,单位毫秒
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。该函数设置识别指定频
率的信号音,对拨号音、回铃音、忙音等标准信号音无影响。识别到
指定频率的信号音后,会有MESSAGE_HAVE_SPECIAL_SIGNAL
事件。可用于识别2100Hz的传真信号音,判断对方是否为传真。该
功能是选配功能,在购买语音卡时必须说明选配。
特别说明: USB语音盒不支持该函数,调用无意义。
? GX_StopDetectSpecialSignal(选配)
函数原型: unsigned short GX_SetSpecialSignalFrequency(
unsigned short ChannelNo, unsigned short Frequency)
功 能: 停止识别指定频率的信号音
参 数: ChannelNo 通道的逻辑号码
Frequency 识别信号音的频率
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。该函数停止识别指定频
率的信号音,对拨号音、回铃音、忙音等标准信号音无影响。可用于
识别2100Hz的传真信号音,判断对方是否为传真。该功能是选配功
能,在购买语音卡时必须说明选配。
特别说明: USB语音盒不支持该函数,调用无意义。
5.4.11 信号音产生接口函数
? GX_StartGenerateSignal
函数原型: unsigned short GX_StartGenerateSignal(
unsigned short ChannelNo,unsigned short Frequency0,
unsigned short Frequency1, unsigned short OnTime,
unsigned short OffTime, unsigned short TotalTimes,
char StopChar)
功 能: 产生300Hz—3400Hz之间的一个或两个频率的有无间断的周期性声
音,每一个周期分为两段,第一段产生信号音,第二段不产生信号
音。并在产生完毕时,发送事件(MESSAGE_GENERATE_SIGNAL_END);
如果有指定的停止发送信号音的DTMF按键,则在收到指定的停止发
送信号音的DTMF按键时,发送事件
(MESSAGE_GENERATE_SIGNAL_EXIT),然后发送有DTMF事件;如果
在产生信号音中间发送停止发送信号音命令,则立即停止发送信号
音,并且没有任何事件产生。
参 数: ChannelNo 通道的逻辑号码。
Frequency0 指定第一个频率的频率值,单位赫兹(Hz)。
Frequency1 指定第二个频率的频率值,单位赫兹(Hz)。
OnTime 指定产生信号音的时间,单位毫秒,取值
0x0000-0x7FFF。
OffTime 指定不产生信号音的时间,单位毫秒,取值
0x0000-0x7FFF。
TotalTimes 指定产生信号音的周期次数。
StopChar 指定如果通道收到某个或某些DTMF按键,停止产生信
号音,有效取值如下:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。
如果要停止产生信号音,必须调用函数GX_StopGenerateSignal。
如果要使StopChar生效,必须首先调用识别DTMF函数
GX_StartDetectDTMF
特别说明: USB语音盒不支持参数Frequency0和Frequency1,这两个参数无效,
自动支持450Hz。与调用函数GX_StartPlaySignal功能相同。参数
OnTime和OffTime对应:
OnTime OffTime 意义
时间(ms) 1000 0 拨号音
1000 5000 回铃音
350 350 忙音一
700 700 忙音二
其他值 其他值
? GX_StopGenerateSignal
函数原型: unsigned short GX_StopGenerateSignal(
unsigned short ChannelNo) 功 能: 停止产生信号音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartPlaySignal
函数原型: unsigned short GX_StartPlaySignal(
unsigned short ChannelNo,unsigned short Type,
unsigned short TotalTimes,char StopChar);
功 能: 产生信号音。
参 数: ChannelNo 通道的逻辑号码。
Type 信号音类型
TotalTimes 指定产生信号音的周期次数。
StopChar 指定如果通道收到某个或某些DTMF按键,停止产生信
号音,有效取值如下:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: USB语音盒支持。如果要停止产生信号音,必须调用函数
GX_ StopPlaySignal。该函数产生450Hz标准信号音。信号音类型为:
类型 值 意义
SIGNAL_TYPE_DIAL 0x00 拨号音
SIGNAL_TYPE_BACK 0x01 回铃音
SIGNAL_TYPE_BUSY350 0x02 忙音一
SIGNAL_TYPE_BUSY700 0x03 忙音二
SIGNAL_TYPE_OTHER 0x04 其他
? GX_StopPlaySignal
函数原型: unsigned short GX_StopPlaySignal(unsigned short ChannelNo)
功 能: 停止产生信号音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: USB语音盒支持。
5.4.12 DTMF识别和产生接口函数
? GX_StartDetectDTMF
函数原型: unsigned short GX_StartDetectDTMF(unsigned short ChannelNo,
unsigned short SmartLevel) 功 能: 开始识别DTMF按键,在识别到DTMF时,发送事件
(MESSAGE_HAVE_DTMF),并继续识别,直到发送停止识别命令。应用
程序可以随时调用函数GX_GetDTMFKey来获取已经识别到的DTMF按
键。
参 数: ChannelNo 通道的逻辑号码。
SmartLevel 指定识别DTMF的灵敏度,取值为0-2,数字越大越灵
敏,但应注意,灵敏度越大,识别的准确率可能降低。
通常取0
返 回: 如果调用成功,返回0
注 释: 要检测DTMF请先调用该函数。
? GX_StopDetectDTMF
函数原型: unsigned short GX_StopDetectDTMF(unsigned short ChannelNo)
功 能: 停止检测DTMF按键。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_ClearDTMFBuffer
函数原型: unsigned short GX_ClearDTMFBuffer(unsigned short ChannelNo)
功 能: 清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 该函数多数用在已经调用开始识别DTMF按键后,在获取新的按键之
前,清除通道内没有用的DTMF按键。
? GX_GetDTMFKey
函数原型: unsigned short GX_GetDTMFKey(unsigned short ChannelNo,
unsigned short DTMFCount,char *DTMFKey)
功 能: 获取DTMF按键,从ChannelNo通道内提取数量为DTMFCount个按键。
如果含有足够数量的DTMF按键,则将按键依次添入DTMFKey所指的
缓存区中,并返回TRUE;否则返回FALSE。
参 数: ChannelNo 通道的逻辑号码。
DTMFKey 存放取回的DTMF按键,数量为DTMFCount。
DTMFCount 要取回的DTMF按键数量,取值为
1——(MAX_DTMF_NUM-1)。
返 回: 如果含有所需数目的DTMF按键,返回0,按键存于DTMFKey中 注 释:
? GX_GenerateDTMFString
函数原型: unsigned short GX_GenerateDTMFString(
unsigned short ChannelNo, char *DTMFString)
功 能: 产生DTMF按键。
参 数: ChannelNo 通道的逻辑号码。
DTMFString 要产生的DTMF按键的字符串,以0x00结尾,数量小于
MAX_DTMF_NUM-1。有效的字符为:0——9、*、#、A、B、C、D。 返 回: 如果调用成功,返回0
注 释: 不能与放音函数同时调用。
? GX_AutoDialOut
函数原型: unsigned short GX_AutoDialOut(unsigned short ChannelNo,
char *DTMFString)
功 能: 自动拨号
参 数: ChannelNo 通道的逻辑号码。
DTMFString 要产生的DTMF按键的字符串,以0x00结尾,数量小于
MAX_DTMF_NUM-1。有效的字符为:0——9、*、#、A、B、
C、D。
返 回: 如果调用成功,返回0
注 释: USB语音盒上为兼容PCI接口保留该函数。
对于中继模块,摘机后调用GX_AutoDialOut拨号,拨号结果会返回
事件
MESSAGE_AUTO_DIAL_NO_DIAL_TONE 无拨号音
MESSAGE_AUTO_DIAL_NONE_LISTEN 无人接听
MESSAGE_AUTO_DIAL_HAVE_BUSY 有忙音
MESSAGE_AUTO_DIAL_HOOK_OFF 对方摘机,通话
在自动拨号时内部调用了GX_StartTimeOutForWindows启动了定时
器,调用该函数时不能再在应用程序中调用
GX_StartTimeOutForWindows函数。
特别说明: USB语音盒不支持该函数,调用无意义。要拨号调用函数
GX_GenerateDTMFString,参见例子拨号震铃。
5.4.13 录音接口函数
? GX_StartRecordFile
函数原型: unsigned short GX_StartRecordFile(
unsigned short ChannelNo,char*FileName,
unsigned long Offset,unsigned long Length,char StopChar)
功 能: 开始文件录音,将录音数据存于文件。可以设置录音长度,或设置
在收到某个或某些DTMF按键时,停止录音。当录音数据达到要求时,
停止录音,并送出事件MESSAGE_RECORD_VOICE_END;当收到相应的
DTMF按键时,停止录音,并送出事件MESSAGE_RECORD_VOICE_EXIT。 参 数: ChannelNo 通道的逻辑号码。
FileName 录音文件名称,含有文件存放的路径,最大长度为
MAX_FILE_NAME_NUM-1。
Offset 如果录音文件存在,存放语音的起始位置,如果录音文
件不存在,必须设置为0。
Length 需要录音数据的字节长度,如果设为0xFFFFFFFF,则
一直录音,直到发送录音停止命令,或有指定的DTMF
收到。
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释:
? GX_StartRecordWaveFile
函数原型: unsigned short GX_StartRecordWaveFile(
unsigned short ChannelNo,char*FileName,
unsigned long Offset,unsigned long Length,char StopChar)
功 能: 与GX_StartRecordFile功能相同。开始文件录音,将录音数据存于
文件。可以设置录音长度,或设置在收到某个或某些DTMF按键时,
停止录音。当录音数据达到要求时,停止录音,并送出事件
MESSAGE_RECORD_VOICE_END;当收到相应的DTMF按键时,停止录音,
并送出事件MESSAGE_RECORD_VOICE_EXIT。
参 数: ChannelNo 通道的逻辑号码。
FileName 录音文件名称,含有文件存放的路径,最大长度为
MAX_FILE_NAME_NUM-1。
Offset 如果录音文件存在,存放语音的起始位置,如果录音文
件不存在,必须设置为0。
Length 需要录音数据的字节长度,如果设为0xFFFFFFFF,则
一直录音,直到发送录音停止命令,或有指定的DTMF
收到。
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 生成的文件格式是Windows 的Wav文件格式,可以直接使用Windows
的媒体播放器播放。Wav文件格式的数据格式也有多种多样,USB语
音盒支持A-law和GSM数据格式的Wav文件。设置调用
GX_SetVoiceCompress。
? GX_StartRecordBuffer
函数原型: unsigned short GX_StartRecordBuffer(
unsigned short ChannelNo,char*Buffer,
unsigned long Offset,unsigned long Length,char StopChar)
功 能: 开始缓存区录音,将录音数据存于缓存区。必须设置录音长度,可
以设置在收到某个或某些DTMF按键时,停止录音。当录音数据达到
要求时,停止录音,并送出事件MESSAGE_RECORD_VOICE_END;当收
到相应的DTMF按键时,停止录音,并送出事件
MESSAGE_RECORD_VOICE_EXIT。
参 数: ChannelNo 通道的逻辑号码。
Buffer 录音缓存区,
Offset 存放语音的起始位置
Length 需要录音数据的字节长度,如果设为0xFFFFFFFF,则
一直录音,直到发送录音停止命令,或有指定的DTMF
收到。
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释:
? GX_StopRecordVoice
函数原型: unsigned short GX_StopRecordVoice(unsigned short ChannelNo)
功 能: 停止录音,停止某个通道的录音操作 。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_GetRecordLength
函数原型: unsigned short GX_GetRecordLength(unsigned short ChannelNo,
unsigned long *RecordLength)
功 能: 取得当前录音长度。
参 数: ChannelNo 通道的逻辑号码。
RecordLength 存放当前录音长度
返 回: 如果调用成功,返回0
注 释:
5.4.14 放音接口函数
USB语音盒提供一系列功能强大的放音函数,既包括单一的文件或缓存区放音,也包括多文件或多缓存区的索引放音。
对于任何一种放音,如果需要中途停止放音,调用函数GX_StopPlayVoice即可。
对于文件索引放音:
USB语音盒为每一个逻辑通道独立建立一个最大长度为64的索引文件表,使用GX_InitPlayIndexFile初始化这个索引文件表,即将索引文件表清空;使用 GX_AddPlayIndexFile增加项目到索引文件表;调用GX_StartPlayIndexFile函数进行索引文件放音,该函数从指定通道的索引文件表的第一个文件开始放音,当第一个文件结束时,自动放音下一个,直至索引表中的所有文件放音完毕,发送
MESSAGE_PLAY_VOICE_END事件。
对于缓存区索引放音:
USB语音盒仅仅建立一个最大数量为256的缓存区索引表,所有通道的索引缓
存区放音都使用相同的这个索引表,调用GX_InitPlayIndexBuffer函数来初始化
这个索引表,即将索引表清空;调用GX_AddPlayIndexBuffer函数增加表中的项目,
每个缓存区的加入是顺序进行的;调用GX_StartPlayIndexBuffer函数启动索引缓
存区放音。
对于索引文件放音的应用,举例如下:
如有0、1、2、年、月、日的语音文件,文件名分别为:Zero.tel、One.tel、Two.tel、Year.tel、Month.tel、Day.tel,那么要在第八通道放音“2001年2月1日”这段话,只需如此操作(8为逻辑通道号):
GX_InitPlayIndexFile(8);
GX_AddPlayIndexFile(8,“Two.tel”);
GX_AddPlayIndexFile(8,“Zero.tel”);
GX_AddPlayIndexFile(8,“Zero.tel”);
GX_AddPlayIndexFile(8,“One.tel”);
GX_AddPlayIndexFile(8,“Year.tel”);
GX_AddPlayIndexFile(8,“Two.tel”);
GX_AddPlayIndexFile(8,“Month.tel”);
GX_AddPlayIndexFile(8,“One.tel”);
GX_AddPlayIndexFile(8,“Day.tel”);
GX_StartPlayIndexFile(8, StopChar);
对于索引文件放音的应用,举例如下:
应用系统首先申请足够数量的缓存区,然后将频繁使用的语音读入相应的缓存区,再建立索引表,即可使用索引缓存区放音。
如有0、1、2、年、月、日的语音,缓存区的指针分别为:Zero、One、Two、Year、
Month、Day,那么可以如下建立缓存区索引表:
GX_InitPlayIndexBuffer();
GX_AddPlayIndexBuffer(Zero, xxxx);
GX_AddPlayIndexBuffer(One, xxxx);
GX_AddPlayIndexBuffer(Two, xxxx);
GX_AddPlayIndexBuffer(Year, xxxx);
GX_AddPlayIndexBuffer(Month, xxxx);
GX_AddPlayIndexBuffer(Day, xxxx);
其中xxxx代表相应缓存区字节长度
那么,无论以后哪个通道进行索引缓存区放音,均使用这个索引表,如要在第八通道
放音“2001年2月1日”这段话,只需如此操作:
unsigned short Buffertable[9]={2,0,0,1,3,2,4,1,5};
GX_StartPlayIndexBuffer(8,BufferTable,9,StopChar)
其中BufferTable项的值,就是各个语音缓存区在缓存区索引表中的顺序号。
下面详细叙述各种放音相关函数;
? GX_StartPlayFile
函数原型: unsigned short GX_StartPlayFile(unsigned short ChannelNo,
char*FileName,unsigned long Offset,
unsigned long Length,char StopChar) 功 能: 开始文件放音,放音数据存于文件。当发送停止放音命令,或收到
某个或某些设定的停止DTMF按键时,停止放音。当所有要求的放音
数据放完时,停止放音,并送出事件MESSAGE_PLAY_END;当收到相
应的DTMF按键时,停止放音,并送出事件MESSAGE_PLAY_EXIT。 参 数: ChannelNo 通道的逻辑号码。
FileName 如果放音数据在文件中,则指定文件名称,含有文件
存放的路径,最大长度为MAX_FILE_NAME_NUM-1
Ofsset 指定放音文件的字节偏移长度
Length 指定放音文件的字节长度,如果设为0xFFFFFFFF,则
表示一直到文件结尾
StopChar 停止放音的DTMF,当收到相应的DTMF按键时,停止放
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释:
? GX_StartPlayWavFile
函数原型: unsigned short GX_StartPlayWavFile (unsigned short ChannelNo,
char*FileName,unsigned long Offset,
unsigned long Length,char StopChar) 功 能: 与GX_ StartPlayFile功能相同。开始文件放音,放音数据存于文
件。当发送停止放音命令,或收到某个或某些设定的停止DTMF按键
时,停止放音。当所有要求的放音数据放完时,停止放音,并送出
事件MESSAGE_PLAY_END;当收到相应的DTMF按键时,停止放音,并
送出事件MESSAGE_PLAY_EXIT。
参 数: ChannelNo 通道的逻辑号码。
FileName 如果放音数据在文件中,则指定文件名称,含有文件
存放的路径,最大长度为MAX_FILE_NAME_NUM-1
Ofsset 指定放音文件的字节偏移长度
Length 指定放音文件的字节长度,如果设为0xFFFFFFFF,则
表示一直到文件结尾
StopChar 停止放音的DTMF,当收到相应的DTMF按键时,停止放
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 播放的文件格式是Windows 的Wav文件格式。Wav文件格式的数据格
式也有多种多样,USB语音盒支持A-law和GSM数据格式的Wav文件。
设置调用GX_SetVoiceCompress。该函数不检测Wav格式,如果播放
声的音不正确请检测Wav文件格式是否正确。
? GX_StartPlayBuffer
函数原型: unsigned short GX_StartPlayFile(unsigned short ChannelNo,
char*Buffer,unsigned long Offset,
unsigned long Length,char StopChar)
功 能: 开始缓存区放音,放音数据存于缓存区。当发送停止放音命令,或
收到某个或某些设定的停止DTMF按键时,停止放音。当所有要求的
放音数据放完时,停止放音,并送出事件MESSAGE_PLAY_END;当收
到相应的DTMF按键时,停止放音,并送出事件MESSAGE_PLAY_EXIT。 参 数: ChannelNo 通道的逻辑号码。
Buffer 放音数据缓存区。
Ofsset 指定放音文件的字节偏移长度
Length 指定放音文件的字节长度,一定要设置,以防越界
StopChar 停止放音的DTMF,当收到相应的DTMF按键时,停止放
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释:
? GX_StopPlayVoice
函数原型: unsigned short GX_StopPlayVoice(unsigned short ChannelNo)
功 能: 停止放音操作。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 所有的放音(如文件、缓存区、索引文件和索引缓存区)停止,都
调用该函数。
? GX_GetPlayLength
函数原型: unsigned short GX_GetPlayLength(unsigned short ChannelNo,
unsigned long *PlayLength) 功 能: 取得当前实际放音长度。
参 数: ChannelNo 通道的逻辑号码。
PlayLength 存放实际放音长度
返 回: 如果调用成功,返回0
注 释:
? GX_InitPlayIndexFile
函数原型: unsigned short GX_InitPlayIndexFile(unsigned short ChannelNo)
功 能: 初始化索引放音文件,该函数清空指定通道的索引放音。 参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_AddPlayIndexFile
函数原型: unsigned short GX_AddPlayIndexFile(unsigned short ChannelNo,
char *FileName)
功 能: 向指定通道内增加索引文件
参 数: ChannelNo 通道的逻辑号码。
FileName 放音文件名
返 回: 如果调用成功,返回0
注 释:
? GX_StartPlayIndexFile
函数原型: unsigned short GX_StartPlayIndexFile(
unsigned short ChannelNo, char StopChar)
功 能: 开始索引文件放音
参 数: ChannelNo 通道的逻辑号码。
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 如果需要停止索引文件放音,调用GX_StopPlayVoice函数
? GX_InitPlayIndexBuffer
函数原型: unsigned short GX_InitPlayIndexBuffer(void)
功 能: 初始化缓存区索引,即将索引放音的缓存区清空
参 数: 无
返 回: 如果调用成功,返回0
注 释:
? GX_AddPlayIndexBuffer
函数原型: unsigned short GX_AddPlayIndexBuffer(char *Buffer,
unsigned long Length)
功 能: 添加索引缓存区
参 数: Buffer 缓存区
Length 缓存区长度
返 回: 如果调用成功,返回0
注 释:
? GX_StartPlayIndexBuffer
函数原型: unsigned short GX_StartPlayIndexBuffer(
unsigned short ChannelNo, unsigned short *IndexTable,
unsigned short IndexCount,char StopChar) 功 能: 开始索引缓存区放音
参 数: ChannelNo 通道的逻辑号码。
IndexTable 索引表,该索引表实际上是一个数组,该数组的每一个
项指代缓存区索引表中的相应缓存区的顺序号。
IndexCount 索引表中的项数
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 如果需要停止索引文件放音,调用GX_StopPlayVoice函数
5.4.15 循环录放音接口函数
? GX_StartPlayCircleBuffer
函数原型: unsigned short GX_StartPlayCircleBuffer(
unsigned short ChannelNo,char *Buffer,
unsigned long TotalLength,char StopChar) 功 能: 启动循环放音
参 数: ChannelNo 循环放音通道
Buffer 循环放音数据缓存区指针,大小为8K的整数倍
TotalLength 指定放音的字节长度,一定要设置,以防越界
StopChar 停止放音的DTMF,当收到相应的DTMF按键时,停止放
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 循环放音时,如果第一遍放完会发送
MESSAGE_PLAY_CIRCLE_FIRST_END事件,第二遍放完会发送
MESSAGE_PLAY_CIRCLE_SECOND_END事件;以此循环。
? GX_StartRecordCircleBuffer
函数原型: unsigned short GX_StartRecordCircleBuffer(
unsigned short ChannelNo,char *Buffer,
unsigned long TotalLength,char StopChar)
功 能: 启动循环录音
参 数: ChannelNo 循环录音通道
Buffer 循环录音数据缓存区指针,大小为8K的整数倍
TotalLength 指定录音的字节长度,一定要设置,以防越界
StopChar 停止录音的DTMF,当收到相应的DTMF按键时,停止录
音,有效的取值为:
0x00 表示收到任何DTMF按键都不停止
0x01 表示收到任一DTMF按键就停止
0—9,*,#,A,B,C,D 表示收到某个DTMF按键就停止
其他值 没有意义
返 回: 如果调用成功,返回0
注 释: 循环录音时,如果第一遍缓存区录满会发送
MESSAGE_RECORD_CIRCLE_FIRST_END事件,第二遍缓存区录
满会发送MESSAGE_RECORD_CIRCLE_SECOND_END事件;以此
循环。
5.4.16 话音/静音识别接口函数
? GX_StartDetectHelloVoice
函数原型: unsigned short GX_StartDetectHelloVoice(
unsigned short ChannelNo, unsigned short ThresholdValue)
功 能: 开始识别话音,当识别到有话音时,送出事件
MESSAGE_HAVE_HELLO_VOICE,并停止识别。如果需要连续识别,需
要在收到事件时,再次调用该函数。
参 数: ChannelNo 通道的逻辑号码。
ThresholdValue语音门槛值,推荐为0x13
返 回: 如果调用成功,返回0
注 释: 该函数主要用于检测对方人工摘机,当中继模块拨号完毕,可调用
该函数,检测是否有话音,如果有,则表示对方摘机。语音门槛值
ThresholdValue越小检测话音越灵敏,但也不是越小越好。
? GX_StopDetectHelloVoice
函数原型: unsigned short GX_StopDetectHelloVoice(
unsigned short ChannelNo) 功 能: 停止识别话音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartDetectBackToneHalt
函数原型: unsigned short GX_StartDetectBackToneHalt(
unsigned short ChannelNo,unsigned short HaltTimeByMs)
功 能: 开始识别回铃音,当在指定的时间内未识别到回铃音,送出事件
MESSAGE_HAVE_BACK_TONE_HALT,并停止识别。如果需要连续识别,
需要在收到事件时,再次调用该函数。
参 数: ChannelNo 通道的逻辑号码。
HaltTimeByMs 识别回铃音的时间单位毫秒,推荐为4200ms 返 回: 如果调用成功,返回0
注 释: 该函数主要用于检测对方自动摘机,当中继模块拨号完毕,可调用
该函数。
? GX_StopDetectBackToneHalt
函数原型: unsigned short GX_StopDetectBackToneHalt(
unsigned short ChannelNo) 功 能: 停止识别回铃摘机检测。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
? GX_StartDetectSilence
函数原型: unsigned short GX_StartDetectSilence(
unsigned short ChannelNo, unsigned short ThresholdValue)
功 能: 识别所有频率的声音(包括450Hz的声音),定时(每隔204ms)送
出识别的结果数据事件(MESSAGE_HAVE_SILENCE_DATA)。识别结果
数据由16位的一个字表示,这个字的每一位的1或0分别代表有声
音和无声音(静音)。USB语音盒把该时间(204ms)分成16个时间段,
分别计算出每一个时间段上的声音识别结果(0/1)。16个时间段的声
音识别结果(0/1)按时间先后顺序对应该事件参数Parameter的第一
个字的Bit15—Bit0,“,”表示静音,“,”表示非静音。 参 数: ChannelNo 通道的逻辑号码。
ThresholdValue 语音门槛值,推荐为0x15
返 回: 如果调用成功,返回0
注 释: 该函数主要用于录音时检测静音,或与函数
GX_StartDetectToneData配合进行被叫摘机检测。检测线路上是否
有语音时,只有该线路上声音的总能量大于门槛值时,才认为有语
音。门槛值越小越灵敏,但并不是越灵敏越好。
? GX_StopDetectSilence
函数原型: unsigned short GX_StopDetectSilence(unsigned short ChannelNo)
功 能: 停止识别静音。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释:
5.4.17 超时设置接口函数
? GX_StartTimeOutForWindows
函数原型: unsigned short GX_StartTimeOutForWindows(
unsigned short ChannelNo,unsigned short TimeBySecond)
功 能: 启动某一通道的超时计数,当相应的超时时间到达时,送出事件
MESSAGE_TIME_OUT,然后再重新计时,当相应的超时时间到达时,
再送出事件MESSAGE_TIME_OUT,这样周期性计时,直到停止。
参 数: ChannelNo 通道的逻辑号码。
TimeBySecond 超时时间,单位秒。
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道。
? BOOL GX_StopTimeOutForWindows
函数原型: unsigned short GX_StopTimeOutForWindows(
unsigned short ChannelNo)
功 能: 停止超时计时。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道
? GX_SetTimeOutValueForWondows
函数原型: unsigned short GX_SetTimeOutValueForWindows(
unsigned short ChannelNo,unsigned short TimeBySecond)
功 能: 重新设置超时时间,当已经启动超时计数后,需要改变超时时间时,
调用该函数。
参 数: ChannelNo 通道的逻辑号码。
TimeBySecond 新的超时时间,单位秒。
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道
5.4.18 主叫识别接口函数
? GX_StartDetectCallerID
函数原型: unsigned short GX_StartDetectCallerID(
unsigned short ChannelNo)
功 能: 开始主叫识别,当识别到有主叫时,发送MESSAGE_HAVE_CID_FSK事
件,并停止识别。如果需要继续识别,必须重新调用该函数。关于
主叫信息需要调用GX_GetFskCallerID函数取得。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道。
若主叫为DTMF制式,当识别到有主叫时,发送MESSAGE_HAVE_DTMF
事件,这时调用GX_GetDTMFKey获取。判断DTMF是否为主叫,只
要判断此时线路是否摘机即可,在线路摘机(或在第一声震铃)前
收到的就为DTMF主叫号码。
? GX_StopDetectCallerID
函数原型: unsigned short GX_StopDetectCallerID(
unsigned short ChannelNo) 功 能: 停止主叫识别。
参 数: ChannelNo 通道的逻辑号码。
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道。
? GX_GetRawFskCallerID
函数原型: unsigned short GX_GetRawFskCallerID(unsigned short ChannelNo,
char *CallerIDString) 功 能: 获取FSK主叫信息,只有在收到MESSAGE_HAVE_CID_FSK时,调用该
函数,其返回值才有意义。该函数所返回的主叫信息是未经过处理
的原始信息。
参 数: ChannelNo 通道的逻辑号码。
CallerIDString 用户提供的存放主叫信息的缓存区,最大为
MAX_CID_NUM
返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道
? GX_GetFskCallerID
函数原型: unsigned short GX_GetFskCallerID(
unsigned short ChannelNo,char*DateTime,char *TelNo,
char *Name)
功 能: 获取FSK主叫信息,只有在收到MESSAGE_HAVE_CID_FSK时,调用该
函数,其返回值才有意义。该函数所返回的主叫信息是经过处理的
信息,即已经分解成主叫日期时间、主叫号码和主叫名称等。 参 数: ChannelNo 通道的逻辑号码。
DateTime 主叫时间,字符串型,如果没有主叫时间,则返回空串。
TelNo 主叫号码,字符串型,如果没有主叫号码,则返回空串。
Name 主叫名称,字符串型,如果没有主叫名称,则返回空串。 返 回: 如果调用成功,返回0
注 释: 该函数适用于包括中继模块通道、用户模块通道、录音模块通道
对于DateTime、Telno和Name,用户提供的缓存区长度一定要大于
相应的最大可显位数,建议最好为MAX_CID_NUM。调用后一定要检测
返回值。
? GX_GetDTMFCallerID
函数原型: unsigned short GX_GetDTMFCallerID(unsigned short ChannelNo,
char *CallerIDString) 功 能: 获取DTMF主叫信息,只有在收到MESSAGE_HAVE_CID_DTMF时,调用
该函数,其返回值才有意义。
参 数: ChannelNo 通道的逻辑号码。
CallerIDString 用户提供的存放主叫信息的缓存区,最大为
MAX_DTMF_NUM
返 回: 如果调用成功,返回0
注 释: 要检测DTMF主叫,必须调用函数GX_StartDetectDTMF启动DTMF检
测。收DTMF主叫时同时有MESSAGE_HAVE_DTMF事件产生,一般认为
在震铃之前的挂机状态下收到的DTMF为DTMF主叫,摘机后收到的就
不是。因此收DTMF主叫就有两种方式,使用其中一种方式即可。一
是在有MESSAGE_HAVE_CID_DTMF事件时使用该函数取主叫,二是在有
MESSAGE_HAVE_DTMF事件调用GX_GetDTMFKey函数取码,并保存码串,
这些码串就是DTMF主叫号码。第二种方式收主叫可参考例程
Vc6_cid_dtmf或Vb6_cid_dtmf。
5.4.19 停止通道所有操作接口函数
? GX_StopAllOperate
函数原型: unsigned short GX_StopAllOperate(unsigned short ChannelNo)
功 能: 停止语音通道的一切操作,使通道恢复打开时的状态。
参 数: ChannelNo 通道的逻辑号码
返 回: 如果调用成功,返回0
注 释: 停止所有要启动的操作,包括录音、放音、超时、信号音检测等。
不包括声卡的监听和放音。
5.4.20 TTS接口函数
USB语音盒可实现简单的TTS(Text-To-Speech)功能,即把文件转换为语音播放,目前只支持中文和字母,不支持英文。
? GX_InitTTS
函数原型: unsigned short GX_InitTTS (void)
功 能: 初始化TTS资源
参 数: 无
返 回: 如果调用成功,返回0
注 释: 初始化TTS资源不用后调用GX_CloseTTS函数释放。
? GX_CloseTTS
函数原型: unsigned short GX_CloseTTS (void)
功 能: 释放TTS资源
参 数: 无
返 回: 如果调用成功,返回0
注 释: 调用GX_InitTTS函数初始化TTS资源,不用后要释放。
? GX_TTSFileToFile
函数原型: unsigned short GX_TTSFileToFile(char *TextFileName,
char *VoiceFileName)
功 能: 转换文本文件为语音文件
参 数: TextFileName 待转换的文本文件名
VoiceFileName 转换后的语音文件名
返 回: 如果调用成功,返回0
注 释: 播放文本文件前,需要把文本文件转换为语音文件,然后使用
GX_StartPlayFile放音。
? GX_TTSBufferToBuffer
函数原型: unsigned short GX_TTSBufferToBuffer (char *TextBuffer,
unsigned long TextCount,char *VoiceBuffer,
unsigned long *VoiceCount) 功 能: 把缓存中的文本转换为缓存中的语音
参 数: TextBuffer 文本缓存指针,应用程序分配的空间
TextCount 文本缓存大小,单位字节
VoiceBuffer 语音缓存指针,需要应用程序分配空间
VoiceCount 返回语音缓存中语音数据的数目,单位字节 返 回: 如果调用成功,返回0
注 释: 播放缓存中的文本前,需要把文本数据转换为语音数据。使用
GX_StartPlayBuffer放音。语音缓存的空间应该足够大,否则会出
错。
? GX_TTSBufferToFile
函数原型: unsigned short GX_TTSBufferToFile(char *TextBuffer,
unsigned long TextCount,char *VoiceFileName)
功 能: 把缓存中的文本转换为语音文件
参 数: TextBuffer 文本缓存指针,应用程序分配的空间
TextCount 文本缓存大小,单位字节
VoiceFileName 转换后的语音文件名
返 回: 如果调用成功,返回0
注 释: 播放文本前,需要把文本数据转换为语音数据。使用
GX_StartPlayFile放音。
5.4.21 语音转换接口函数
USB语音盒录、放音语音文件格式为A律PCM,如果要把语音文件直接使用windows
的媒体播放器播放,必须转换为windows的wave格式语音文件;反之,亦然。
? GX_AlawToWave
函数原型: unsigned short GX_AlawToWave(char *AlawFileName, char
*WaveFileName)
功 能: A律PCM语音文件转换为Wave(16位8000Hz采样单声道)文件格式。 参 数: AlawFileName A律PCM语音文件名
WaveFileName Wave文件名
返 回: 如果调用成功,返回0
注 释: 调用该函数不需要语音卡支持。
? GX_WaveToAlaw
函数原型: unsigned short GX_WaveToAlaw(char *WaveFileName, char
*AlawFileName)
功 能: wave(16位8000Hz采样单声道)文件格式转换为A律PCM语音文件。
参 数: WaveFileName Wave文件名
AlawFileName A律PCM语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数不需要语音卡支持。
? GX_AlawToAdpcm
函数原型: unsigned short GX_AlawToAdpcm(char *AlawFileName,
char *AdpcmFileName) 功 能: A律PCM语音文件转换为Adpcm文件格式。 参 数: AlawFileName A律PCM语音文件名
AdpcmFileName Adpcm语音文件名
返 回: 如果调用成功,返回0
注 释: 调用该函数不需要语音卡支持。
? GX_AdpcmToAlaw
函数原型: unsigned short GX_AdpcmToAlaw(char *AdpcmFileName,
char *AlawFileName) 功 能: Adpcm文件格式转换为A律PCM语音文件。 参 数: AdpcmFileName Adpcm文件名
AlawFileName A律PCM语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数不需要语音卡支持。
? GX_AlawAGC
函数原型: unsigned short GX_AlawAGC(char *SourceFileName,
char *TargetFileName) 功 能: A-law语音文件AGC处理生成A-law语音文件 参 数: SourceFileName 原文件名
TargetFileName 经处理后的文件名
返 回: 如果调用成功,返回0
注 释: 调用该函数需要语音卡支持。
? GX_AlawToWaveAGC
函数原型: unsigned short GX_AlawToWaveAGC(char *AlawFileName,
char *WaveFileName) 功 能: A-law语音文件AGC处理生成wav语音文件 参 数: AlawFileName A-law语音文件名
WaveFileName 经处理后的wav语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数需要语音卡支持。
? GX_AdpcmToAlaw
函数原型: unsigned short GX_WaveToAlawAGC(char *WaveFileName,
char *AlawFileName) 功 能: wav语音文件AGC处理生成A-law语音文件 参 数: WaveFileName wav语音文件名
AlawFileName 经处理后的A-law语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数需要语音卡支持。
? GX_WavAlawToGsm
函数原型: unsigned short GX_WavAlawToGsm(char *AlawFileName,
char *GsmFileName) 功 能: 把A-law wav语音文件转换为Gsm wav语音文件 参 数: AlawFileName 转换前A-law wav语音文件名
GsmFileName 经处理后的gsm wav语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数只能是Wav文件格式转换
? GX_WavGsmToAlaw
函数原型: unsigned short GX_WavGsmToAlaw(char *GsmFileName,
char *AlawFileName) 功 能: 把A-law wav语音文件转换为Gsm wav语音文件 参 数: GsmFileName 转换前的gsm wav语音文件名
AlawFileName 经处理后A-law wav语音文件名 返 回: 如果调用成功,返回0
注 释: 调用该函数只能是Wav文件格式转换
第六章 USB电话语音盒编程接口数据结构及常量定义
以下介绍的常量或数据结构均包含在USB电话语音盒.H文件中。
6.1 基本常量定义
#define MAX_CARD_NUM 0x0008
定义了插入同一台计算机中GX08 PCI语音卡的最大数量
#define MAX_CHANNEL_NUM 0x0040
定义了插入同一台计算机中GX08 PCI语音卡的所有语音和传真通道的最大数量 #define MAX_DTMF_NUM 0x0040
定义了所有涉及DTMF按键个数的字符串中的最大字符数量,常常只允许
MAX_DTMF_NUM-1个
#define MAX_FSK_NUM 0x0400
定义了发送FSK的字符串中的最大字符数量
#define MAX_CID_NUM 0x0080
定义了接收FSK主叫的字符串最大字符数量
#define MAX_FILE_NAME_NUM 0x0080
定义了所有涉及文件名称的字符串中的最大字符数量,常常只允许
MAX_FILE_NAME_NUM -1个
#define MAX_INDEX_BUFFER_NUM 0x0100
定义了最大索引缓存区放音的数量
#define MAX_INDEX_FILE_NUM 0x0040
定义了最大索引文件放音的数量
#define MAX_CONFERENCE_GROUP_NUM 0x000A
定义了最大会议组的数量
#define MAX_CONFERENCE_RESOURCE_NUM 0x0020
定义了最大会议资源的数量
#define MAX_CONFERENCE_GROUP_RESOURCE_NUM 0x0006
定义了每个通道最大会议资源的数量
6.2 事件数据结构
typedef struct _GX_MESSAGE_INFO{
USHORT MessageCode;
USHORT ChannelNo;
USHORT Parameter[6];
} GX_MESSAGE_INFO, *PGX_MESSAGE_INFO;
定义了事件数据结构,即每次取回事件的内容,具体意义如下:
MessageCode 占1个字,事件号码。
ChannelNo 占1个字,发生事件的通道。
Parameter 占6个字,事件参数,对于不同的事件,其内容不同,具体参见相关
的事
件类型说明章节。
第七章 USB电话语音盒编程接口事件类型说明
本章介绍的结构GX_MESSAGE_INFO中MessageCode的种类,以及与
MessageCode相对应的参数Parameter的意义,如没说明参数Parameter一般都没意义。
#define MESSAGE_HAVE_CID_FSK 0x0000
有FSK方式的主叫事件
#define MESSAGE_HAVE_CID_DTMF 0x0001
有DTMF方式的主叫事件
#define MESSAGE_HAVE_CID_ERROR 0x0002
有主叫错误事件
#define MESSAGE_HAVE_DTMF 0x0003
当识别到DTMF按键时,语音盒发送该事件
#define MESSAGE_PLAY_VOICE_END 0x0004
放音结束事件,当全部放音数据放完时,发送该事件,并停止放音
#define MESSAGE_PLAY_VOICE_EXIT 0x0005
放音中断事件,当打开或读取放音文件出错,或收到放音停止的DTMF时,发送该
事件,并停止放音
#define MESSAGE_RECORD_VOICE_END 0x0006
录音结束事件,当所需数量的录音数据录完时,发送该事件,并停止录音
#define MESSAGE_RECORD_VOICE_EXIT 0x0007
录音中断事件,当创建或写录音文件出错,或收到录音停止的DTMF时,发送该事
件,并停止录音
#define MESSAGE_GENERATE_SIGNAL_END 0x0008
发送信号音结束事件,当信号音发送完成时,发送该事件,并停止发送信号音
#define MESSAGE_GENERATE_SIGNAL_EXIT 0x0009
发送信号音中断事件,当收到中断发送信号音的DTMF时,发送该事件,并停止发
送信号音
#define MESSAGE_GENERATE_DTMF_END 0x000A
当发送完所有需要发送的DTMF按键时,发送该事件。没有命令可以中断发送DTMF
命令
#define MESSAGE_SEND_FSK_END 0x000B
当发送FSK完毕,语音卡发送该事件
#define MESSAGE_HAVE_DIAL_TONE 0x000C
当模块有标准拨号音时,发送该事件。如果要想得到该事件,必须先调用函数
GX_StartDetectDialTone。
#define MESSAGE_HAVE_BUSY_TONE 0x000D
当模块有标准忙音时,发送该事件
如果要想得到该事件,必须先调用函数GX_StartDetectBusyTone。
#define MESSAGE_HAVE_BACK_TONE 0x000E
当模块有标准回铃音时,发送该事件。如果要想得到该事件,必须先调用函数
GX_StartDetectBackTone。
#define MESSAGE_HAVE_TONE_DATA 0x000F
当模块有信号音(450HZ)数据时,发送该事件,该事件的参数Parameter的第一个
字为信号音数据。PCI语音卡上的DSP把该时间(204ms)分成16个时间段,分
别计算出每一个时间段上的信号音识别结果(0/1)。16个时间段的信号音识别结果
(0/1)按时间先后顺序对应该事件参数Parameter的第一个字的Bit15—Bit0,“,”
表示有信号音,“,”表示没有信号音。如果要想得到该事件,必须先调用函数
GX_StopDetectToneData。
#define MESSAGE_HAVE_HELLO_VOICE 0x0010
当识别到话音时,发送该事件。如果要想得到该事件,必须先调用函数
GX_StartDetectHelloVoice。
#define MESSAGE_HAVE_SILENCE_DATA 0x0011
当启动静音识别时,在固定时间(204ms)内发送该事件,该事件的参数Parameter
的第一个字表示静音数据。语音盒上把该时间(204ms)分成16个时间段,分别
计算出每一个时间段上的静音识别结果(0/1)。16个时间段的静音识别结果(0/1)按
时间先后顺序对应该事件参数Parameter的第一个字的Bit15—Bit0,“,”表示静
音,“,”表示非静音。如果要想得到该事件,必须先调用函数
GX_StartDetectSilence。
#define MESSAGE_HAVE_TIME_OUT 0x0012
当设定的超时到达时,发送该事件。如果要想得到该事件,必须先调用函数
GX_StartTimeOutForWindow。
#define MESSAGE_HAVE_FSK_DATA 0x0013
当识别到FSK信息时,发送该事件
#define MESSAGE_PLAY_CIRCLE_FIRST_END 0x0014
循环放音第一遍结束事件
#define MESSAGE_PLAY_CIRCLE_SECOND_END 0x0015
循环放音第二遍结束事件
#define MESSAGE_RECORD_CIRCLE_FIRST_END 0x0016
循环录音第一遍结束事件
#define MESSAGE_RECORD_CIRCLE_SECOND_END 0x0017
循环录音第二遍结束事件
#define MESSAGE_AUTO_DIAL_NO_DIAL_TONE 0x0018
自动拨号无拨号音事件
#define MESSAGE_AUTO_DIAL_NONE_LISTEN 0x0019
自动拨号无人接听事件
#define MESSAGE_AUTO_DIAL_HAVE_BUSY 0x001A
自动拨号有忙音事件
#define MESSAGE_AUTO_DIAL_HOOK_OFF 0x001B
自动拨号有摘机事件
#define MESSAGE_HAVE_SPECIAL_SIGNAL 0x001C
有指定频率信号音事件
#define MESSAGE_HAVE_BACK_TONE_HALT 0x001E
拨号后无回铃音事件,可用于检测对方摘机
#define MESSAGE_USER_HOOK_OFF 0x1001
当用户模块有摘机动作时,发送该事件
#define MESSAGE_USER_HOOK_ON 0x1002
当用户模块有挂机动作时,发送该事件
#define MESSAGE_USER_PICK_UP 0x1003
当用户模块有拍插动作时,发送该事件。所谓的拍插动作,就是当用户模块由摘机
状态转换到挂机状态,然后再回到摘机状态的总共时间小于一定时间的动作,该时
间缺省值是500毫秒,该值可由函数GX_SetUserPickUpTime()重新设置。
#define MESSAGE_USER_RING_END 0x1004
当用户模块振铃完成时,发送该事件
#define MESSAGE_TRUNK_RING 0x2000
当中继模块有振铃时,发送该事件,该事件的参数Parameter[0]为1表示第一次
震铃,为2表示第二次震铃. . . 。
#define MESSAGE_TRUNK_POLE 0x2001
中继模块有极性反转时,发送该事件
#define MESSAGE_TRUNK_PICK_UP_END 0x2002
对中继模块作拍插动作结束后,发送该事件
#define MESSAGE_RECORD_HOOK_OFF 0x3001
当录音模块有摘机动作时,发送该事件
#define MESSAGE_RECORD_HOOK_ON 0x3002
当录音模块有挂机动作时,发送该事件
#define MESSAGE_RECORD_RING 0x3003
当录音模块有振铃时,发送该事件,该事件的参数Parameter[0]为1表示第一次
震铃,为2表示第二次震铃. . .。
#define MESSAGE_RECORD_OPEN_CIRCLE 0x3004
当录音模块线路断开时,发送该事件
#define MESSAGE_RECORD_NO_OPEN_CIRCLE 0x3005
当录音模块线路接上时,发送该事件
#define MESSAGE_SEND_FAX_OK 0x6000
发送传真成功事件
#define MESSAGE_SEND_FAX_ERROR 0x6001
发送传真失败事件
#define MESSAGE_RECEIVE_FAX_OK 0x6002
接收传真成功事件
#define MESSAGE_RECEIVE_FAX_ERROR 0x6003
接收传真失败事件
#define MESSAGE_FAX_HAVE_REMOTE_TEL_NO 0x6004
有对方传真号码事件
#define MESSAGE_FAX_HAVE_INFORMATION 0x6005
有传真信息事件
#define MESSAGE_PLAY_SOUND_END 0x7031
声卡放音结束事件
#define MESSAGE_PLAY_SOUND_EXIT 0x7032
声卡放音退出事件
第八章 使用各种编程语言进行开发
8.1 VC 接口及编程范例
8.1.1 VC接口简介
GxUsb.LIB是GxUsb.DLL 的 C 语言输入库,由Microsoft Visual C 6.0生成。在VC环境下开发,可以直接将GxUsb.LIB加入到工程文件中。
8.1.2 C语言编程简介
在98 /2000/xp/2003下用 C 语言对USB语音盒进行编程时,一般包括三部分。
一、初始化部分,包括初始化卡、得到通道数和通道类型等等,这部分在运行时调用一次即可。
二、结束部分,包括释放语音卡、释放驱动程序,这部分在退出时调用。
三、处理部分,这部分对实时的情况进行处理,一般放在TIMER函数里,具体用法请参见示范程序。
8.1.3 C语言示范程序
在安装目录中的C语言示范程序,均为VC 6.0的环境下开发。
C语言的示范程序在vc6目录下。
有关的说明,请参考示范程序的源程序。
8.2 VB 6.0 接口及编程范例
8.2.1 VB接口简介
在 Visual Basic 6.0 中, 对动态库GxUsb.DLL的调用是通过 GxVoice.BAS 来声明的,请参见GxVoice.BAS 。
由于在本质上,VB 也是通过调用GxUsb.DLL 来实现对 USB硬件的控制。因此,在上一节中有关 VC 编程的说明,对 VB 而言是一样的。用户需要先仔细阅读上一节,在应用程序开发的过程中,也需要经常参考C语言的示范程序。
8.2.2 VB6.0对动态库的调用
在VB6.0中,需要首先对DLL中的函数进行声明,然后才能对该函数进行调用。关于如何声明DLL中的函数,请参考VB中的HELP文件“Declare statement”。
下面,通过举例来说明。当GxUsb.DLL中有新的函数未能包含在VB声明文件GxVoice.BAS中时,你可以参考该函数在C语言中的声明,自己来声明VB下的函数调用。
例如:
在GxVoice.H中的函数
unsigned short WINAPI GX_StartPlayFile(unsigned short ChannelNo,char *FileName,
unsigned long Offset,unsigned long Length,char StopChar);
在GxVoice.BAS中声明为
Declare Function GX_StartPlayFile Lib "GxVoice.dll" (ByVal ChannelNo As Integer,
ByVal FileName As String, ByVal Offset As Long, ByVal Length As Long,
ByVal StopChar As Byte) As Integer
分析:
在VC中(32位环境),BOOL为32位,WORD为16位,DWORD为32位;
因此,在VB中,相应的使用Long(32位), Integer(16位), Long(32位)
要注意的最关键一点是,所有参数和返回值的字节长度要相等。
在VB 6.0中,变量类型 Integer 仍然是16位的。其范围是-32767,32767。VC中的int, long, DWORD, BOOL 在 VB6.0 中需用 32 位的 long 表示;而VC中的WORD在 VB6.0 中需用Integer表示。
8.2.3 VB编程简介
同在98/2000/xp/2003下用C语言编程一样,VB对录音卡的操作,也包括三部分。
一、初始化部分,包括初始化卡、得到通道数和通道类型等等,在Form_Load中运行。
二、结束部分,包括释放语音卡、释放驱动程序,在Form_Unload中运行。
三、处理部分,这部分在TIMER中运行,具体用法请参见示范程序。
注意: GX_GetMessageForWindows在每次循环中需要调用,以维持文件录、放音的继续。
在VB中没有无符号整数,因此无法实现大于32768(1024*32)的缓冲区。如果带入参数大于32767,将会出错。
8.2.3 VB编程的注意事项
由于VB是解释型的编程语言,它在设计时有一些不同的出发点,因此,在使用VB调用DLL时,有一些事项应引起注意。
, 在C语言中返回值是指针的函数,在VB中不能使用
, 如果在C语言中某函数的参数为字符串,并且在函数调用完毕后,有内容通过该
参数返回,当VB使用该函数时,带入的变量必须是已经分配空间的。
这些函数有:
GX_GetRawFskCallerID
GX_GetFskCallerID
例如:
得到某一通道的主叫号码
Dim ciddt, cidtel, cidname As String
ciddt = String(200, Chr(0))
cidtel = String(200, Chr(0))
cidname = String(200, Chr(0))
mm = GX_GetFskCallerID (ChannelNo, ciddt, cidtel, cidname)
8.2.4 VB示范程序
在安装目录中的vb示范程序,均为Vb 6.0的环境下开发。
vb示范程序在vb6目录下。
该程序的功能同C语言的示范程序demo完全相同,还演示了接收主叫号码的功能。请参考VB源程序。
8.3 C++ BUILDER环境
由于GxUsb.LIB是在VC环境下生成的,该LIB无法直接用于C++ BUILDER工程文件的连接。
C++ BUILDER提供了一个从DLL中提取输入库LIB的工具软件IMPLIB.EXE,你可用该软件生成一个LIB,用于开发。而GxVoice.H则完全可以通用。IMPLIB.EXE的用法,请参考其自身的帮助。
具体方法:
cd \windows\system
implib GxUsb_BC.lib GxUsb.dll
将生成的 GxUsb_BC.lib拷贝到开发程序需要的地方,加入工程中。
8.4 Delphi接口及编程范例
8.4.1 Delphi接口简介
在Delphi 中, 对动态库GxUsb.DLL的调用是通过 GxVoice.PAS 来声明的,请参见GxVoice.PAS 。
8.4.2 Delphi对动态库的调用
同在VB6.0中一样,在Delphi中也需要首先对DLL中的函数进行声明,然后才能对该函数进行调用。关于如何声明DLL中的函数,请参考Delphi中的HELP文件“external declarations。
下面,通过举例来说明当GxUsb.DLL中有新的函数未能包含在Delphi声明文件GxVoice.PAS 中时,你可以参考该函数在C语言中的声明,自己来声明Delphi下的函数调用。
例如:
在GxVoice.H中的函数
unsigned short WINAPI GX_StartPlayFile(unsigned short ChannelNo,char *FileName,
unsigned long Offset,unsigned long Length,char StopChar);
在Delphi中:
function GX_StartPlayFile(ChannelNo:word;FileName:PCHAR;Offset:Longword;
Length:Longword;StopChar:char):word;stdcall; far external 'GxUsb.dll';
注意:声明最后要加stdcall; far external ' GxUsb.dll';
在C语言中的char *,要声明为 pchar
8.4.3 Delphi下的示范程序
该示范程序是在Delphi 5.0下的例子。
在安装目录中的Delphi 示范程序,均为Delphi 5.0的环境下开发。
该程序的功能同C语言的示范程序CALL完全相同。请参考源程序。
8.5 VFP环境
8.5.1 VFP接口简介
对于Visual FoxPro 中的使用,请参见VFP 对动态库的调用。在演示程序中未提供。
8.5.2 VFP对动态库的调用
在 Visual FoxPro 中,要调用一个 DLL 函数,可首先使用 DECLARE 命令声明 DLL 函数,然后像调用其它 Visual FoxPro 函数一样调用 DLL 函数。
在退出 Visual FoxPro 之前,所链接的 DLL 函数一直保持有效,因此,在每个工作期中只需声明一次。
在声明一个 DLL 函数时,必须指定参数的数目和类型。默认情况下,数据按照值来传递,但也可以在参数前面添加符号(@) 来强制参数按引用传递。
8.6 PB环境
8.6.1 PB6接口简介
在Power Builder中, 对动态库GxUsb.DLL的调用是通过在“Decalre”菜单中的“Global External Function”来声明的。
8.6.2 PB6对动态库的调用
下面,通过举例来说明当GxUsb.DLL中有新的函数未能包含在声明中时,你可以参考该函数在C语言中的声明,自己来声明PB6下的函数调用。
例如:
在GxVoice.H中的函数
unsigned short WINAPI GX_StartPlayFile(unsigned short ChannelNo,char *FileName,
unsigned long Offset,unsigned long Length,char StopChar);
在Power Builder 中:
Function Boolean GX_StartPlayFile(Integer ChannelNo,String FileName,Long Offset,
Long Length,char StopChar) Library "GxUsb.dll"
注意:在PB6下的参数类型与VB下相拟,请参阅”VB6.0对动态库的调用”。
8.7 C#对动态库的调用
8.7.1 C#接口简介
在.net中要注意的是以前在编程工具中,long是32位,在.net的c#中long是64位,所以在传递参数时要注意,在声明函数接口时也要注意。
8.7.2 C#对动态库的调用
例如:
在GxVoice.H中的函数
unsigned short WINAPI GX_StartPlayFile(unsigned short ChannelNo,char *FileName,
unsigned long Offset,unsigned long Length,char StopChar);
在C# 中:
[DllImport("GxUsb.dll")]
public extern static ushort GX_StartPlayFile(ushort ChannelNo,string FileName,
uint Offset, uint Length, char StopChar);
8.8 其他编程语言的调用方法
在98/2000/xp/2003的32位编程环境中,许多编程语言都可以用各种方式来调用DLL
动态库。这样,也就可以通过对动态库GxUsb.DLL的调用来控制USB的硬件。
由于各种编程语言的方法不尽相同,本说明书无法一一描述。请用户仔细阅读你所用的编程
语言的说明。