Старожил
Сообщения: 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 в помощь.)
|