|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Учим компьютер разговаривать! |
|
[решено] Учим компьютер разговаривать!
|
Старожил Сообщения: 186 |
На иностранном форуме наткнулся на интересный скрипт, он читает вслух заданную строку текста. Вот код:
Вопрос: как научить комп говорить не только на английском, но и на другом языке (допустим, русском)? Гуглить пробовал. Есть какая-то прога русского голоса размером 160мб... - в общем я сначала лучше спрошу, а потом делать буду) |
|
Отправлено: 00:50, 25-09-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Тоже я тут искал на английском форуме по autoit. Примеров, которые показывают, как воспроизводить текст, есть немало, но все не то, ибо видят только установленный голос Mikrosoft Sam, при том что в системе их установлено с десяток. Поэтому можно это сделать по другому.
На сайте программы Говорилки, есть версия, которая работает с командной строки (Ссылка). Там же описано как ее использовать. С ее помощью можно воспроизводить текст, записывать текст, в аудио файл... Вобщем вот набросал пример, который можно скачать тута. Отдельно нужно скачать голосовые движки, SpeechApi версии 4, 5. Но эти "голоса", что там, слушать практически невозможно, ибо акцент - просто тихий ужас. Я б рекомендовал использовать в качестве мужского голоса - Русский голос Digalo (он же Николай), а в качестве женского голоса - Алена. Пакеты с этими голосами можна приобрести в интернете... Там же можно скачать и словари, в которых подкоректированы произношения отдельных слов. (От себя добавлю, что голос Алена, по-моему самый лучший женский голос, до недавнего таким считался Катерина) По размеру они весят немало, больше 100Мб, ибо хороший голос в 5-10 Мб не упихнуть... Пример оч. простенького кода, скрипт, и все необходимое для его работы - в архиве, ссылка на который выше: |
------- Последний раз редактировалось beve, 26-09-2009 в 11:58. Отправлено: 23:27, 25-09-2009 | #3 |
Старожил Сообщения: 186
|
Профиль | Отправить PM | Цитировать 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 |
Старожил Сообщения: 307
|
Профиль | Отправить 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 = 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 |
||
------- Последний раз редактировалось beve, 07-11-2009 в 17:13. Причина: Немного улучшен скрипт, теперь по завершении воспроизведения текста, кнопки примут начальный вид. Отправлено: 02:34, 07-11-2009 | #5 |
Старожил Сообщения: 186
|
Профиль | Отправить PM | Цитировать Цитата beve:
|
|
Отправлено: 09:27, 07-11-2009 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - [решено] автоматическое подключение 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 |
|