在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C# 客户来电查询系统源码(Tc08a32.dll)

C# 客户来电查询系统源码(Tc08a32.dll)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.05M
  • 下载次数:22
  • 浏览次数:441
  • 发布时间:2018-02-22
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: C# 系统 电话录音 查询

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.Text;

using System.Runtime.InteropServices;

namespace Ex13_12
{
    public struct TC_INI_TYPE
    {
        public short wCardNo; //卡的总数
        public short wCardType; //卡的类型
        public short wConnect; //卡之间是否连通
        public short wIRQ; //中断号
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public char[] cbDir; //安装目录
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public short[] wAddress;//每块卡的地址
        public short wMajorVer; //软件主版本号 
        public short wMinorVer; //软件辅版本号
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public short[] wChType; //每个通道的类型
    }
    public struct TC_INI_TYPE_MORE
    {
    }
    [StructLayout(LayoutKind.Sequential)]
    unsafe class DJ160API
    {
        private DJ160API() { }

        public const short MAX_CHANNEL_NO = 128;
        public const short LEN_FILEPATH = 128;
        public const short MAX_CARD_NO = 32;

        #region  初始化函数;

        ///  <summary>
        ///  初始化函数,初始化设备驱动程序
        ///  返回值:
        ///  0表示成功;
        ///  -1表示打开设备驱动程序错误;
        ///  -2表示读取TC08A-V.INI文件时,发生错误;
        ///  -3表示INI文件的设置与实际硬件不一致时,发生错误
        ///  </summary>
        ///  <returns>long</returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long LoadDRV();

        ///  <summary>
        ///  关闭驱动程序
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FreeDRV();

        ///  <summary>
        ///   初始化语音卡硬件,并为每个通道分配语音缓冲区。
        ///   wusedCh可以用函数CheckValidCh来获得;
        ///   在调用本函数的时候,将为每路分配wFileBufLen大小的语音缓冲区,共计wusedCh*wFileBufLen,若申请不到,则返回-2。
        ///   buffer必须为1024的整数倍。
        ///   返回值:
        ///   0表示成功;
        ///   -1表示LoadDRV没有成功,造成本函数调用失败;
        ///   -2表示分别分配缓冲区失败;
        ///   列:EnableCard(8,1024*16)将会申请1024K的内存
        ///  </summary>
        ///  <param  name="wusedCh">工作的通道总数</param>
        ///  <param  name="wFileBufLen">驱动种为每通道分配的语音内存大小</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long EnableCard(short wusedCh, short wFileBufLen);

        ///  <summary>
        ///   关闭语音卡的硬件,释放缓冲区,程序结束(包括正常和不正常退出)时需要调用此函数
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void DisableCard();
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void GetSysInfo(ref  TC_INI_TYPE TmpIni);
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void GetSysInfoMore(ref  TC_INI_TYPE_MORE TmpMore);

        ///  <summary>
        ///  检测在当前机器内可用的通道总数。
        ///  返回值:
        ///  棕的可用通道数
        ///  </summary>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckValidCh();

        ///  <summary>
        ///  检测某个通道的类型
        ///  返回值:
        ///  CHTYPE_USER(0)表示内线;
        ///  CHTYPE_TRUNK(1)表示外线;
        ///  CHTYPE_EMPTY(2)表示悬空;
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckChType(short wChnlNo);

        ///  <summary>
        ///  检测某个通道的类型
        ///  返回值:
        ///  CHTYPE_USER(0)表示内线;
        ///  CHTYPE_TRUNK(1)表示外线;
        ///  CHTYPE_EMPTY(2)表示悬空;
        ///  CHTYPE_EMPTY(3)表示录音模块;
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short CheckChTypeNew(short wChnlNo);

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool IsSupportCallerID();

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetPackrate(short wPackRate);

        ///  <summary>
        ///  维持文件录放音的持续进行,需要在处理函数的大循环中调用。
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void PUSH_PLAY();

        ///  <summary>
        ///  设定要检测的挂机忙音的参数。
        ///  </summary>
        ///  <param  name="BusyLen">忙音的时间长度,单位为秒</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetBusyPara(short BusyLen);

        ///  <summary>
        ///  设定拨号以后要检测的信号音的参数。
        ///  比如国际中规定拨号后的回铃音为响1秒,停止为4秒,忙音为0.35秒,写为SetDialPara(100,4000,350,7)
        ///  </summary>
        ///  <param  name="RingBack">回铃音中响声的时间长度,单位为毫秒</param>
        ///  <param  name="RingBack0">回铃音中两声之间间隔的时间长度,单位为毫秒</param>
        ///  <param  name="BusyLen">对方占线时返回的忙音信号的时间长度</param>
        ///  <param  name="RingTimes">一共响多少次认为是无人接听</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void SetDialPara(short RingBack, short RingBack0, short BusyLen, short RingTimes);

