Im lauf eines meiner Projekte brauchte ich TTS, weshalb diese kleine UDF entstanden ist.
Ich hoffe, jemand kann sie gebrauchen
Viel Spaß damit.Da das meine erste UDF ist freue ich mich schon auf Verbesserungsvorschläge
Version 1.01
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.10.2
Author: Kanashius
Rights: Open Source UDF
Script Function:
UDF zum wiedergeben von Text mittels Text-To-Speech
#ce ----------------------------------------------------------------------------
#include <WinAPI.au3>
; #CURRENT# =====================================================================================================================
; _SpeechObject_Create
; _SpeechObject_Say
; _SpeechObject_setRate
; _SpeechObject_SetVolume
; _SpeechObject_SetVoice
; _SpeechObject_SetOutput
; _SpeechObject_Pause
; _SpeechObject_Resume
; _SpeechObject_Stop
; _SpeechObject_isReady
; _SpeechObject_getOutputsName
; _SpeechObject_getVoicesName
; ===============================================================================================================================
;===============================================================================
;
; Function Name: _SpeechObject_Create()
; Description: Create TTS-Object
; Parameter(s): none.
; Requirement(s): none.
; Return Value(s): Returns an Object
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_Create()
$oSpeech=ObjCreate('SAPI.SpVoice')
if @error then
return -1
endif
$oSpeech.Rate = 1
$oSpeech.Volume = 100
return $oSpeech
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_Say()
; Description: Read a text.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $sText - String to read
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_Say($oSpeech,$sText)
_SpeechObject_Stop($oSpeech)
$oSpeech.Speak($sText,1)
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_setRate()
; Description: Set Rate of an Speech-Object (reading-speed)
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $iRate - Int Between -10 and 10
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_SetRate($oSpeech,$iRate)
$oSpeech.Rate=$iRate
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_SetVolume()
; Description: Set the Volume of the Speech-Object
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $iVolume - int between 0 and 100
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_SetVolume($oSpeech,$iVolume)
$oSpeech.Volume=$iVolume
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_SetVoice()
; Description: Set the voice of the Speech-Object.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $sName - Name (String) of an Voice as returned by _SpeechObject_getVoicesName()
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_SetVoice($oSpeech,$sName)
Dim $SOTokens = $oSpeech.GetVoices('', '')
For $Token In $SOTokens
if $Token.GetDescription=$sName then
$oSpeech.Voice=$Token
endif
Next
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_SetOutput()
; Description: Set the Output of the Speech-Object.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $sName - Name (String) of an Outputdevice as returned by _SpeechObject_getOutputsName()
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_SetOutput($oSpeech,$sName)
Dim $SOTokens = $oSpeech.GetAudioOutputs('','')
For $Token In $SOTokens
if $Token.GetDescription=$sName then
$oSpeech.AudioOutput=$Token
endif
Next
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_Pause()
; Description: Pauses the Speech-Object while reading.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_Pause($oSpeech)
$oSpeech.Pause()
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_Resume()
; Description: Resumes the Speech-Object when it is paused.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_Resume($oSpeech)
$oSpeech.Resume()
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_Stop()
; Description: Stops an Speech-Obekt while reading
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s): none.
; Return Value(s): none.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_Stop($oSpeech)
$Output=$oSpeech.AudioOutput
$Voice=$oSpeech.Voice
$Rate=$oSpeech.Rate
$Volume=$oSpeech.Volume
$oSpeech = ObjCreate("SAPI.SpVoice")
$oSpeech.AudioOutput=$oSpeech
$oSpeech.Voice=$oSpeech
$oSpeech.Rate = $Rate
$oSpeech.Volume = $Volume
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_isReady()
; Description: Check if the Speech-Object is ready.
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; Requirement(s): none.
; Return Value(s): true - if Speech-Object is ready
; false - if Speech-Object is reading
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_isReady($oSpeech)
if _WinAPI_WaitForSingleObject($oSpeech.SpeakCompleteEvent,0)<>258 then
return true
endif
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_getOutputsName()
; Description: Return the Names of all avaible AudioOutput-Devices
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $bAsArray - true if names have to be returned as an Array
; Requirement(s): none.
; Return Value(s): String where the Devicenames are seperated with a "|"
; or Array with Names.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_getOutputsName($oSpeech,$bAsArray=false)
Dim $SOTokens = $oSpeech.GetAudioOutputs('','')
$sString=""
For $Token In $SOTokens
$sString&="|"&$Token.GetDescription
Next
$sString=StringTrimLeft($sString,1)
if $bAsArray then
return StringSplit($sString,"|",2)
else
return $sString
endif
EndFunc
;===============================================================================
;
; Function Name: _SpeechObject_getVoicesName()
; Description: Return the Names of all avaible Voices
; Parameter(s): $oSpeech - SpeechObejct as returned by _SpeechObject_Create()
; $bAsArray - true if names have to be returned as an Array
; Requirement(s): none.
; Return Value(s): String where the Voicenames are seperated with a "|"
; or Array with Names.
; Author(s): Kanashius
;
;===============================================================================
Func _SpeechObject_getVoicesName($oSpeech,$bAsArray=false)
Dim $SOTokens = $oSpeech.GetVoices('', '')
$sString=""
For $Token In $SOTokens
$sString&="|"&$Token.GetDescription
Next
$sString=StringTrimLeft($sString,1)
if $bAsArray then
return StringSplit($sString,"|",2)
else
return $sString
endif
EndFunc