Jump to content
wakillon

TinyClipToSpeech v 1.0.0.9 Update of 2012-07-01

Recommended Posts

wakillon

TinyClipToSpeech v 1.0.0.9

Read Clipboard Text Content using Sapi Voice

20140126213814.png


Access to all commands by Tray menu.

If you doesn't have Sapi5 installed, script ask for download it.
I know there is already some Text to speech scripts,
but i wanted an easy access ( clipboard content and tray menu )
and the possibility to change voice and settings while reading.
Text can be displayed on desktop gradually as what is read.
You can also save text to mp3 without need of read it.
My preference goes to Scansoft voices, easy to found and install and with a good pronunciation qualty.

As usual, some externals files are downloaded at first execution.

Previous downloads : 199

Update of 2012-07-01

Source : TinyClipToSpeech v 1.0.0.9.au3

ExecutableTinyClipToSpeech.exe.html

(Once this html file downloaded, double click on it for start the download)

Hope you like it ! :)

Edited by wakillon
  • Like 1

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
Mikeman27294

Nice little script, well done.

Share this post


Link to post
Share on other sites
wakillon

Nice little script, well done.

Thanks, glad you like it :)


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
joseLB

Hi wakillon,

Do you know if there is portuguese from Brazil on this sapi5 or Scansoft voices of wherever?

Thanks

Jose

Share this post


Link to post
Share on other sites
wakillon

Hi wakillon,

Do you know if there is portuguese from Brazil on this sapi5 or Scansoft voices of wherever?

Thanks

Jose

Hi joseLB

Yes, there is one named "NextUp-ScanSoft Raquel Brazilian Portuguese Voice.msi"

You can find it easily ;)


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
wakillon

Updated

Added my own Sapi5 Voice installer for Xp users who don't have it installed.


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
joseLB

Hi wakilon,

#Include <WinAPIEx.au3> and #Include <APIConstants.au3> where not found on my includes file. It´s a new version of au3 that I need?

Thanks again,

Jose

Share this post


Link to post
Share on other sites
wakillon

Hi wakilon,

#Include <WinAPIEx.au3> and #Include <APIConstants.au3> where not found on my includes file. It´s a new version of au3 that I need?

Thanks again,

Jose

Hi joselB

Download the of Yashield and copy all the files in your include dir ;)


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
joseLB

Hi Wakillon

My PC is speaking in portuguese :thumbsup: Great! Thanks for sharing!

It´s win7, 64 bits...

I have some extra questions/points:

1- at start, your program tries to write in registry. Do you know why? I didn´t allow but it worked OK.

2- option "open ...panel" opens no window

3- you told "...and the possibility to change voice and settings while reading ...". I too. There are any "commands" whe can insert at text to control speech?

I found Loquendo at least in protuguese has a much better speech. Probably in other languages too, it´s more natural.

If you want, give a try live at http://www.oddcast.com/home/demos/tts/tts_example.php?sitepal

Do you believe that your program would work with Loquendo?

Thanks

Jose

Edited by joseLB

Share this post


Link to post
Share on other sites
wakillon

HI joseLB

RegWrite with EnableBalloonTips key is for enable traytip display.

It seems the reg key i use for get sapi.cpl path doesn't exists on x64, so you can replace _OpenSpeechProperties function by this one :

Func _OpenSpeechProperties ( )    
    TrayItemSetState ( $_SpeechItem, $TRAY_UNCHECKED )
    Local $_SapiCplPath = RegRead ( 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls', 'Speech' )
    If FileExists ( $_SapiCplPath ) Then
        ShellExecute ( $_SapiCplPath )
        Return
    EndIf
    If StringInStr ( @OSArch, 64 ) Then ShellExecute ( @WindowsDir & '\SysWOW64\Speech\SpeechUX\sapi.cpl' )
EndFunc ;==> _OpenSpeechProperties ( )

i have tried text to speech of oddcast.com and the Loquendo Démo TTS Interactive and you are right, voices ( french for me ) are better.

But oddcast is based on Flash and Loquendo returns wav files, so no chances to get it working with my script !

Thanks. ;)

Edited by wakillon

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
joseLB

Hi wakillon

I´m starting to use your code... it´s a great contribution, thanks

But as always, we need something else...

Do you know how I can know when it finish the talk? I mean, I don´t want to sotp waiting it to finish, but from time to time "ask" if it finished the talk?

