Select Case EventData.lEventType
Case BriSDKLib.BriEvent_RemoteHook And CurrentTable.Name="电话通知记录表" '通过反极信号检测到对方摘机,且当前表是电话通知记录表,避免正常外呼电话摘机后也播放语音
' MessageBox.Show("对方摘机")
Dim sp As new DotNetSpeech.SpVoice()
Dim Stream As new DotNetSpeech.SpFileStreamClass()
Stream.Open("Voice\NoticeContent.wav",DotNetSpeech.SpeechStreamFileMode.SSFMCreateForWrite , False)
For Each v As object In sp.getVoices '用for each循环找到名称包含 Lily的语音库
If v.GetDescription Like "*LiLy*" Then
sp.Voice = v
Exit For
End If
Next
sp.AudioOutputStream = Stream
' MessageBox.show( Vars("NoticeContent") )
sp.Speak( Vars("NoticeContent") ,DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
Stream.Close ()
m_tagpstnData(Vars("intChannelID" )).lPlayFileHandle = BriSDKLib.QNV_PlayFile(Vars( "intChannelID" ),BriSDKLib.QNV_PLAY_FILE_START,0,0,"Voice\NoticeContent.wav" ) '播放通知内容语音 如果没有语音,则会直接挂机,请注意!
'以下为循环检测播放句柄是否一直有效,播放完毕后就挂机
Do While BriSDKLib.QNV_PlayFile(Vars("intChannelID"),BriSDKLib.QNV_PLAY_FILE_ISPLAY,m_tagpstnData(Vars("intChannelID" )).lPlayFileHandle ,0,0) ' 播放句柄句柄一直有效
System.threading.Thread.Sleep(3000) ' 延迟3秒
Application.DoEvents
Loop
'MessageBox.show("出循环")
BriSDKLib.QNV_SetDevCtrl(Vars("intChannelID"), BriSDKLib.QNV_CTRL_DOHOOK,0) '挂机 不知道是否 不通过人工拨号出去的时候,盒子可以直接挂机,手动测试不出来。待程序写好后才知
Vars("IsNextCall")=True '把全局变量置为True ,使得 "电话通知"按钮事件知道可以进行下一个电话呼叫了
' End If '结束----如果通知内容不为空
'Next '往下移动到表中下一条通知记录
Exit Select
上面是摘机事件中的代码,但是目前程序只能正常外呼第一个电话时播放语音,第二个第三个第四个都只能打通,无法播放语音。 而且 NoticeContent.wav 第一次有语音,后面拨号时里面也确实是没有语音,不知何故!