[网管呼叫] 如何添加播放语音上去,知道的朋友帮忙一下。[已解决]
本帖最后由 yingf20 于 2012-6-3 13:20 编辑服务端:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("语音", 460, 444)
$ListView1 = GUICtrlCreateListView("计算机|号数信息|播放时间|IP地址", 0, 0, 458, 414)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100);调整宽度
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 100);调整宽度
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 100);调整宽度
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 100);调整宽度
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES);设置表格边框
GUICtrlSetCursor(-1, 0);鼠标指针
GUISetState(@SW_SHOW)
TCPStartup(); 开始 TCP 服务
$ip = IniRead(@ScriptDir & '\wglm.ini', 'Config', 'ServerIP', '192.168.0.7');从配置文件中读取IP
$port = IniRead(@ScriptDir & '\wglm.ini', 'Config', 'ServerPort', '21991');从配置文件中读取端口
$tcpMainListen = TCPListen($ip, $port, 100);创建监听,用于接收数据
If $tcpMainListen = -1 Then
MsgBox(4096, '错误', '创建监听失败!')
Exit
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
$tcpSocket = TCPAccept($tcpMainListen);接收客户端连接
If $tcpSocket <> -1 Then;客户端连接成功
While 1
$TcpRecvData = TCPRecv($tcpSocket, 2048, 1);接收客户端发送的数据
If @error Then ExitLoop ;如果接收信息出现错误,则退出循环.
If $TcpRecvData <> '' Then
$TcpRecvData = GUICtrlCreateListViewItem(BinaryToString($TcpRecvData, 4), $ListView1);将信息写入到$listview1控件
ExitLoop
EndIf
WEnd
EndIf
WEnd
客户端:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("语音呼叫", 273, 249)
$Button1 = GUICtrlCreateButton("呼叫网管", 16, 24, 243, 41)
$Button2 = GUICtrlCreateButton("呼叫技术员", 16, 88, 241, 41)
$Button3 = GUICtrlCreateButton("呼叫服务员", 16, 152, 243, 41)
GUISetState(@SW_SHOW)
TCPStartup(); 开始 TCP 服务; 开始 TCP 服务
$ip = IniRead(@ScriptDir & '\wglm.ini', 'Config', 'ServerIP', @IPAddress1);从配置文件中读取IP
$port = IniRead(@ScriptDir & '\wglm.ini', 'Config', 'ServerPort', '21991');从配置文件中读取端口
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1;呼叫网管
_Callinfo('001')
Case $Button2;呼叫技术员
_Callinfo('002')
Case $Button3;呼叫服务员
_Callinfo('003')
EndSwitch
WEnd
;呼叫信息
Func _Callinfo($CallInfo)
$tcpMainSocket = TCPConnect($ip, $port);连接服务端
If $tcpMainSocket = -1 Then
MsgBox(64, '错误', '连接到服务端失败!',2)
Else
TCPSend($tcpMainSocket, StringToBinary(@ComputerName & '|' & $CallInfo & '|' & @HOUR & ":" & @MIN & ":" & @SEC & "|" & @IPAddress1, 4))
EndIf
EndFunc ;==>_Callinfo
WGLM.INI
ServerIP=127.0.0.1
Serverport=21991
我想利用客户端发送的001或002、003到服务端激活播放语音,知道怎写的朋友帮忙一下。。在此谢谢。
这个问题已经解决,想知道如何解决的朋友回复可见。
**** Hidden Message ***** 没看明白...SORRY SoundPlay(@WindowsDir & "\media\ding.wav")根据目录你指定源声音 _Callinfo('002', true)
_Callinfo($CallInfo, $Is_play_sound)
客戶端傳送 True 或 False
服務端接收後再決定使否要 SoundPlay 回复 3# ooxxgod
我加了如上代码上去,声音有了,可就是客户端发送过来的001、002、003怎根据来激活播放相关的语音呢? 回复 4# rchockxm
能否说详细点。_Callinfo($CallInfo, $Is_play_sound)怎用?在此谢谢。 你皮肤倒是挺好看的,拿出来分享下。
_Callinfo是自定义函数。。。。你要自己定义功能! 求皮肤哦 ~ 多写成这样了,怎么会还不知道怎么放声音呢
加个判断,服务端收到001放什么,002放什么 回复 10# seniors
不知道判断怎写呢。知道的朋友帮忙一下。 回复 8# scum
皮肤,是windows 主题来的,不是软件的皮肤。如果真是要的话,我可以打包给需要的朋友下载的。 WGLM的兄弟? 回复 14# lpxx
哎呀,兄弟好啊。WGLM。哈哈 ~ 低调。。。 晕。没人帮忙解决一下吗??大家知道怎样的,不要藏私好么?发表一下。 本帖最后由 lanfengc 于 2012-6-2 09:09 编辑
回复 16# yingf20
我做了个这样的UDF 你试试。 语音引擎下载地址:http://115.com/file/antmr5p7
Func SpeakText($_Num = '')
Local $loopTimes = 0
If $_Num = '' Then Return
$obj = ObjCreate("SAPI.SpVoice")
If @error Then Exit MsgBox(16, "错误", "语音库创建失败!")
For $T In $obj.GetVoices ;遍历所有的引擎
$strVoice = $T.GetDescription ;获取语音引擎的名字
If StringCompare($strVoice, "ScanSoft Mei-Ling_Full_22kHz") = 0 Then ;如果是女声引擎的名字
$obj.voice = $obj.GetVoices().Item($loopTimes) ;则使用这个引擎的ID
ExitLoop ;不在查找了
EndIf
$loopTimes += 1 ;如果不是女声引擎的名字,则ID号加1
Next
If StringCompare($obj.GetVoices().Item($loopTimes).GetDescription, "ScanSoft Mei-Ling_Full_22kHz") <> 0 Then;如果当前使用的语音引擎名称不是女声的,则提示错误
MsgBox(16, "错误", "你没有安装女声语音库!")
SetError(1)
Else
$obj.rate = -4 ;速度 -10 到 10越小越慢
$obj.volume = 100 ;音量 百分比, 100代表100%,最大
$obj.Speak($_Num) ;朗读传送过来的字符
$obj.WaitUntilDone(-1);等待直到朗读结束 为假
$obj.rate = -1;速度为-1
$obj.Speak("号机器非法使用");朗读 中文
$obj.WaitUntilDone(-1) ;等待直到朗读结束 为假
Sleep(200);等待200毫秒, 一句话说完了,等一会,要不然一句接一句的
$obj.Speak("请网管去查看");朗读中文
$obj.WaitUntilDone(-1);等待直到朗读结束 为假
$obj = 0;销毁OBJECT对象
EndIf
EndFunc ;==>SpeakText
SpeakText("005")