second, what about to do an UDF with these functions?

Thanks

Jose

Share this post


Link to post
Share on other sites
wakillon

Do you know how I can know when it finish the talk? I mean, I don´t want to stop waiting it to finish, but from time to time "ask" if it finished the talk?

second, what about to do an UDF with these functions?

Hi joseLB :)

You can do like this for ask if it finished to talk.

If $ospeech.Status.RunningState = $SRSEIsSpeaking Then
    ; is talking
Else
    ; is not talking
EndIf

And If i remember well there is already several Udf for sapi voice ! ;)

  • Like 1

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites
joseLB

thanks wakillon !

Jose

Edited by joseLB

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • AndyS19
      By AndyS19
      I want to copy just the selected text in an input control and put it to the clipboard, but GuiCtrlRead() always reads all of the text in the control.
      In this test code, when I highlight a  portion of the left control's text and press ^C, I want to copy just that text to the clipboard; but when I highlight a  portion of the right control's text and press ^C, I want to copy all of its text to the clipboard.
      #include <Debug.au3> _DebugSetup(@ScriptName & "_debug.txt", False, 2, "") _DebugOut("=============== " & @MON & "/" & @MDAY & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " ====================") #include <GUIConstants.au3> #include <WinAPI.au3> #include <Array.au3> Opt("GUICloseOnESC", 1) ; ESC closes GUI? (0 = no, 1 = yes) Opt("GUIOnEventMode", 1) ; Set OnEvent mode Opt('MustDeclareVars', 1) OnAutoItExitRegister("Event_GUIClose") Opt("GUIEventOptions", 1) ;0=default, 1=just notification, 2=GuiCtrlRead tab index Opt("WinTitleMatchMode", -2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Global $hWnd_MainWin, $iID_Left, $iID_Right _Main() Func _Main() $hWnd_MainWin = GUICreate("test7", 200, 300) $iID_Left = GUICtrlCreateInput("AAA BBB CCC (get Selected text)", 10, 30, 200, 25) GUICtrlSetOnEvent($iID_Left, "handle_left_btn") $iID_Right = GUICtrlCreateInput("DDD EEE FFF (get All text)", 10, 60, 200, 25) GUICtrlSetOnEvent($iID_Right, "handle_right_btn") Local $aAccelKeys[1][2] = [["^c", $hWnd_MainWin]] GUISetAccelerators($aAccelKeys) GUISetOnEvent($GUI_EVENT_CLOSE, 'Event_GUIClose') GUISetState() ; Make everything visible While 1 Sleep(127) WEnd EndFunc ;==>_Main Func handle_CTRL_C_key() ConsoleWrite("+++: handle_CTRL_C_key() entered" & @CRLF) Local $hCtrl, $ctrlID, $control_classname, $text $control_classname = ControlGetFocus($hWnd_MainWin) $hCtrl = ControlGetHandle($hWnd_MainWin, "", $control_classname) $ctrlID = _WinAPI_GetDlgCtrlID($hCtrl) If ($ctrlID = $iID_Left) Then $text = GUICtrlRead($ctrlID) ClipPut($text) ConsoleWrite("+++: Copied selected text:" & @CRLF & "==>" & $text & "<==" & @CRLF) ElseIf ($ctrlID = $iID_Right) Then $text = GUICtrlRead($ctrlID) ClipPut($text) ConsoleWrite("+++: Copied all text:" & @CRLF & "==>" & $text & "<==" & @CRLF) EndIf EndFunc ;==>handle_CTRL_C_key Func Event_GUIClose() Exit (99) EndFunc ;==>Event_GUIClose Func handle_left_btn() ConsoleWrite("+++: handle_left_btn() entered" & @CRLF) EndFunc ;==>handle_left_btn Func handle_right_btn() ConsoleWrite("+++: handle_right_btn() entered" & @CRLF) EndFunc ;==>handle_right_btn
       
    • Fenzik
      By Fenzik
       Hello all"
      I have curious problem with com object implementation of Sapi 5.1.
      In some cases }Some Voice engines] the metods for retrieve the voice parameters fails with error :Member not exists:.
      But the Retrieved Voice object can speak the given text, so It exists and work.
      Example of this type of Engine can be this one: http://download.kobavision.be/KobaSpeech3/KobaSpeech 3 With Vocalizer Serena - English (Great Britain).exe (can work as demo)
      So my question is> Is there some way to workaround or solve this issue?
      What i tryed:
      1. Typical use of Sapi.spvoice object:
      $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"); Install a custom error handler
       
        $spvoice = ObjCreate("sapi.spvoice")
      for $voice in $spvoice.getvoices()
        msgbox(0, "Voice", $voice.getdescription())
      next
      Func MyErrFunc()
      $HexNumber = hex($oMyError.number, 8)
      Msgbox(0,"","We intercepted a COM Error !" & @CRLF &"Number is: " & $HexNumber & @CRLF &"Windescription is: " & $oMyError.windescription)
      SetError(1)
      Endfunc

      2. Implement workaround based on Nvda Screen reader sapi5 Library at https://github.com/nvaccess/nvda/blob/master/source/synthDrivers/sapi5.py
      Thys code in Pascal should work, so i tryed to reproduce it in Autoit.
      Pascal code just as example:
                   SOTokens:=SpVoice.GetVoices('','');
                   for i:=0 to SOTokens.Count-1 do
                   try
                        SOToken:=SOTokens.Item(I); s:=SOToken.GetDescription(0);
      end
      In Autoit I tryed it like this:
      $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"); Install a custom error handler
        $spvoice = ObjCreate("sapi.spvoice")
      for $i = 0 to $spvoice.getvoices.count-1
      $name = $spvoice.getvoices.item($i).getdescription
      msgbox(0,"Voice", $name)
      next
      Func MyErrFunc()
      $HexNumber = hex($oMyError.number, 8)
      Msgbox(0,"","We intercepted a COM Error !" & @CRLF &"Number is: " & $HexNumber & @CRLF &"Windescription is: " & $oMyError.windescription)
      SetError(1)
      Endfunc
      Both of this methods returning same Error ("Member not exists.").
      Thanks a lot for help.
      Znefyg
    • fenhanxue
      By fenhanxue
      i want to copy a picture file to clipboard, so that i can paste the picture through ctrl+V
      this is my code ,but it dosen't work :
      #AutoIt3Wrapper_UseX64 = n #Include <Clipboard.au3> #include <GDIPlus.au3> _GDIPlus_Startup() $hClipboard_Bitmap = _GDIPlus_BitmapCreateFromFile('C:\1.jpg') _ClipBoard_Open(0) _ClipBoard_SetDataEx($hClipboard_Bitmap,$CF_BITMAP) _ClipBoard_Close() _GDIPlus_Shutdown() can you help me
    • rudi
      By rudi
      Hello.
      I fail trying to save content from WhatsApp other then plain text to a file that way, that non-char-content will be preserved in it's correct encoding. e.g. Emojis are spoiled.
      I've tried to do so using just filewrite() as well as forcing UTF
      #include <clipboard.au3> MsgBox(0,"Ready to read clipboard","Mark some WhatsApp content with non-char elements, e.g. Emojis, copy that to your clipboard (CTRL+c), then click OK here.") $ClipContent=_ClipBoard_GetData() ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ClipContent = ' & $ClipContent & @CRLF & '>Error code: ' & @error & @CRLF & "Extended: " & @extended & @CRLF) ;### Debug Console $File="C:\temp\ClipSaveToFile.txt" $h=FileOpen($File,2+8+64) ; overwrite, create path, UTF16 FileWrite($h,$ClipContent) FileClose($h) $h=FileOpen($File,64) $NeuGelesen=FileRead($h) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $NeuGelesen = ' & $NeuGelesen & @CRLF & '>Error code: ' & @error & @CRLF & StringLen ($NeuGelesen) & @CRLF ) ;### Debug Console FileClose($h) _ClipBoard_SetData($NeuGelesen) MsgBox(0,"Done","Re-read content of TEMP file was placed to the clipboard. Now paste this into WhatsApp. (Emojis will be spoiled)") I've also tried other encodings (16, 32, 64, 512)

      Or what is a different, functional approach to save WhatsApp Content to File in a way, to be able to to get it back to post it back to WhatsApp?

      Regards, Rudi.
    • AndreyS
      By AndreyS
      Hello to you, dear developers!
      Could you please tell me if there is an easy way to determine if the information was pasted from the clipboard?
      Without any variation of the insertion via Ctrl+V, or through the context menu.
      I revised the Help and many forum topics, but found nothing suitable.
      Can there be any WinAPI system events that determine this event?
×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.