您的位置:首页 > 编程语言 > C#

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

2011-11-24 09:54 393 查看
1

using System;

2

using System.Collections.Generic;

3

using System.Text;

4

using System.Runtime.InteropServices;

5


6

namespace 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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: