Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:55, 25-09-2009 | #2