        ///  <summary>
        ///  读取D161A卡的序列号,注意:该序列号必须在LoadDRV之后,EnableCard之前。
        ///
        ///  </summary>
        ///  <param  name="wCardNo">卡号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern long NewReadPass(short wCardNo);

        ///  <summary>
        ///  设定某通道的工作参数
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="cbWorkMode">选择要设定的工作模式</param>
        ///  <param  name="cbModeVal">参数值</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void D_SetWorkMode(short wChnlNo, byte cbWorkMode, byte cbModeVal);

        #endregion

        #region  振铃及摘挂机函数;

        ///  <summary>
        ///  检测(外线)是否有震铃信号或(内线)有无提机
        ///  比如:当函数返回1时,对于外线此时“提机”(OffHook)可以接通该路电话,而内线无需“提机”即可处于接通状态。
        ///  返回值:
        ///  1表示有振铃信号(外线)或话机提机(内线)
        ///  0表示无振铃信号(外线)或话机提机(内线)
        ///  
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool RingDetect(short wChnlNo);

        ///  <summary>
        ///  外线提机,对于内线,此函数不起作用。
        ///  注意:不要对内线通道调用本函数。
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void OffHook(short wChnlNo);

        ///  <summary>
        ///    外线挂机,对于内线,此函数不起作用。
        ///    注意:不要对内线调用本函数
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void HangUp(short wChnlNo);

        #endregion

        #region  放音函数;

        ///  <summary>
        ///  指定通道开始普通内存放音。当放音长度(dwPlayLen)大于系统缓冲区的长度(在函数EnableCard中定义)时,
        ///  需要函数PUSH_PLAY来维持录音的持续
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="PlayBuf">语音缓冲区地址</param>
        ///  <param  name="dwStartPos">在缓冲区中的偏移</param>
        ///  <param  name="dwPlayLen">放音的长度</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartPlay(short wChnlNo, byte[] PlayBuf, int dwStartPos, int dwPlayLen);

        ///  <summary>
        ///  指定通道停止内存放音,本函数可以停止内存普通放音、内存索引放音、内存循环放音。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopPlay(short wChnlNo);

        ///  <summary>
        ///  检查指定通道放音是否结束,本函数可以用于普通内存放音、索引内存放音、循环内存放音和文件放音。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool CheckPlayEnd(short wChnlNo);

        ///  <summary>
        ///  开始文件放音。停止该方式的放音,一定要用StopPlayFile。
        ///  检查放音是否结束,用CheckPlayEnd。
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        ///  <param  name="FileName"></param>
        ///  <param  name="StartPos"></param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartPlayFile(short wChnlNo, byte[] FileName, int StartPos);

        ///  <summary>
        ///  对指定通道停止文件放音。
        ///  对StartPlayFile开始的放音,必须用本函数来停止,这样才能关闭语音文件。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopPlayFile(short wChnlNo);

        ///  <summary>
        ///  初始化多文件放音。每开始一个新的多文件放音前调用此函数。
        ///  </summary>
        ///  <param  name="Line">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void RsetIndexPlayFile(short Line);

        ///  <summary>
        ///  增加多文件放音的放音文件。
        ///  返回值:
        ///  0代表失败,1代表成功。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="FileName">增加的语音文件名称</param>
        ///  <returns>bool</returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool AddIndexPlayFile(short wChnlNo, byte[] FileName);

        ///  <summary>
        ///  开始一个内存索引放音
        ///  返回值:0失败,1成功。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="pIndexTable">要放音的索引序号</param>
        ///  <param  name="wIndexLen">要放音的索引长度</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartPlayIndex(short wChnlNo, short[] pIndexTable, short wIndexLen);

        ///  <summary>
        ///  检查多文件放音是否结束,并维护多文件放音的连续性。当进行多文件放音时,必须用本函数以保证多文件放音的连续性。
        ///  返回值:
        ///  0未结束,1结束
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool CheckIndexPlayFile(short wChnlNo);

        ///  <summary>
        ///  停止多文件放音。  该函数停止指定通道的多文件放音,对于使用StartIndexPlayFile函数开始的多文件放音,结束时一定要调用本函数。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopIndexPlayFile(short wChnlNo);

