📄 d161a.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Ex13_11
{
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 录音函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -