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

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

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