        ///  <summary>
        ///  开始一个多文件放音。
        ///  当调用该函数成功后,必须循环调用CheckIndexPlayFile函数来检测放音是否结束没,
        ///  并维护多文件放音联系进行
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartIndexPlayFile(short wChnlNo);

        #endregion

        #region  录音函数

        ///  <summary>
        ///   开始文件录音。
        ///   停止该方式的录音一定要用StopRecordFile。
        ///   检查录音是否结束,用CheckRecordEnd函数。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="FileName">文件名</param>
        ///  <param  name="dwRecordLen">最长录音长度</param>
        ///  <returns>True:成功,False:打开文件失败</returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartRecordFile(short wChnlNo, byte[] FileName, long dwRecordLen);


        ///  <summary>
        ///  本函数是对文件录音函数StartRecordFile的补充。
        ///  当dwRecordStartPos=0时,调用函数StartRecordFile,即创建新文件录音;
        ///  当FileName不存在时,调用StartRecordFile,即创建新文件录音;
        ///  当FileName已经存在时:
        /// 若dwRecordStartPos大于文件长度时,从文件尾部开始录音;因此,如果需要从一个文件尾部继续录音,可以令dwRecordStartPos=0xFFFFFFFFL;
        /// 若dwRecordStartPos小于文件长度的时,从dwRecordStartPos处开始录音;录音长度由变量dwRecordLen来确定。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="FileName">文件名</param>
        ///  <param  name="dwRecordLen">最长录音长度</param>
        ///  <param  name="dwRecordStartPos">录音的开始位置</param>
        ///  <returns>True:成功,False:打开文件失败</returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool StartRecordFileNew(short wChnlNo, byte[] FileName, Int64 dwRecordLen, Int64 dwRecordStartPos);

        ///  <summary>
        ///  检查指定通道录音是否结束(缓冲区已满)
        ///  返回值:
        ///  0表示未结束,1代表结束
        ///  </summary>
        ///  <param  name="ChannelNo">通道号</param>
        ///  <returns>Int</returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern int CheckRecordEnd(int ChannelNo);

        ///  <summary>
        ///  该函数停止指定通道的文件录音,对于StartRecordFile函数启动的录音,一定要用本函数来停止,才能保证关闭语音文件。
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StopRecordFile(short wChnlNo);

        #endregion

        #region  收码、拔号、信号音检测函数

        ///  <summary>
        ///  清空系统的DTMF缓冲区,如果缓冲区中有DTMF的按键值,将会丢失。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void InitDtmfBuf(short wChnlNo);

        ///  <summary>
        ///  取该通道收到的DTMF编码,如果在缓冲区中有DTMF按键,调用本函数将返回最早一个DTMF按键,同时将该按键从缓冲区中移去,
        ///  如果没有收到任何DTMF键,本函数返回-1.
        ///  返回值:
        ///  1~9代表1~9键,
        ///  10代表0键,
        ///  11代表*键,
        ///  12代表#键,
        ///  13代表A键,
        ///  14代表B键,
        ///  15代表C键,
        ///  0代表D键。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short GetDtmfCode(short wChnlNo);

        ///  <summary>
        ///  查看指定通道是否有DTMF按键。当收到一个有效的DTMF按键后,本函数返回TRUE.本函数并不能将按键从内部缓冲区中移动去。
        ///  如想移去该按键,需要调用GetDtmfCode。
        ///  返回值:
        ///  FALSE(0)代表缓冲区内没有DTMF按键,
        ///  TRUE(1)代表有DTMF按键。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern bool DtmfHit(short wChnlNo);

        ///  <summary>
        ///  某路开始新的信号检测。一般在摘机或者挂机后,调用本函数来开始新的信号检测。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartSigCheck(short wChnlNo);

