Google Text to Speech with AutoIt
Thought I'd share my simple example of using Google's Text to Speech API with AutoIt.
The stupid-simple app will let you preview
the text-to-speech conversion and save an mp3.
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <inet.au3> #include <sound.au3> #NoTrayIcon $gui = GUICreate("Text to Speech Maker", 599, 300, -1, -1) $Label1 = GUICtrlCreateLabel("Message:", 8, 24, 50, 17) $Edit1 = GUICtrlCreateEdit("", 64, 24, 521, 201) GUICtrlSetData(-1, "Hello, how are you doing?") $Button1 = GUICtrlCreateButton("Preview", 400, 248, 91, 25) $Button2 = GUICtrlCreateButton("Save as MP3", 496, 248, 91, 25) $Label2 = GUICtrlCreateLabel("Created By Brad (c) 2010 - PingTurtle.com", 408, 280, 178, 17) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $button1 GUICtrlSetState( $Button1, $GUI_DISABLE ) preview() GUICtrlSetState( $Button1, $GUI_ENABLE ) Case $button2 savemp3() EndSwitch WEnd Func preview() $file = getMP3( " " & GUICtrlRead( $Edit1 ) ) If $file = -1 Then MsgBox(16, "Error", "Could not get data from the internet, Make sure you are connected." ) Return EndIf $sound = _SoundOpen( $file ) _SoundPlay($sound, 1) _SoundClose($sound) EndFunc Func savemp3() $file = getMP3( " " & GUICtrlRead( $Edit1 ) ) If $file = -1 Then MsgBox(16, "Error", "Could not get data from the internet, Make sure you are connected." ) Return EndIf $save = FileSaveDialog( "Save MP3", @MyDocumentsDir, "MP3 Files (*.mp3)", 18, "speech.mp3", $gui ) If @error Then Return False If Not StringRight( $save, 4 ) = ".mp3" Then $save &= ".mp3" FileMove( $file, $save, 9 ) MsgBox(0, "Info", "Your MP3 file has been saved." ) EndFunc Func getMP3( $text ) SplashTextOn( "Please wait...", "Please wait..."&@crlf&"Rendering to speech...", 400, 150, -1, -1, 33 ) $baseurl = "http://translate.google.com/translate_tts?tl=en&q=" & _INetExplorerCapable( $text ) $filename = "txt2spch.mp3" FileDelete( @TempDir & "\" & $filename) InetGet( $baseurl, @TempDir & "\" & $filename, 1 ) If @error Then Return -1 SplashOff() Return @TempDir & "\" & $filename EndFunc
I probably have some unnecessary includes in there... but whatever.