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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Учим компьютер разговаривать!

Ответить
Настройки темы
[решено] Учим компьютер разговаривать!

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


На иностранном форуме наткнулся на интересный скрипт, он читает вслух заданную строку текста. Вот код:

Код: Выделить весь код
$Input=inputbox("TalkObj","Insert the text to read:")
if @error=1 then exit
_TalkObj($Input)

Func _TalkOBJ($s_text)
    Local $o_speech
    $o_speech = ObjCreate("SAPI.SpVoice")
    $o_speech.Speak ($s_text)
    $o_speech = ""
EndFunc ;==>_TalkOBJ999
Вопрос: как научить комп говорить не только на английском, но и на другом языке (допустим, русском)? Гуглить пробовал. Есть какая-то прога русского голоса размером 160мб... - в общем я сначала лучше спрошу, а потом делать буду)

Отправлено: 00:50, 25-09-2009

 

Аватара для 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Тоже я тут искал на английском форуме по autoit. Примеров, которые показывают, как воспроизводить текст, есть немало, но все не то, ибо видят только установленный голос Mikrosoft Sam, при том что в системе их установлено с десяток. Поэтому можно это сделать по другому.
На сайте программы Говорилки, есть версия, которая работает с командной строки (Ссылка). Там же описано как ее использовать. С ее помощью можно воспроизводить текст, записывать текст, в аудио файл... Вобщем вот набросал пример, который можно скачать тута.
Отдельно нужно скачать голосовые движки, SpeechApi версии 4, 5. Но эти "голоса", что там, слушать практически невозможно, ибо акцент - просто тихий ужас. Я б рекомендовал использовать в качестве мужского голоса - Русский голос Digalo (он же Николай), а в качестве женского голоса - Алена. Пакеты с этими голосами можна приобрести в интернете... Там же можно скачать и словари, в которых подкоректированы произношения отдельных слов. (От себя добавлю, что голос Алена, по-моему самый лучший женский голос, до недавнего таким считался Катерина) По размеру они весят немало, больше 100Мб, ибо хороший голос в 5-10 Мб не упихнуть...
Пример оч. простенького кода, скрипт, и все необходимое для его работы - в архиве, ссылка на который выше:
читать дальше »
Код: Выделить весь код
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <SliderConstants.au3>
#include <array.au3>
;

; При первом запуске в системе пишем в ini список всех гол.движков которые установлены в сестеме
If FileExists("voices.Ini")==0 Then
    ShellExecute("Govorilka_cp.exe"," -H", @ScriptDir)
    WinWait("Govorilka_CP","")
    WinActivate("Govorilka_CP","")
    WinWaitActive("Govorilka_CP","")
    ControlClick("Govorilka_CP","","Button1")
    WinWait("Govorilka_CP. Available Voices","")
    $Voices=ControlGetText("Govorilka_CP. Available Voices","","[CLASS:Static; INSTANCE:1]")
    WinClose("Govorilka_CP. Available Voices","")
    $Voices=StringReplace(StringRegExpReplace($Voices,"(?s)(.*?)\d*: ","\1"),@CR,"|")
    IniWrite ( "voices.Ini", "Voices", "Voices", $Voices )
Else 
    $Voices=IniRead ( "voices.Ini", "Voices", "Voices", "Microsoft Sam" )
EndIf




Global Const $WM_HSCROLL = 0x0114
$Main_GUI = GUICreate("SAPI Speaker", 600, 280)
$Text_Edit = GUICtrlCreateEdit("Жили у бабуси два веселых гуся, один серый, другой белый, два веселых гуся.", 10, 10, 580, 50)

$Speak_Button = GUICtrlCreateButton("SpeakFromEdit", 10, 65, 110, 22, $BS_DEFPUSHBUTTON)
$FromClipboard_Button = GUICtrlCreateButton("SpeakFromClipboard", 125, 65, 110, 22)
$Stop_Button= GUICtrlCreateButton("Stop", 532, 65, 60, 22)


GUICtrlCreateGroup("Options", 10, 100, 580, 170)
$Rate_Slider = GUICtrlCreateSlider(20, 150, 180, 30, $TBS_TOP + $TBS_AUTOTICKS)
GUICtrlSetLimit(-1, 100, 1)
GUICtrlSetData(-1, 40)

$Volume_Slider = GUICtrlCreateSlider(210, 150, 180, 30, $TBS_TOP + $TBS_AUTOTICKS)
GUICtrlSetLimit(-1, 100, 1)
GUICtrlSetData(-1, 100)


