Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Цитата evg64:
как научить комп говорить не только на английском, но и на другом языке (допустим, русском)? »
|
В системе должен быть установлен русский голосовой движёк.
На оф. форуме также есть пример с выбором языка, найти не удалось, но вот немного подправленная версия с моего архива:
Код: 
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <SliderConstants.au3>
;
Global $oVoice = ObjCreate("SAPI.SpVoice")
Global $oError = ObjEvent("AutoIt.Error", "ErrFunc")
Global Const $WM_HSCROLL = 0x0114
Global Const $VOICE_LANG = 0409
$Main_GUI = GUICreate("SAPI Speaker", 600, 280)
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
$Text_Edit = GUICtrlCreateEdit("AutoIt v3 is a freeware BASIC-like scripting language designed for automating the" & @CRLF & _
"Windows GUI. It uses a combination of simulated keystrokes, mouse movement and" & @CRLF & _
"window/control manipulation in order to automate tasks in a way not possible or reliable" & @CRLF & _
"with other languages (e.g. VBScript and SendKeys).", 10, 10, 580, 50)
$Speak_Button = GUICtrlCreateButton("Speak", 10, 65, 60, 22, $BS_DEFPUSHBUTTON)
$Pause_Button = GUICtrlCreateButton("Pause", 90, 65, 60, 22)
GUICtrlSetState(-1, $GUI_DISABLE)
$Resume_Button = GUICtrlCreateButton("Resume", 170, 65, 60, 22)
GUICtrlSetState(-1, $GUI_DISABLE)
$Stop_Button = GUICtrlCreateButton("Stop", 250, 65, 60, 22)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup("Options", 10, 100, 580, 170)
$Rate_Slider = GUICtrlCreateSlider(20, 150, 280, 30, $TBS_TOP + $TBS_AUTOTICKS)
GUICtrlSetLimit(-1, 50, -50)
GUICtrlSetData(-1, 0)
$Volume_Slider = GUICtrlCreateSlider(300, 150, 280, 30, $TBS_TOP + $TBS_AUTOTICKS)
GUICtrlSetLimit(-1, 100, 1)
GUICtrlSetData(-1, 100)
$Rate_Precent_Label = GUICtrlCreateLabel("Speach Speed: " & 0, 120, 125, 150, 15)
$Volume_Precent_Label = GUICtrlCreateLabel("Speach Volume: " & 100, 400, 125, 150, 15)
GUICtrlCreateLabel("Slow", 20, 185)
GUICtrlCreateLabel("Normal", 140, 185)
GUICtrlCreateLabel("Fast", 270, 185)
GUICtrlCreateLabel("Quiet", 310, 185)
GUICtrlCreateLabel("Loud", 550, 185)
GUICtrlCreateLabel("Voice:", 20, 233)
$Voice_Combo = GUICtrlCreateCombo("Microsoft Sam", 60, 230, 100)
$SOTokens = $oVoice.GetVoices('', 'Language=' & $VOICE_LANG)
For $Token In $SOTokens
GUICtrlSetData($Voice_Combo, $Token.GetDescription, $Token.GetDescription)
Next
;~ GUICtrlSetData($Voice_Combo, "Microsoft Mike|Microsoft Mary|LH Michael|LH Michelle")
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Speak_Button
$sText = GUICtrlRead($Text_Edit)
$SAPIVoice = GUICtrlRead($Voice_Combo)
$nRate = GUICtrlRead($Rate_Slider) / 10
$nVol = GUICtrlRead($Volume_Slider)
_Speak($sText, $SAPIVoice, $nRate, $nVol)
If @error Then ContinueLoop
GUICtrlSetState($Speak_Button, $GUI_DISABLE)
GUICtrlSetState($Pause_Button, $GUI_ENABLE)
GUICtrlSetState($Stop_Button, $GUI_ENABLE)
Case $Pause_Button
$oVoice.Pause
GUICtrlSetState($Speak_Button, $GUI_DISABLE)
GUICtrlSetState($Pause_Button, $GUI_DISABLE)
GUICtrlSetState($Resume_Button, $GUI_ENABLE)
Case $Resume_Button
$oVoice.Resume
GUICtrlSetState($Pause_Button, $GUI_ENABLE)
GUICtrlSetState($Resume_Button, $GUI_DISABLE)
Case $Stop_Button
$oVoice = ObjCreate("SAPI.SpVoice")
GUICtrlSetState($Speak_Button, $GUI_ENABLE)
GUICtrlSetState($Pause_Button, $GUI_DISABLE)
GUICtrlSetState($Stop_Button, $GUI_DISABLE)
GUICtrlSetState($Resume_Button, $GUI_DISABLE)
EndSwitch
WEnd
Func _Speak($sText, $SAPIVoice, $iRate = 1, $iVol = 100)
$oVoice = ObjCreate("SAPI.SpVoice")
$oVoice.Rate = $iRate
If @error Then Return
$oVoice.Volume = $iVol
If @error Then Return
Local $t_Voice = $oVoice.GetVoices("Name=" & $SAPIVoice, "Language=" & $VOICE_LANG).Item(0)
If @error Then Return
$oVoice.Voice = $t_Voice
If Not @error Then $oVoice.Speak($sText, 1)
EndFunc
Func WM_HSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
Switch $LParam
Case GUICtrlGetHandle($Rate_Slider)
Local $nVoiceRateRead = GUICtrlRead($Rate_Slider)
$oVoice.Rate = $nVoiceRateRead / 10
GUICtrlSetData($Rate_Precent_Label, "Speach Speed: " & $nVoiceRateRead)
Case GUICtrlGetHandle($Volume_Slider)
Local $nVolumeRead = GUICtrlRead($Volume_Slider)
$oVoice.Volume = $nVolumeRead
GUICtrlSetData($Volume_Precent_Label, "Speach Volume: " & $nVolumeRead)
EndSwitch
EndFunc
Func ErrFunc()
If Hex($oError.Number,8) = 80020009 Then
MsgBox(48, "Error", "This machine doesn't have " & GUICtrlRead($Voice_Combo) & " installed")
Return SetError(1)
EndIf
Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.number is: " & @TAB & Hex($oError.number,8) & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext)
Local $iErr = $oError.number
If $iErr = 0 Then $iErr = -1
SetError($iErr)
EndFunc
|