Тоже я тут искал на английском форуме по 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
|