$Pitch_Slider = GUICtrlCreateSlider(400, 150, 180, 30, $TBS_TOP + $TBS_AUTOTICKS)
GUICtrlSetLimit(-1, 100, 1)
GUICtrlSetData(-1, 50)


$Rate_Precent_Label = GUICtrlCreateLabel("Speach Speed: " & 40, 50, 125, 150, 15)
$Volume_Precent_Label = GUICtrlCreateLabel("Speach Volume: " & 100, 250, 125, 150, 15)
$Pitch_Precent_Label = GUICtrlCreateLabel("Speech Pitch: " & 50, 440, 125, 150, 15)

GUICtrlCreateLabel("Slow", 30, 185)
GUICtrlCreateLabel("Normal", 95, 185)
GUICtrlCreateLabel("Fast", 170, 185)

GUICtrlCreateLabel("Quiet", 220, 185)
GUICtrlCreateLabel("Loud", 360, 185)
GUICtrlCreateLabel("Voice:", 20, 233)

GUICtrlCreateLabel("Low", 410, 185)
GUICtrlCreateLabel("Normal", 475, 185)
GUICtrlCreateLabel("High", 550, 185)


$Voice_Combo = GUICtrlCreateCombo("Digalo Russian Nicolai", 60, 230, 170)
GUICtrlSetData($Voice_Combo, $Voices)
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Speak_Button
            $sText = ' '&GUICtrlRead($Text_Edit)
            $SAPIVoice = GUICtrlRead($Voice_Combo)
            $nRate = ' -S'&GUICtrlRead($Rate_Slider)
            $nVol =  ' -V'&GUICtrlRead($Volume_Slider)
            $nPitch = ' -P'&GUICtrlRead($Pitch_Slider)
            _Speak($sText, $SAPIVoice, $nRate, $nVol, $nPitch)
        Case $FromClipboard_Button
            $sText = " -C"
            $SAPIVoice = GUICtrlRead($Voice_Combo)
            $nRate = ' -S'&GUICtrlRead($Rate_Slider)
            $nVol = ' -V'&GUICtrlRead($Volume_Slider)
            $nPitch =' -P'&GUICtrlRead($Pitch_Slider)
            _Speak($sText, $SAPIVoice, $nRate, $nVol, $nPitch)
        Case $Stop_Button
            ShellExecute("Govorilka_cp.exe"," -STOPALL", @ScriptDir)
    EndSwitch
WEnd

Func _Speak($sText, $SAPIVoice, $iRate = 1, $iVol = 100,$nPitch=50)
    If ProcessExists("Govorilka_cp.exe") Then 
        ProcessClose("Govorilka_cp.exe")
        ProcessWaitClose("Govorilka_cp.exe")
    EndIf 
    $invisibleMode=' ' ;если не будет $invisibleMode=' -i', то в нижним правом углу при воспроизведении текста буде появляться мерцающий квадрат, и при клике на него, воспроизведение текста прекратится.
    
Switch $SAPIVoice
    Case "Digalo Russian Nicolai"
        $dictionary_file=' -D '&'"'&@ScriptDir&'\Digalo Russian Nicolai.dic'&'"'; в данном файле можно указать правильное произношение того слова, которое читается неправильно. (для каждого голоса свой словарь. См. на сайте Говорилки)
    Case "Adult Female #1 Russian (L&H)"
        $dictionary_file=' -D '&'"'&@ScriptDir&'\Adult Female _1 Russian (L_H).dic'&'"'
    Case Else
        $dictionary_file=''
EndSwitch
    
    $Param = '-E '&'"'&$SAPIVoice&'"'&$nRate&$nPitch&$nVol&$invisibleMode&$dictionary_file&$sText
ShellExecute("Govorilka_cp.exe",$Param, @ScriptDir)
EndFunc


Func WM_HSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    Switch $LParam
        Case GUICtrlGetHandle($Rate_Slider)
            Local $nVoiceRateRead = GUICtrlRead($Rate_Slider)
            GUICtrlSetData($Rate_Precent_Label, "Speach Speed: " & $nVoiceRateRead)
        Case GUICtrlGetHandle($Volume_Slider)
            Local $nVolumeRead = GUICtrlRead($Volume_Slider)
            GUICtrlSetData($Volume_Precent_Label, "Speach Volume: " & $nVolumeRead)
        Case GUICtrlGetHandle($Pitch_Slider)
            Local $nPitchRead = GUICtrlRead($Pitch_Slider)
            GUICtrlSetData($Pitch_Precent_Label, "Speach Pitch: " & $nPitchRead)
    EndSwitch
EndFunc    

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Последний раз редактировалось beve, 26-09-2009 в 11:58.

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

