⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d161a.cs

📁 vs2005串口编程示例,好多例子,是学习串口编程方面不错的资料
💻 CS
📖 第 1 页 / 共 2 页
字号:

        ///  <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);

        #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

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -