Surya

How to Add Grammar to Speech Recognition?

10 posts in this topic

i have gone through many forums related to speech recognition but i did'nt find what i needed My problem is that i want to add grammar to my speech recognition script ,when i say something my computer interprints it as something else like mom for dad so i want to make grammar for my speech recognition script .How can i import the grammar builder to autoit like it does in C# And also i have  trained my computer several times from control panel speech recognition Thanx in advance:-)


No matter whatever the challenge maybe control on the outcome its on you its always have been.

MY UDF: Transpond UDF (Sent vriables to Programs) , Utter UDF (Speech Recognition)

Share this post


Link to post
Share on other sites



Welcome to AutoIt and the forum!

Could you please stick to a single thread? Posting a question in multiple forums is nothing we would like to see here.

May I point you to the forum rules? A link can be found in the bottom right corner of each page.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Finally found a Solution got lot of help from the forum '?do=embed' frameborder='0' data-embedContent>>I took the parts and made it
to a UDF for speech recognition and other sapi stuffs

#cs --------------------------------------------------------------------------
                  (Utter UDF)
   Utter UDF (SAPI.au3)needs SAPI installed (mostly pre-installed)on your computer
to work properly.You can use and manage SAPI (Speech Recognition API).Please
remember to shutdown the function before starting another insatnce of the engine.

Current Functions:-
                   _Utter_Speech_StartEngine()
                   _Utter_Speech_CreateGrammar()
                   _Utter_Speech_CreateTokens()
                   _Utter_Speech_GrammarRecognize()
                   _Utter_Speech_Pass()
                   _Utter_Speech_ShutdownEngine()
                   _Utter_Speech_CreateFreeGrammar()
                   _Utter_Speech_FreegrammarPass()
                   _Utter_Speech_ShutdownFreeGrammar()
                   _Utter_Voice_Setvolume()
                   _Utter_Voice_GetCurrentvoice()
                   _Utter_Voice_Setvoice ()
                   _Utter_Voice_Getvoice ()
                   _Utter_Voice_StartEngine()
                   _Utter_Voice_SetRate()
                   _Utter_Voice_Transcribe()
                   _Utter_Voice_Shutdown()
                   _Utter_DebugOut()

Internal Functions ----------------------------------------------------
                    _getpath($file)
                    _Fetchextension($file)
                    _checkgrammar($atb)
                    _CheckObject($ark)
                    MyErrFunc()
                    RecoContext_Recognition($iStr, $vStr, $iRec, $iRe)
                    SpRecEvent_Recognition($iStr, $vStr, $iRec, $iRe)

Variables -------------------------------------------------------------
      $UTTER_SPEECH_RECOGNIZE :- Contains currently recognised word
           _Utter_Speech_CreateFreeGrammar() function can also set this
           variable as well as the _Utter_Speech_GrammarRecognize()
           function this variable is changed when each time the user
           speaks a different word.Changes to empty string when you
           shutdown the function or start a new instance of the engine
      $UTTER_SPEECH_VAR :- The word to be recognized the recognition
           variable changes to empty string each time you create a
           new instance of the speech engine
      $UTTER_SPEECH_RECOSTATE :- This variable is set to 0 If the
          recognition verb matches the currently recognised verb
      $UTTER_SPEECH_ERROR :- Shows the @error instance of the
          _Utter_Speech_GrammarRecognize() function
      $UTTER_SPEECH_RESPONSE :- Sets variable to 0 if any thing is recognised
          and 1 if Not
      $UTTER_SPEECH_FUNC :- Function to call for after recognising a word
          and to send that word to a function as paramter.NOTE THE FUNCTION To
          BE CALLED MUST ACCEPT ONLY ONE PARAMETER.
      $UTTER_SPEECH_PASS :- Sets the value to 1 if pause parameter (1) is issued
          to _Utter_Speech_Pass() function and To 0 if resume parameter (1)
          is issued to _Utter_Speech_Pass()
      $UTTER_SPEECH_DEBUG :- Debug Variable change to true by calling _Utter_DebugOut(True)
          to print out output to console
----------Examples-----------
 (Transcription Audio)
$hm = _Utter_Voice_StartEngine()
_Utter_Voice_Transcribe($hm,@ScriptDir &"\intro.mp3","This is an example for transcription of audio",0,@ScriptDir &"\lame.exe")
_Utter_Voice_Shutdown()
SoundPlay (@ScriptDir &"\intro.mp3",1)

 (Grammar Example)
Local $handl = _Utter_Speech_StartEngine()
Local $txt1 = "Red is my favourite|Yellow is fine|blue colour reveals excitement|black is for speed|Green Colour"
Local $txt2 = "Colors|Animals are good|Regions|Country"
_Utter_Speech_CreateGrammar($handl,$txt1,$txt2)
_Utter_Speech_CreateTokens($handl)
_Utter_Speech_GrammarRecognize($handl,"Red",0)
While 1
Sleep (50)
ConsoleWrite (@CRLF &"Recognised=" &$UTTER_SPEECH_RECOGNIZE)
WEnd
_Utter_Speech_ShutdownEngine()
-------------Examples--------------------

Author ..........: SuryaSaradhi.B
Modified ........: 18/02/2015
#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include-once

Global $UTTER_SPEECH_RECOGNIZE
Global $UTTER_SPEECH_VAR
Global $UTTER_SPEECH_ERROR
Global $UTTER_SPEECH_RECOSTATE
Global $UTTER_SPEECH_RESPONSE
Global $UTTER_SPEECH_FUNC
Global $UTTER_SPEECH_PASS = 0
Global $UTTER_SPEECH_DEBUG = False
Global Const $SAFT48kHz16BitMono = 38
Global Const $SSFMCreateForWrite = 3
Global Const $SVSFPurgeBeforeSpeak = 2
Global Const $SVSFNLPSpeakPunc = 64

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_StartEngine()
; Description:      Creates a new instance of Speech Recognition Grammar Object.
;
; Parameter(s):     Null
; Requirement(s):   SAPI Installed on your computer
; Return Value(s):  Returns an empty array of handles to Recognition objects
;                   this array handle is given to other functions in the
;                   group for adding grammar
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_StartEngine()
Global $h_Context = ObjCreate("SAPI.SpInProcRecoContext")
$comer = @error
Global $h_Recognizer = $h_Context.Recognizer
;Global $h_Grammar = $h_Context.CreateGrammar(1)
$oRecoContext = $h_Context ;ObjCreate('SAPI.SpSharedRecoContext')
Global $oVBS = ObjCreate("ScriptControl")
$oVBS.Language = "VBScript"
Global $oNothing = $oVBS.Eval("Nothing")
$oRecoContext.CreateGrammar(0)
$oGrammar = $oRecoContext.CreateGrammar()
Global $h_Grammar = $oGrammar
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
_nullifyvariable()
Global $array[8]
$array[0] = $oRecoContext ;spinprorecocontext
$array[1] = $h_Recognizer ;main recognizer
$array[2] = 'null' ;Null handler
$array[3] = $oVBS ;Script
$array[4] = $oNothing ;Nothing
$array[5] = $h_Grammar ;Grammar verbs
$array[6] = "Error:" &$comer ;error notifications
$array[7] = $oMyError
Return $array
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_CreateGrammar($ark,$gramr="",$trn="")
; Description:      Adds Grammar to the Speech Recognition Dictionary for recognition
;                   the computer will recognize the word only making recognition more
;                   specific and accurate.
;
; Parameter(s):     $ark   :     Array handle from _Utter_Speech_StartEngine() function
;                   $gramr :-    (Main Phrase)Grammar to add to the input grammar can be a one
;                                dimensional array (two or more dimensions will return an error)
;                                word or string seperated by '|' delimeter.Without the paramter
;                                grammar added is an empty String.
;                   $trn   :-    (transitional Verb)Word to be said after the main verb.This word is recognised to
;                                be coming after the first verb
; Requirement(s):   SAPI Installed on your computer For Accurate Recognition Train your computer before
;                   adding grammar and starting the recognition procedure.
; Return Value(s):  Returns an empty array of handles to Dictionary Objects
;                   this array handle is given to other functions in the
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_CreateGrammar($ark,$gramr="",$trn="")
;run a check function
_CheckObject($ark)
$ftr = _checkgrammar($gramr)
$btr = _checkgrammar($trn)
$oGrammar = $ark[5]
$oTopRule = $oGrammar.Rules.Add('RUN', 1, 0)
$oWordsRule = $oGrammar.Rules.Add('WORDS', BitOR(1, 32), 1)
$oAfterCmdState = $oTopRule.AddState()
For $i = 0 To UBound ($ftr)-1
$oTopRule.InitialState.AddWordTransition($oAfterCmdState, $ftr[$i])
$oAfterCmdState.AddRuleTransition($ark[4], $oWordsRule)
Next
For $i = 0 To UBound ($btr) -1
$oWordsRule.InitialState.AddWordTransition($ark[4], $btr[$i])
Next
;~ $oWordsRule.InitialState.AddWordTransition($oNothing, 'whatever')
$oGrammar.Rules.Commit()
$oGrammar.CmdSetRuleState('RUN', 1)
Local $array[3]
$array[0] = $oTopRule
$array[1] = $oAfterCmdState
$array[2] = $oWordsRule
Return $array[2]
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_CreateTokens($ark)
; Description:      Creates tokens for redirecting the input of Microphone into the
;                   main recognition channel.
;
; Parameter(s):     $ark      :- Handle from the _Utter_Speech_StartEngine() function
; Requirement(s):   SAPI Installed on your computer,Microphone installed on your computer
; Return Value(s):  Returns an empty array of handles to token objects
;                   this array handle is given to other functions in the
;                   group for adding grammar
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_CreateTokens($ark)
$h_Recognizer = $ark[1]
Global $h_Category = ObjCreate("SAPI.SpObjectTokenCategory")
$h_Category.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
Global $h_Token = ObjCreate("SAPI.SpObjectToken")
$h_Token.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
$h_Recognizer.AudioInput = $h_Token
Local $array[2]
$array[0] = $h_Category
$array[1] = $h_Token
Return $array[1]
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_GrammarRecognize($ark,$grm="",$delay=1000,$func=False)
; Description:      Starts the Speech recognition procedure.$UTTER_SPEECH_ERROR is set To
;                   the @error of the Object Handler and $UTTER_SPEECH_VAR is set to The
;                   recognising verb.
;
; Parameter(s):     $ark      :- Handle from the _Utter_Speech_StartEngine() function
;                   $grm      :- Grammar to Recognise without this parameter the grammar
;                                to recognise is an empty String
;                   $delay    :- The time to stop the script for the object handler to
;                                recognise phrases and word said by the user.you can issue
;                                0 to this paramter if there is a While...WEnd loop after this
;                                function
;                   $func     :- The function to be called after recognising the word.Defaulty
;                                it will not call any function but will only set a recognized
;                                verb $UTTER_SPEECH_RECOGNIZE variable.If a parameter or a function
;                                name is issued when the user speaks and when it is recognised the
;                                function will be called with the recognised verb as the parameter
;                                NOTE:THE FUNCTION MUST EXIST AND THE FUNCTION SHOULD ONLY ACCEPT
;                                ONE PARAMETER.Issuing this parameter will also set the function
;                                variable $UTTER_SPEECH_FUNC to the function name.Function name
;                                must be given in quotes
; Requirement(s):   SAPI Installed on your computer,For Better acuuracy train your computers
;                   speech recognition module.
; Return Value(s):  Returns empty variable containing handle to event handler module.
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_GrammarRecognize($ark,$grm="",$delay=1000,$func="")
$hk = ObjEvent($ark[0], 'RecoContext_')
$UTTER_SPEECH_ERROR = @error
$UTTER_SPEECH_VAR = $grm
$UTTER_SPEECH_FUNC = ""
If Not $func = "" Then $UTTER_SPEECH_FUNC = $func
Sleep ($delay)
Return $hk
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_Pass($in = 0)
; Description:      Pauses and resumes the recognition instance.
;
; Parameter(s):     $in = Defaultly 0 if issued 1 Then recognition instance will stop
;                         giving output which will resume on giving 0 to the function
;                         as a parameter.This will also set the  $UTTER_SPEECH_PASS variable.
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_Pass($in = 0)
If $in = 0 Then
   $UTTER_SPEECH_PASS = 0
ElseIf $in = 1 Then
   $UTTER_SPEECH_PASS = 1
Else
   $UTTER_SPEECH_PASS = 1
EndIf
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_ShutdownEngine()
; Description:      Shuts down the handles created by _Utter_Speech_StartEngine() function
;                   and nullifies every object.
;
; Parameter(s):     Null
; Requirement(s):   Already called the _Utter_Speech_StartEngine() function
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_ShutdownEngine()
_nullifyvariable()
Global $hk = 0
Global $h_Context = 0
Global $h_Recognizer = 0
Global $oRecoContext = 0
Global $oVBS = 0
Global $oGrammar = 0
Global $oMyError = 0
Global $oTopRule = 0
Global $oWordsRule = 0
Global $oAfterCmdState = 0
Global $h_Category = 0
Global $h_Token = 0
Global $hk = 0
Global $oNothing = 0
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_CreateFreeGrammar($delay = 3000,$func = "")
; Description:      Starts the Speech recognition Module with system dictionary loaded
;                   no grammar has to be specified by the user.Delay time can be set to
;                   0 if called before a While...WEnd loop.All variables are changed by
;                   the function.Accuracy is very low for this type of recognition
;
; Parameter(s):     $delay       :- The delay time for the script to wait for the verb
;                                   recognition you can issue 0 if there is a While...WEnd
;                                   loop after calling this Function.
;                   $func        :- The function to be called after recognising the word.Defaulty
;                                   it will not call any function but will only set a recognized
;                                   verb $UTTER_SPEECH_RECOGNIZE variable.If a parameter or a function
;                                   name is issued when the user speaks and when it is recognised the
;                                   function will be called with the recognised verb as the parameter
;                                   NOTE:THE FUNCTION MUST EXIST AND THE FUNCTION SHOULD ONLY ACCEPT
;                                   ONE PARAMETER.Issuing this parameter will also set the function
;                                   variable $UTTER_SPEECH_FUNC to the function name.Function name
;                                   must be given in quotes
; Requirement(s):   SAPI installed in your computer it is also highly recommended to train
;                   your computer before starting the procedure.
; Return Value(s):  @error of The main Event Handler.
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_CreateFreeGrammar($delay = 3000,$func = "")
_nullifyvariable()
If Not $func = "" Then $UTTER_SPEECH_FUNC = $func
Global $h_Contextm = ObjCreate("SAPI.SpInProcRecoContext")
Global $h_Recognizerm = $h_Contextm.Recognizer
Global $h_Grammarm = $h_Contextm.CreateGrammar(1)
$h_Grammarm.Dictationload
$h_Grammarm.DictationSetState(1)

;Create a token for the default audio input device and set it
Global $h_Categorym = ObjCreate("SAPI.SpObjectTokenCategory")
$h_Categorym.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
Global $h_Tokenm = ObjCreate("SAPI.SpObjectToken")
$h_Tokenm.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
$h_Recognizerm.AudioInput = $h_Tokenm

Global $i_ObjInitializedm = 0

Global $h_ObjectEventsm = ObjEvent($h_Contextm, "SpRecEvent_")
If @error Then
    $i_ObjInitializedm = 0
Else
    $i_ObjInitializedm = 1
 EndIf
$UTTER_SPEECH_ERROR = $i_ObjInitializedm
 Sleep ($delay)
 Return $i_ObjInitializedm
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_FreegrammarPass($in = 0)
; Description:      Pauses and resumes the recognition instance.
;
; Parameter(s):     $in = Defaultly 0 if issued 1 Then recognition instance will stop
;                         giving output which will resume on giving 0 to the function
;                         as a parameter.This will also set the  $UTTER_SPEECH_PASS variable.
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_FreegrammarPass($in = 0)
If $in = 0 Then
   $UTTER_SPEECH_PASS = 0
ElseIf $in = 1 Then
   $UTTER_SPEECH_PASS = 1
Else
   $UTTER_SPEECH_PASS = 1
EndIf
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Speech_ShutdownFreeGrammar()
; Description:      Nullifies all variables and shutsdown the objects created by
;                   the _Utter_Speech_CreateFreeGrammar() function.
;
; Parameter(s):     Null
; Requirement(s):   Already Called _Utter_Speech_CreateFreeGrammar() function
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Speech_ShutdownFreeGrammar()
_nullifyvariable()
Global $h_Contextm = 0
Global $h_Recognizerm = 0
Global $h_Grammarm = 0
Global $h_Categorym = 0
Global $h_Tokenm = 0
Global $i_ObjInitializedm = 0
Global $h_ObjectEventsm = 0
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_Shutdown()
; Description:      Shutsdown Objects created by the _Utter_Voice_StartEngine() function
;
; Parameter(s):     Null
; Requirement(s):   Already Called _Utter_Voice_StartEngine() function
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_Shutdown()
Global $lop = 0
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_Setvolume(ByRef $ark,$val)
; Description:      Sets Volume of _Utter_Voice_StartEngine() function TTS Engine
;
; Parameter(s):     $ark     :- Handle returned from _Utter_Voice_StartEngine()
;                   $val     :- Volume to be set (0-100)
; Requirement(s):   Already Called _Utter_Voice_StartEngine() function,SAPI installed
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_Setvolume(ByRef $ark,$val)
$oSpeech = $ark
$oSpeech.Volume = $val
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_GetCurrentvoice(ByRef $ark)
; Description:      Gets the current voice Activated in TTS (Text to Speech) Engine
;
; Parameter(s):     $ark     :- Handle returned from _Utter_Voice_StartEngine()
; Requirement(s):   Already Called _Utter_Voice_StartEngine() function,SAPI installed
; Return Value(s):  Current Active Voice Profile
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_GetCurrentvoice(ByRef $ark)
$hl = $ark.getvoices.item (0)
$ml = $hl.GetDescription()
Return $ml
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_Setvoice (ByRef $Object, $sVoiceName)
; Description:      Sets an available voice from library as active current TTS voice
;
; Parameter(s):     $ark          :- Handle returned from _Utter_Voice_StartEngine()
;                   $sVoiceName   :- Voice Profile Name returned from _Utter_Voice_Getvoice()
;                                    function
; Requirement(s):   Already Called _Utter_Voice_StartEngine() function,SAPI installed
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_Setvoice (ByRef $Object, $sVoiceName)
    Local $VoiceNames, $VoiceGroup = $Object.GetVoices
    For $VoiceNames In $VoiceGroup
        If $VoiceNames.GetDescription() = $sVoiceName Then
            $Object.Voice = $VoiceNames
            Return
        EndIf
    Next
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_Getvoice(ByRef $ark,$bReturn = True)
; Description:      Gets available voice profile names installed on your Computer
;
; Parameter(s):     $ark          :- Handle returned from _Utter_Voice_StartEngine()
;                   $bReturn      :- Boolean value paramater if True is issued returns an
;                                    array containing the available installed profile names
;                                    If False is issued returns a String consisting of profile
;                                    names seperated by the '|' character
; Requirement(s):   Already Called _Utter_Voice_StartEngine() function,SAPI installed
; Return Value(s):  Returns an array or String (seperated by '|' delimeter) containing
;                   available profile names installed in your computer
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_Getvoice (ByRef $ark,$bReturn = True)
$oSpeech = $ark
Local $sVoices, $VoiceGroup = $oSpeech.GetVoices
    For $Voices In $VoiceGroup
        $sVoices &= $Voices.GetDescription() & '|'
     Next
    If $bReturn Then Return StringSplit(StringTrimRight($sVoices, 1), '|', 2)
    Return StringTrimRight($sVoices, 1)
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_StartEngine()
; Description:      Starts an instance of TTS Engine Object
;
; Parameter(s):     Null
; Requirement(s):   SAPI installed
; Return Value(s):  Returns a handle to TTS Engine Object.
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_StartEngine()
$lop = ObjCreate ("SAPI.spVoice")
Return $lop
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_SetRate(ByRef $ark,$val)
; Description:      Sets the rate of voice OR how fast the voice speaks.
;
; Parameter(s):     $ark    :- Handle returned by the _Utter_Voice_StartEngine() function
;                   $val    :- Rate or Speed of the voice (-10 to 10)
; Requirement(s):   Already called _Utter_Voice_StartEngine(),SAPI installed
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_SetRate(ByRef $ark,$val)
$oSpeech = $ark
$oSpeech.Rate = $val
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_Voice_Transcribe(ByRef $ark,$file,$txt,$comp = 1,$lame="")
; Description:      Transcribes speech to audio OR Converts text to Speech which is
;                   being saved to an mp3 or wav fileNo other formats than .wav and .mp3
;                   are allowed.System can save the audio as wav only if you want the file
;                   to be an mp3 then you will have to issue the lame parameter.
;
; Parameter(s):     $ark    :- Handle returned by the _Utter_Voice_StartEngine() function
;                   $file   :- The path with the name of the file to be saved to if to Be
;                              saved as an mp3 then specify the file extension as .mp3
;                              otherwise as .wav
;                   $txt    :- The text to convert to audio
;                   $comp   :- Without issuing the parameter (value = 1) the file will be
;                              saved as .wav issue the parameter with 0 value to save the
;                              audio as .mp3 also specify the lame location otherwise this
;                              will return an error.
;                   $lame   :- Location of the Lame.exe file for converting the .wav to .mp3
; Requirement(s):   Already called _Utter_Voice_StartEngine(),SAPI installed
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_Voice_Transcribe(ByRef $ark,$file,$txt,$comp = 1,$lame="")
$ext = _Fetchextension($file)
If $ext=0 Or $ext = 2 Then
$oStream = ObjCreate ( "SAPI.SpFileStream" )
$ark.AllowAudioOutputFormatChangesOnNextSet = True
$oStream.Format.Type = $SAFT48kHz16BitMono
If $ext = 2 Then
   $mh = ".wav"
Else
   $mh = ""
EndIf
$oStream.Open ( $file &$mh, $SSFMCreateForWrite, True )
$ark.AudioOutputStream = $oStream
$ark.Speak ( $txt, $SVSFPurgeBeforeSpeak + $SVSFNLPSpeakPunc )
$oStream.Close ( )
$ark.AudioOutput = $ark.GetAudioOutputs ( '' ).Item ( 0 )
If $ext &$comp = 20  Then
If FileExists ($lame ) Then
RunWait ( '"' &$lame  &'"' &' -q0 "' & $file &'.wav" "' &_getpath($file) & '.mp3"', '', @SW_HIDE)
FileDelete ($file &".wav")
Else
$txt = "Utter Cant Perform conversion operation because lame directory you enterd is not valid")
ConsoleWrite ($txt)
EndIf
EndIf
Else
   $msg = "Utter cant convert text to other formats than .wav lame is required to convert to .mp3"
   ConsoleWrite (@CRLF &$msg)
EndIf
EndFunc

;#FUNCTION# ;===============================================================================
; Function Name:    _Utter_DebugOut($ffl=False)
; Description:      turns on Printing recognised words to the console stream for debugging.
;
; Parameter(s):     $ffl        :-  Defaultly False if set to True will print out recognised
;                                   words to the console strem.
; Requirement(s):   Null
; Return Value(s):  Null
; Author ........: Surya Saradhi.B
; Modified.......: 18/02/15 by Surya
;============================================================================================
Func _Utter_DebugOut($ffl=False)
$UTTER_SPEECH_DEBUG = $ffl
EndFunc

;#INTERNAL FUNCTION# ;===============================================================================
; Below Functions are called by the functions which are in the group and are not to be called by the
; User.These are support functions which provide help with the main function.
;============================================================================================
#Region :Internal Functions Start
Func _nullifyvariable()
Global $UTTER_SPEECH_RECOGNIZE = ""
Global $UTTER_SPEECH_VAR = ""
Global $UTTER_SPEECH_ERROR = ""
Global $UTTER_SPEECH_RECOSTATE = ""
Global $UTTER_SPEECH_RESPONSE = ""
Global $UTTER_SPEECH_FUNC = ""
Global $UTTER_SPEECH_PASS = ""
EndFunc

Func _getpath($file)
Local $spk = StringRegExp($file, "^\h*((?:\\\\\?\\)*(\\\\[^\?\/\\]+|[A-Za-z]:)?(.*[\/\\]\h*)?((?:[^\.\/\\]|(?(?=\.[^\/\\]*\.)\.))*)?([^\/\\]*))$", 1)
Return $spk[1] &$spk[2] &$spk[3]
EndFunc

Func _Fetchextension($file)
Local $aArray = StringRegExp($file, "^\h*((?:\\\\\?\\)*(\\\\[^\?\/\\]+|[A-Za-z]:)?(.*[\/\\]\h*)?((?:[^\.\/\\]|(?(?=\.[^\/\\]*\.)\.))*)?([^\/\\]*))$", 1)
If $aArray[4] = ".wav" Then
   Return 0
