C#实现IVR(基于东进的语音卡)-3

来源:互联网 发布:下象棋的软件 编辑:程序博客网 时间:2024/05/04 18:42
1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.Runtime.InteropServices;
  5
  6namespace DJVoiceCard.Lib
  7{
  8   public class DJFunction
  9   {
10       /**////<summary>
11       /// 初始化东进七号信令中继语音卡的硬件
12       /// </summary>
13       /// <param name="sIncFileName">INI系统配置文件名</param>
14       /// <param name="sVoiceIncFileName">提示音对照表文件名,一般使用PROMPT.INI</param>
15       /// <returns>0,成功;其他:-12,在读取INI文件时错误;
16       /// -17,打开驱动程序的设备文件时错误[驱动程序名为:DJPCI-东进七号信令中继语音卡,NT;DJPCI2K 东进七号信令中继语音卡,2000];
17       /// -18,检查硬件失败;
18       /// -19,读取提示音文件时失败;
19       /// </returns>

20        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
21       public static externint DJSys_EnableCard(StringBuilder sIncFileName, StringBuilder sVoiceIncFileName);
22
23       /**////<summary>
24       /// 结束所有中继语音卡的操作, 释放API所占用的资源, 复位中继语音卡的状态, 应该在程序结束前调用。
25       /// 由于同DJSys_EnableCard类似的原因,当调用本函数之后,你就不能再调用其他的有关数字中继卡的函数。
26       /// 只有DJSys_EnableCard函数成功后,才能调用本函数,并且要求成对出现。
27       /// </summary>

28        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
29       public static externvoid DJSys_DisableCard();
30
31       /**////<summary>
32       /// 得到系统内中继通道总数;
33       /// </summary>
34       /// <returns></returns>

35        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
36       public static externint DJTrk_GetTotalTrunkNum();
37
38
39       /**////<summary>
40       /// 维持文件录音和文件放音连续的函数。
41       /// 要求应用程序必须在小于4秒钟内调用本函数一次(允许多次)。
42       /// 在数字中继卡的底层驱动程序中,对每个语音通道开辟了64K的缓冲区。
43       /// 当进行文件方式的录音或放音时,不断的调用函数DJSys_PushPlay可以保证缓冲区的更新。
44       /// </summary>

45        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
46       public static externvoid DJSys_PushPlay();
47
48       /**////<summary>
49       /// 获得PCM中继ID
50       /// </summary>
51       /// <param name="trunkID">中继通道号;</param>
52       /// <returns></returns>

53        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
54       public static externint DJTrk_GetPcmID(int trunkID);
55
56
57       /**////<summary>
58       /// 根据中继通道号,来断开本中继通道与用户通道之间的双向连通,对应DJExg_SetLinkTrunkAndUser
59       /// </summary>
60       /// <param name="trunkID"></param>
61       /// <returns></returns>

62        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
63       public static externbool DJExg_ClearLinkTrunkAndUserByTrunk(int trunkID);
64
65       /**////<summary>
66       /// 使能发送DTMF的功能。
67       /// </summary>
68       /// <returns></returns>

69        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
70       public static externbool DJSys_EnableDtmfSend();
71
72       /**////<summary>
73       /// 取用户通道总数。如果是一片D161A/D081A卡,本函数返回16/8,依次类推。
74       /// 函数返回:● 系统内的用户通道数
75       /// </summary>
76       /// <returns> 系统内的用户通道数</returns>

77        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
78       public static externint DJUser_GetTotalUserNum();
79
80       /**////<summary>
81       /// 搜索一个空闲的语音通道
82       /// </summary>
83       /// <param name="trunkID"></param>
84       /// <param name="IsForTrunk"></param>
85       /// <returns></returns>

86        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
87       public static externint DJVoc_SFVC_ForPlay_New(int trunkID,bool IsForTrunk);
88
89       /**////<summary>
90       /// 播放语音文件
91       /// </summary>
92       /// <param name="voiceID"></param>
93       /// <param name="voiceName"></param>
94       /// <returns></returns>

95        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
96       public static externbool DJVoc_PlayPromptFile(int voiceID,byte[] voiceName);
97
98       /**////<summary>
99       /// 建立放音语音通道到中继通道的连通。本函数在本质上是一个中继通道去听语音通道。
100       /// 当中继通道处于准备好状态,语音通道已经开始操作(直接或间接调用过DJVoc_VoiceStart 函数),
101       /// 则可通过此函数将语音通道中的语音放给中继通道上的电话用户听。
102       /// </summary>
103       /// <param name="trunkID"></param>
104       /// <param name="voiceID"></param>
105       /// <returns></returns>

106        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
107       public static externbool DJExg_SetLinkPlayVoiceToTrunk(int trunkID,int voiceID);
108
109       /**////<summary>
110       ///  对用户模块馈电,这是系统的初始状态,当userID越界时,调用DJSYS_GetErrCode得到_ERR_InvalidID。
111       /// 只有在直流电源正常工作状态下,用户通道才能正常操作,系统启动后缺省为开电源。
112       /// 如果你正常的接入电源,则调用完本函数后,与该userID相连的电话机将会处于有馈电的状态,拿起话机听筒,在电话机上按键,会听到按键的声音。
113       /// 当该用户通道插入的是中继模块,用来接入模拟电话线时,调用本函数,相当于电话机摘机。
114       /// 由于这是系统的缺省状态,所以,如果是中继模块,在初始化时,需要将所有的中继模块挂机,这可以通过调用函数DJUser_SetPowerOFF来完成。
115       /// </summary>
116       /// <param name="userID">用户通道号</param>

117        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
118       public static externvoid DJUser_SetPowerON(int userID);
119
120       /**////<summary>
121       /// 允许用户通道在摘机时自动送拨号音,这是系统的缺省工作方式。当userID越界时,返回 0,同时置ErrCode=_ERR_InvalidID.
122       /// 当处于使能方式时,用户通道所连接的电话机摘机后,系统自动送拨号音,如果按下电话机上的按键,会自动停止拨号音;
123       /// 电话机挂机,也自动停止拨号音。
124       /// </summary>
125       /// <param name="userID"></param>
126       /// <returns></returns>

127        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
128       public static externbool DJUser_EnableDialSound(int userID);
129       /**////<summary>
130       ///  对给定的语音通道循环播放系统提示音
131       /// 函数返回:1● 操作成功;0 ● 操作失败,调用DJSys_GetErrCode函数将返回失败原因;
132       /// </summary>
133       /// <param name="voiceID">语音通道号</param>
134       /// <param name="voiceName">系统提示音名字</param>
135       /// <returns></returns>

136        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
137       public static externbool DJVoc_LoopPlayPromptFile(int voiceID, StringBuilder voiceName);
138
139       /**////<summary>
140       /// 搜索返回一个空闲的用于放音的语音通道
141       /// </summary>
142       /// <returns></returns>

143        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
144       public static externint DJVoc_SearchFreeVoiceChannelForPlay();
145
146       /**////<summary>
147       /// 检查是否正在对用户模块振铃。当userID越界时,返回 0,同时置ErrCode=_ERR_InvalidID
148       /// 函数返回:
149       /// 1● 正在振铃
150       /// 0● 非振铃
151       /// </summary>
152       /// <param name="userID"> 用户通道号</param>
153       /// <returns></returns>

154        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
155       public static externbool DJUser_RingDetect(int userID);
156
157       /**////<summary>
158       /// 使用户通道开始振铃。当userID越界时,返回 0,同时置ErrCode=_ERR_InvalidID。
159       /// 调用本函数,将会对用户模块所连接的电话机振铃,该振铃是断续的振铃声,由底层驱动程序来控制振铃的时间间隔.
160       /// 函数返回
161       /// 1● 操作成功
162       /// 0● 操作失败,调用DJSys_GetErrCode()将返回失败原因
163       ///  如果要使电话机振铃,必须正确的接入外接电源和铃流源。
164       /// </summary>
165       /// <param name="userID"> 用户通道号</param>
166       /// <returns></returns>

167        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
168       public static externbool DJUser_StartRing(int userID);
169
170       /**////<summary>
171       /// 停止用户模块的振铃。当userID越界时,返回 0,同时置ErrCode=_ERR_InvalidID。
172       /// 函数返回:
173       /// 1● 操作成功
174       /// 0● 操作失败,调用DJSys_GetErrCode()将返回失败原因
175       /// </summary>
176       /// <param name="userID">用户通道号</param>
177       /// <returns></returns>

178        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
179       public static externbool DJUser_StopRing(int userID);
180
181       /**////<summary>
182       /// 断开放音语音通道和用户通道之间的联接
183       /// </summary>
184       /// <param name="userID"></param>
185       /// <returns></returns>

186        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
187       public static externbool DJExg_ClearLinkPlayVoiceFromUser(int userID);
188
189       /**////<summary>
190       /// 复位用户DTMF拨号信息,拨号位数置 0,DTMF缓冲区清空。当userID越界时,返回 0,同时置ErrCode=_ERR_InvalidID。
191       /// 参考函数DJUser_GetDialCode的功能描述。
192       /// 函数返回:
193       /// 1● 操作成功
194       /// 0● 操作失败,调用DJSys_GetErrCode()将返回失败原因
195       /// </summary>
196       /// <param name="userID">用户通道号</param>
197       /// <returns></returns>
198       ///

199        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
200       public static externbool DJUser_InitDialBuf(int userID);
201
202
203       /**////<summary>
204       /// 得用LINK方式联接在本通道上的用户通道号。
205       /// </summary>
206       /// <param name="trunkID"></param>
207       /// <returns></returns>

208        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
209       public static externint DJTrk_GetConnectUserID(int trunkID);
210
211       /**////<summary>
212       ///  取得给本通道放音的语音通道号,如果没有放音通道与本中继通道相连,返回-1
213       /// </summary>
214       /// <param name="trunkID"></param>
215       /// <returns></returns>

216        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
217       public static externint DJTrk_GetTrunkPlayID(int trunkID);
218
219
220       /**////<summary>
221       ///  断开中继通道和放音语音通道的连通。
222       /// </summary>
223       /// <param name="trunkID"></param>
224       /// <returns></returns>

225        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
226       public static externbool DJExg_ClearLinkPlayVoiceFromTrunk(int trunkID);
227
228       /**////<summary>
229       ///  清空系统的DTMF缓冲区,如果在缓冲区中有DTMF按键的值,将会丢失
230       /// </summary>
231       /// <param name="trunkID"></param>
232       /// <returns></returns>

233        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
234       public static externbool DJTrk_InitDtmfBuf(int trunkID);
235
236       /**////<summary>
237       /// 检查该语音通道的语音操作是否结束,即录放音是否到达指定的大小。
238       /// </summary>
239       /// <param name="voiceChannelID"></param>
240       /// <returns></returns>

241        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
242       public static externbool DJVoc_CheckVoiceEnd(int voiceChannelID);
243
244       /**////<summary>
245       /// 停止文件放音。多次调用本函数没有影响
246       /// </summary>
247       /// <param name="trunkID"></param>

248        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
249       public static externvoid DJVoc_StopPlayFile(int trunkID);
250
251       /**////<summary>
252       /// 得到当前软件开发系统的安装目录。该目录等于INI配置文件中的InstallDir的设置。
253       /// </summary>
254       /// <returns></returns>

255       //[DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
256       //public static extern byte[]  DJSys_GetInstallDir();
257       /**////<summary>
258       /// 得到当前软件开发系统的安装目录。该目录等于INI配置文件中的InstallDir的设置。
259       /// </summary>
260       /// <returns></returns>

261        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
262       public static extern StringBuilder DJSys_GetInstallDir();
263
264       /**////<summary>
265       /// 放音
266       /// </summary>
267       /// <param name="trunkID"></param>
268       /// <param name="FileName"></param>
269       /// <returns></returns>

270        [DllImport("Tce1_32.dll", CharSet = CharSet.Ansi)]
271       public static externbool DJVoc_PlayFile(int trunkID,byte[] FileName);
272       /**////<summary>
273       /// 开始放音
274       /// </summary>
275       /// <param name="voiceChannelID"></param>
276       /// <returns></returns>

277        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
278       public static externint DJVoc_VoiceStart(int voiceChannelID);
279       /**////<summary>
280       /// 初始化中继通道索引放音
281       /// </summary>
282       /// <param name="trunkID">中继通道</param>

283        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
284       public static externvoid DJVoc_InitIndexPlayFile(int trunkID);
285
286       /**////<summary>
287       /// 增加索引放音文件。失败的可能原因有文件不存在,或者文件索引数组已满(最多100个)。
288       /// </summary>
289       /// <param name="trunkID">中继通道</param>
290       /// <param name="FileName">文件路径</param>
291       /// <returns></returns>

292        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
293       public static externbool DJVoc_AddIndexPlayFile(int trunkID,byte[] FileName);
294
295
296       /**////<summary>
297       /// 开始一次文件索引放音。
298       /// </summary>
299       /// <param name="trunkID">中继通道</param>
300       /// <returns></returns>

301        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
302       public static externbool DJVoc_StartIndexPlayFile(int trunkID);
303
304
305       /**////<summary>
306       ///  停止索引文件放音。该函数停止指定中继通道的索引文件放音,使用DJVoc_StartIndexPlayFile函数进行多文件放音结束,一定要调用该函数来停止放音
307       ///
308       /// </summary>
309       /// <param name="trinkID"></param>

310        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
311       public static externvoid DJVoc_StopIndexPlayFile(int trinkID);
312
313       /**////<summary>
314       /// 检查索引文件放音是否结束,并维护索引文件放音的持续。当进行索引文件放音时,必须调用该函数,以保证索引文件放音的连续性
315       /// </summary>
316       /// <param name="trunkID"></param>
317       /// <returns></returns>

318        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
319       public static externbool DJVoc_CheckIndexPlayEnd(int trunkID);
320    }

321}