        /// <summary>
        /// 拨打电话号码。开始某通道的呼出过程。该函数只是设置通道的呼出缓冲区,真正的呼出过程需循环调用Sig_CheckDial函数来逐步完成。
        ///  返回值: 1 成功
        ///      0 失败
        /// </summary>
        /// <param name="wChNo">通道号</param>
        /// <param name="DialNum">呼出号码</param>
        /// <param name="PreDialNum">前导号码</param>
        /// <param name="wMode">呼出检测的模式选择</param>
        /// <returns></returns>
        [DllImport("NewSig.dll", CharSet = CharSet.Auto)]
        //public static extern int Sig_StartDial(short wChNo, char* DialNum, char* PreDialNum, short wMode);
        public static extern int Sig_StartDial(short wChNo, [MarshalAs(UnmanagedType.LPArray)] byte[] DialNum, [MarshalAs(UnmanagedType.LPArray)] byte[] PreDialNum, short wMode);
        /// <summary>
        /// 在调用函数Sig_StartDial启动拨号过程后,就可以循环调用Sig_CheckDial函数维持拨号过程,并检测呼出的结果,直至得到结果为止。
        /// 拨号的一般过程为:
        ///1.如参数PreDialNum不为空,则延迟1秒后拨出PreDialNum,如PreDialNum为空,则直接进入步骤3。
        ///2.检测PreDialNum是否已发完。如已发完转至步骤3。
        ///3.检测是否有拨号音,如拨号音长度达到配置项DialToneAfterOffHook的数值,则发送DialNum码串,
        /// 并转至步骤4。如在此步骤已等待配置项NoDialToneAfterOffHook定义的时间长度仍未检测到拨号音,则返回S_NODIALTONE。
        ///4.检测DialNum串是否发完,如已发完则延迟StartDelay配置项的时间长度后进入步骤5。
        ///5.如从进入此步骤起已经过配置项RingLen定义的时间长度,拨号音仍未停止则返回S_NOSIGNAL;
        /// 如在此步骤已等待配置项NoRingLen定义的时间长度仍未检测到回铃音则返回S_NOSIGNAL;
        /// 如检测到占线忙音数达到配置项BusySigCount定义的数字,则返回S_BUSY;如检测到对方摘机,则返回S_CONNECT;
        /// 如进入此步骤已经过配置项Ringback_NoAnswerTime定义的时间长度,并且已检测到回铃音,则返回S_NOBODY;其它情况返回S_NORESULT。
        ///需注意的是,在进行呼出结果检测之前必须调用函数StartSigCheck启动信号音采集过程,
        /// 并且在进行呼出结果检测时,要循环调用FeedSigFunc函数维持信号音采集过程。
        /// 返回值:16(0x10)  尚未得出结果
        ///         15(0x0F)  没有拨号音
        ///         33(0x21) 检测到对方占线的忙音
        ///         20(0x14) 对方摘机,可以进行通话
        ///         19(0x13) 振铃若干次,无人接听电话
        ///         21(0x15) 没有信号音
        /// </summary>
        /// <param name="wChNo">通道号</param>
        /// <returns></returns>
        [DllImport("NewSig.dll", CharSet = CharSet.Auto)]
        public static extern int Sig_CheckDial(short wChNo);

        #endregion

        #region  内线振铃控制及挂机检测

        ///  <summary>
        ///  对某以路内线通道馈电,同时停止馈铃流。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FeedPower(short wChnlNo);

        ///  <summary>
        ///  对某一路内线通道馈连续的铃流。调用本函数后,本通道所连接的电话机将会不停的振铃,
        ///  直到调用函数FeedPower才会停止
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FeedRing(short wChnlNo);

        ///  <summary>
        ///  维持断续振铃信号及信号音的函数;在程序大循环中调用
        ///  </summary>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FeedSigFunc();

        ///  <summary>
        ///  对某一路内线通道馈断续的铃流。断续的时间长度为响铃0.75秒,停止3秒。若要停止断续的铃流需要使用
        ///  函数FeedPower。在本通道正在振铃的情况下,检测摘机必须用函数OffHookDetect,而不能使用RingDetect
        ///  注意:
        /// 一定要不断的调用FeedSigFunc,才能保证产生断续的铃流
        ///  </summary>
        ///  <param  name="wChnlNo"></param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void FeedRealRing(short wChnlNo);

        ///  <summary>
        ///  检测某一路内线通道的摘机状态,当调用FeedRealRing函数开始一个断续的铃流后
        ///  请使用本函数来检测摘机状态
        ///  </summary>
        ///  <param  name="wChnlNo">通道好</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void OffHookDetect(short wChnlNo);

        ///  <summary>
        ///  某一通道开始挂机检测;当通道摘机后,可以调用本函数。
        ///  该函数对内线通道有效。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void StartHangUpDetect(short wChnlNo);

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short HangUpDetect(short wChnlNo);


        #endregion

        #region  收主叫号码有关的函数