ElseIf $aArray[4] = ".mp3" Then
   Return 2
Else
   Return 1
EndIf
EndFunc

Func _checkgrammar($atb)
If IsArray($atb) Then
   Return $atb
ElseIf StringInStr ($atb,"|") Then
   $split = StringSplit ($atb,"|",$STR_NOCOUNT)
   Return $split
Else
   Local $ark[1]
   $ark[0] = $atb
   Return $ark
EndIf
EndFunc

Func _CheckObject($ark)
ObjName ($ark[0])
If @error Then MsgBox ("","Utter","Handler not valid")
EndFunc

Func MyErrFunc()
  Msgbox(0,"Utter COM Test","We intercepted a COM Error !"      & @CRLF  & @CRLF & _
             "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
             "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
             "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _
             "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
             "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
             "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
             "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
             "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
            )
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    $g_eventerror = $err  ; to check for after this function returns
Endfunc

Func SpRecEvent_SoundStart($StreamNumber, $StreamPosition)
    $UTTER_SPEECH_RESPONSE = 0
EndFunc

Func SpRecEvent_SoundEnd($StreamNumber, $StreamPosition)
    $UTTER_SPEECH_RESPONSE = 1
EndFunc

Func RecoContext_SoundStart($StreamNumber, $StreamPosition)
    $UTTER_SPEECH_RESPONSE = 0
EndFunc

Func RecoContext_SoundEnd($StreamNumber, $StreamPosition)
    $UTTER_SPEECH_RESPONSE = 1
EndFunc

Func RecoContext_Recognition($iStreamNumber, $vStreamPosition, $iRecognitionType, $iResult)
    $said = $iResult.PhraseInfo.GetText()
   If $UTTER_SPEECH_PASS = 0 Then
    If $UTTER_SPEECH_DEBUG Then ConsoleWrite( @CRLF &"--UTTER NOTIFIED:" &$said)
    If Not $UTTER_SPEECH_FUNC = "" Then
       Call ($UTTER_SPEECH_FUNC,$said)
    EndIf
    If $UTTER_SPEECH_VAR = $UTTER_SPEECH_RECOGNIZE Then
       $UTTER_SPEECH_RECOSTATE = 0
    Else
       $UTTER_SPEECH_RECOSTATE = 1
    EndIf
    $UTTER_SPEECH_RECOGNIZE = $said
 Else
    If $UTTER_SPEECH_DEBUG Then ConsoleWrite( @CRLF &"--UTTER PAUSED RECOGNITION STATE")
   EndIf
EndFunc

Func SpRecEvent_Recognition($StreamNumber, $StreamPosition, $RecognitionType, $Result)
    $said = $iResult.PhraseInfo.GetText()
    If $UTTER_SPEECH_PASS = 0 Then
    If Not $UTTER_SPEECH_FUNC = "" Then
       Call ($UTTER_SPEECH_FUNC,$said)
    EndIf
    If $UTTER_SPEECH_DEBUG Then ConsoleWrite( @CRLF &"--UTTER NOTIFIED:" &$said)
    $UTTER_SPEECH_VAR = $said
    $UTTER_SPEECH_RECOGNIZE = $said
     Else
    If $UTTER_SPEECH_DEBUG Then ConsoleWrite( @CRLF &"--UTTER PAUSED RECOGNITION STATE")
   EndIf
EndFunc
#EndRegion :Internal Functions End

If any bugs please report


No matter whatever the challenge maybe control on the outcome its on you its always have been.

MY UDF: Transpond UDF (Sent vriables to Programs) , Utter UDF (Speech Recognition)

Share this post


Link to post
Share on other sites

Surya,

That is enough self=advertisement for today - please do not necro any more threads to tell us about your updated UDF.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Sir I think you have misunderstood all I was trying to do was to help someone out who has the same problem with speech recognition if somebody knows about the UDF then can they use it I am terribly sorry sir if I have caused any trouble 


No matter whatever the challenge maybe control on the outcome its on you its always have been.

MY UDF: Transpond UDF (Sent vriables to Programs) , Utter UDF (Speech Recognition)

Share this post


Link to post
Share on other sites

Surya,

No problem - but please remember that, unlike some "sochul meedja" sites,  your reputation here is based on the content and not on the number of your posts.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

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