Отправлено: 23:27, 25-09-2009 | #3


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg пример.jpg
(26.9 Kb, 16 просмотров)

Creat0R, голоса Microsoft Sam и еще 1 китайский голос ваш скрипт воспроизводит корректно. Но когда я установил Алену (русский голос), выдается сообщение "This machine doesn't have Alyona (Russian) SAPI5 installed", причем через интерфейс, который установился вместе с Аленой, все воспроизводится нормально. В чем может быть проблема?
P.S. Сегодня скачал английские голоса - Mike, Crystal. Попробовав запустить их, получил ту же ошибку, только в окошках написано "This machine doesn't have ATT DTNV 1.4 Crystal installed".

Отправлено: 20:36, 20-10-2009 | #4


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата evg64:
Но когда я установил Алену (русский голос), выдается сообщение "This machine doesn't have Alyona (Russian) SAPI5 installed", причем через интерфейс, который установился вместе с Аленой, все воспроизводится нормально. В чем может быть проблема? »
Понадобилось и мне послушать "Аленку", точно выдает ошибку. Вот маленько поправил код Creat0R-a, теперь все ок (по крайней мере у меня):
Код: Выделить весь код
#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 = 0419
Global $fStateOfVoice=0 ;состояние голосового движка 

$Main_GUI = GUICreate("SAPI Speaker", 600, 280)
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")

$Text_Edit = GUICtrlCreateEdit("Здравствуйте дорогие друзья." & @CRLF & _
        "Этот текст читает выбранный вами диктор." & @CRLF & _
        "Если вам не нравиться мой голос," & @CRLF & _
        "то придется вам научится читать самому!", 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

GUISetState()

While 1
;$oVoice.status.runningstate может принимать следующие значения: 1-остановлен, 0- пауза, 2-воспроизведение
If $fStateOfVoice=1  And $oVoice.status.runningstate=1 Then 
    GUICtrlSetState($Speak_Button, $GUI_ENABLE)
    GUICtrlSetState($Pause_Button, $GUI_DISABLE)
    GUICtrlSetState($Stop_Button, $GUI_DISABLE)
    GUICtrlSetState($Resume_Button, $GUI_DISABLE)
    $fStateOfVoice=0
EndIf  

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)
        $fStateOfVoice=1
    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)
        $fStateOfVoice=0
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()
    Local $SAPIVoices
    
    For $SAPIVoices In $t_Voice
        If $SAPIVoices.GetDescription() = $SAPIVoice Then
            $oVoice.Voice = $SAPIVoices
            If Not @error Then $oVoice.Speak($sText, 1)
            Return
        EndIf
    Next
    Msgbox(64,"Внимание", "Вы видимо попытались вручную ввести название 'голосового движка', и поэтому ошиблись, ибо таков голос не найден в вашей системе.",6)
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
Кстати, ранее установленный голос Русского Николая, не отображался сдесь, как один из установленных "голосов". На днях скачал одну прогу где то из файлообменника, так там в архиве тож был голос Николая, но сей после установки, стал отображаться сдесь (в описанном выше скрипте, ну и работает конечно). Так что мож кому пригодится такая информация, что выходит есть всякие инсталяторы...(Данный инсталятор голоса в архиве назывался: Acapela-Elan-TTS-SpeechCube-5[1].1-RUS-Nicolai_MmE255_.msi. Кому интересно, Google в помощь.)

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Последний раз редактировалось beve, 07-11-2009 в 17:13. Причина: Немного улучшен скрипт, теперь по завершении воспроизведения текста, кнопки примут начальный вид.

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

Отправлено: 02:34, 07-11-2009 | #5


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Цитата beve:
теперь все ок (по крайней мере у меня) »
У меня тоже.

Отправлено: 09:27, 07-11-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Учим компьютер разговаривать!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [решено] автоматическое подключение wi-fi типа компьютер-компьютер spellozz Microsoft Windows 7 1 05-09-2010 19:24
Как восстановить Vista Home на ноутбуке? (Учим правила использования форума :) ) OLEGAN1961 Тест-форум 1 17-01-2010 00:38
Интернет - [решено] Можно ли создать ярлык для WiFi сети компьютер-компьютер? Twix1124 Microsoft Windows 7 4 02-11-2009 14:49
Интернет - [решено] Как создать беспроводную сеть компьютер-компьютер Seven-Vista? Twix1124 Microsoft Windows 7 4 07-10-2009 17:14
Компьютер очень долго думает при открывании Мой компьютер Solitude Microsoft Windows 2000/XP 8 08-05-2005 13:02




 
Переход