        ///  <summary>
        ///  初始化某路的Caller-ID缓冲区。
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern void ResetCallerIDBuffer(short wChnlNo);

        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short GetCallerIDRawStr(short wChnlNo, byte[] IDRawStr);
        ///  <summary>
        ///  获得Caller-Id的内容
        ///  当返回3或4时,CallerIdStr内存有接收到的CallerID
        ///  注意:由于FSK是在第一声振铃后发送的(有些地方甚至是第二三声后发送的)因此不能以检测到振铃就摘机
        ///  在检测到有振铃的时候,必须首先调用ResetCallerIDBuffer,当本函数返回3或者4的时候才能摘机(OffHook)
        ///  </summary>
        ///  <param  name="wChnlNo">通道号</param>
        ///  <param  name="IDStr">接收到的主叫号码信息</param>
        ///  <returns></returns>
        [DllImport("Tc08a32.dll", CharSet = CharSet.Auto)]
        public static extern short GetCallerIDStr(short wChnlNo, byte[] IDStr);
        //public static extern short GetCallerIDStr(short wChnlNo, char[] IDStr);

        #endregion

        #region  新增信号音函数

        /// <summary>
        /// 完成信号音检测的初始化工作。
        /// 该函数将从Windows目录下的NewSig.ini文件中读取信号音检测的配置信息,
        /// 根据配置参数的情况对硬件进行必要的设置,
        /// 即调整由用户自行设置的2个信号音的频率,
        /// 可能只用到其中1个,也可能2个都用到。
        /// 函数返回:1成功 0失败
        /// </summary>
        /// <param name="Times"></param>
        [DllImport("NewSig.dll", CharSet = CharSet.Auto)]
        public static extern void Sig_Init(int Times);

        ///  <summary>
        ///  对某通道进行挂机忙音检测。
        ///  返回值:1检测到忙音,0没有检测到
        ///  </summary>
        ///  <param  name="wChlNo">通道号</param>
        ///  <returns>Int</returns>
        [DllImport("NewSig.dll", CharSet = CharSet.Auto)]
        public static extern int Sig_CheckBusy(short wChlNo);

        /// <summary>
        /// 清空忙音检测的缓冲区以及内部计数。当检测对方挂机的忙音后,必须调用本函数。
        /// </summary>
        /// <param name="wChlNo"></param>
        [DllImport("NewSig.DLL", CharSet = CharSet.Auto)]
        public static extern void Sig_ResetCheck(short wChlNo);
        #endregion

        #region  声音格式转换函数

        ///  <summary>
        /// 把  A-Law  PCM  文件转换为线性PCM,8000Hz,16bit,单声道Wave文件。
        ///  如果有与WaveFileName相同名称的文件,将会被替换。
        ///  返回值:
        /// 1,成功;
        /// -1,打开源文件错误;
        /// -2,打开目标文件错误;
        ///  </summary>
        ///  <param  name="PcmFileName">要被转换的A-Law  PCM文件</param>
        ///  <param  name="WaveFileName">转换后的文件名称</param>
        ///  <returns></returns>
        [DllImport("DJCVT.dll", CharSet = CharSet.Auto)]
        public static extern int PcmtoWave(byte[] PcmFileName, byte[] WaveFileName);

        ///  <summary>
        ///  把  A-Law  PCM  文件转换为  wave  文件,wave的格式为:
        /// WaveFormat=0,为线性PCM,8000Hz,16bit,单声道Wave
        /// WaveFormat=1,为A-Law  PCM,8000Hz,8bit,单声道Wave    
        /// WaveFormat=2,为线性PCM,8000Hz,8bit,单声道Wave
        ///  返回值:
        /// 1,成功;
        /// -1,打开源文件错误;
        /// -2,打开目标文件错误;
        /// -3,无效的WaveFormat;    
        ///  </summary>
        ///  <param  name="PcmFileName">要被转换的A-Law  PCM文件</param>
        ///  <param  name="WaveFileName">转换后的文件名称</param>
        ///  <param  name="WaveFormat">Wave文件格式</param>
        ///  <returns></returns>
        [DllImport("DJCVT.dll", CharSet = CharSet.Auto)]
        public static extern int PcmtoWaveNew(byte[] PcmFileName, byte[] WaveFileName, int WaveFormat);


        ///  <summary>
        ///  把  wave  文件转换为  A-Law  PCM  文件。
        ///  如果有与PcmFileName相同名称的文件,将会被替换。
        ///  返回值:
        /// 1,成功
        /// -1,打开源文件失败
        /// -2,打开目标文件失败
        ///  </summary>
        ///  <param  name="WaveFileName">要被转换的Wave文件</param>
        ///  <param  name="PcmFileName">转换后的文件名称</param>
        ///  <returns></returns>
        [DllImport("DJCVT.dll", CharSet = CharSet.Auto)]
        public static extern int WavetoPcm(byte[] WaveFileName, byte[] PcmFileName);


        #endregion

    }
}

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警