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

来源:互联网 发布:手机进销存软件免费版 编辑:程序博客网 时间:2024/05/18 14:22

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 extern int 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 extern void DJSys_DisableCard();
 30
 31        /// <summary>
 32        /// 得到系统内中继通道总数;
 33        /// </summary>
 34        /// <returns></returns>

 35        [DllImport("Tce1_32.dll", CharSet = CharSet.Auto)]
 36        public static extern int 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 extern void 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 extern int 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 extern bool 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 extern bool 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 extern int 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 extern int 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 extern bool 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 extern bool 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 extern void 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 extern bool 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 extern bool 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 extern int 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 extern bool 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 extern bool 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 extern bool 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 extern bool 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 extern bool 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 extern int 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 extern int 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 extern bool 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 extern bool 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 extern bool 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 extern void 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 extern bool 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 extern int 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 extern void 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 extern bool 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 extern bool 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 extern void 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 extern bool DJVoc_CheckIndexPlayEnd(int trunkID);
320    }

321}