Change Log: Difference between revisions

From LINKS - Documentation
Jump to navigation Jump to search
 
(56 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Development]]
[[Category:Development]]
Here you can find changes done around every major dev beta update and that are now available in public beta.
===#ChangeLog v2.6.3.104===
* Added a check for Ivona vendor "IVONA Software Sp. z o.o." which caused crashing.
** This vendor is not compatible with all the speech functionalities. Like inline volume\rate control.
===#ChangeLog v2.6.3.103===
* Added function:
** [GetWordColumn("WordList","ColumnNameOrNumber")]
===#ChangeLog v2.6.3.102===
* Added function:
** [SetWord("test_greetings","good day","converted value","Good day")]
*** Example: http://localhost:54657/?action=[SetWord("test_greetings","good day","converted value","Good day")]&key=ABC1234
*** It takes existing wordlist, uses headers to distinguish which column to use.
*** Allows you to add or update words.
===#ChangeLog v2.6.3.101===
* Added functions:
** [CurrentWindowState]
** [IsVisible]
** [Show]
** [Hide]
===#ChangeLog v2.6.3.100===
* Added functions:
** [GetSpokenPhraseFromGRXMLResult()]
*** Works after we call [GetRecognizedResult(...)]
** [GetTagFromGRXMLResult("TagName")]
*** Works after we call [GetRecognizedResult(...)]
** [Clear("FunctionOrString")]
*** Clears return value from function
===#ChangeLog v2.6.3.99===
* Updated function:
** [GetRecognizedResult(...)]
*** Updated so it stops listener before getting the results and start listener afterwards.
* [GetProperty("name")]
** Fixed
#ChangeLog v2.6.3.98
Added function:
[GetProperty("name")]
Updated function
[SetProperty("name","value")]
So it saves the properties in xml
Sound effects function updated also, may resolve Cortana issue.
===#ChangeLog v2.6.3.97===
* Added properties:
** CreateVolumeGrammar
*** Can be set to false so default grammar is not made
*** Example: [SetProperty("CreateVolumeGrammar","false")]
* CreateSwitchProfileGrammar
*** Can be set to false so default grammar is not made
*** Example: [SetProperty("CreateSwitchProfileGrammar","false")]
* Updated function:
** [SetProperty("name","value")]
*** This should be able to set any LINKS properties that is stored in InternalStrings or config xml
* Added function:
** ListAllFunctions
*** Usage: http://localhost:54657/?action=[ListAllFunctions]&output=response&request=DISABLE_RECURSE
===#ChangeLog v2.6.3.96===
* Tray menu all organized
* New tray option to keep LINKS on top
* Bug fix for UserVars
===#ChangeLog v2.6.3.93===
* Functions added:
** [PlaySoundSync("sound effect")]
** [PlayWavFileSync("full wav file path")]
** [strike]Some more tool tips in internal functions under tray menu[/strike]
===#ChangeLog v2.6.3.87===
* Updated tray menu for plugins.
** Allows user to:
*** Run functions.
*** Remove plugins.
===#ChangeLog v2.6.3.86===
* Added Function:
** [SetSaveRejectedSpeech("true/false")] ' enabled by default
** [Get_LastRejectedSpeechWavePath] - we may have to update this so filename removes any special characters.
*** Use this to get path to last rejected speech wav file path
* Fixed:
** Shell -con speech response issue.
===#ChangeLog v2.6.3.85===
* Added cache control in WebRequest, so nothing is cached on client.
===#ChangeLog v2.6.3.84===
* Added Function:
** [SetRecogProfile("ProfileName")] - needs testing
===#ChangeLog v2.6.3.83===
* Updated functions:
** [GetRecognizedResult(…)]
*** Added error control
===#ChangeLog v2.6.3.80===
* Bug fix - For response with wordlist variable
* Updated Function:
** [SetClipboardText(...)] so it does not return the clipboard
* Changed "do not listen while you speak" functionality so it uses UserVoiceThreshold instead of disabling grammar on the fly that may have caused GetAnswers to not work properly.
===#ChangeLog v2.6.3.79===
* A bug fix - clears any wandering speech prompts after 5 seconds when sync Speak is called multiple times in succession
===#ChangeLog v2.6.3.78===
* Updated functions:
** [GetRecognizedResult(…)] to fix Invocation error (tested for error)
* Updated command dup check for Default commands.
* Bug fix - For action with wordlist variable
* Updated functions:
** [GetClipboardText(...)] so it does not return the clipboard
** [GetRecognizedResult(…)] to fix Invocation error (not tested)
===#ChangeLog v2.6.3.77===
* Added voice threshold option
===#ChangeLog v2.6.3.73===
* Added  UserVoiceThreshold - set at 12 by default, may need to change mic volume or change the threshold as you prefer.
** See Debug window for more details when you speak - itll alow you to figure out the correct threshold for your mic level.
** Threshold is basically how loud you speak, the code takes 5 loudest points in the voice then averages it out then check against UserVoiceThreshold.
* Added function:
** [SerUserVoiceThreshold("Threshold as decimal")] - will be renamed to [SetUserVoiceThreshold(..)] in next update.
===#ChangeLog v2.6.3.69===
* Added function:
** [GetRecognizedResult("GrammarXML file","RuleName")]
*** Uses grxml file from GrXML folder, return recognized speech.
*** Example: [GetRecognizedResult("test_en-US", "Confirmation")]
===#ChangeLog v2.6.3.67===
* Async tasks from plugins can now be called from LINKS ( this was an issue - it was calling the task from plugin and getting stuck on it)
===#ChangeLog 2.6.3.64===
* Added Function:
** [IsSpeaking]
** [GetVersion]
** [SetDefaultConfidence("0-1")]
===#ChangeLog Unknown===
* [Audio("file path")] in any response
** if response is like this:
** sound of bird [Audio("bird")], sound of wind [Audio("wind")]
** It will be all said and played in synchronously.
** bird.wav and wind.wav has to be in soundeffects folder or full path or a url will be needed
===#ChangeLog 2.6.3.58===
* Added a function:
** [SetDefaultConfidence("confidence")]
*** Example: [SetDefaultConfidence(".5")]
===#ChangeLog 2.6.3.57===
* Added a function [GetRecognizedSpeech]
* Saves recognized command and returns path to the wav file.
===#ChangeLog v2.6.3.56===
* Can handle one WordList grammar.
===#ChangeLog v2.6.3.55===
* Added functions:
** [AddCommand("shell/web/default","command/grammar","response","action","profile","phrase on success")]
** [AddCommand("social","command/grammar","response","","profile","phrase on success")]
===#ChangeLog v2.6.3.54===
* Updated Settings window - for theming
===#ChangeLog 2.6.3.53===
* Updated [AddCommands("full path")] function
** Checks for existing commands, does not adds duplicates.
** Path is not case sensitive anymore.
* Added [AddCommands("full path","phrase")]
** Speaks phrase if command is added.
* Fixed sound settings bg issue.
===#ChangeLog 2.6.3.51===
* Added override=true in speak.html
===#ChangeLog 2.6.3.50===
* Changed request=override to override=true
** Example: from http://localhost:54657/?action=[Speak("request overridden")]&request=override
*** to http://localhost:54657/?action=[Speak("request overridden")]&override=true
* Some more strings added in InternalStrings.xml
===#ChangeLog 2.6.3.49===
* Added updating status in tray icon
* Added notification popup when update is completed.
* AppUpdate strings are now available in InternalStrings.xml
===#ChangeLog v2.6.3.46===
* Added request=override option for web requests.  See change log .2.6.3.50
** Sample: http://localhost:54657/?action=[Speak("request overridden")]&request=override
===#ChangeLog 2.6.3.45===
* PTT on load is back, please let me know if it works better or not
* Test re-pluging microphone, and maybe change default mic - see if it picks up the mic without restarting.
===#ChangeLog 2.6.3.44===
* Added PersistedLanguageModelAdaptation and turned off all adaptations
===#ChangeLog 2.6.3.40===
* Main window working with colors completely
===#ChangeLog 2.6.3.39===
* Added theme customization
===#ChangeLog v2.6.3.35===
* Fixed speech rate when using setVoice function.
===#ChangeLog v2.6.3.31===
* Added speech rate slider in settings.
* Fixed loading of correct volume and rate based on config on startup.
===#ChangeLog v2.6.3.30===
* Fixed speech folder error on startup
* Fixed shutdown so it closes LINKS completely.
===#ChangeLog v2.6.3.24 (Latest Public Beta as of 02/21/2017)===
* Fixed issue with dictation in shell.action field.
* Added functions:
** [MoveThisWindow("ScreenNumber","PhraseOnSuccess","PhraseOnError")]
** [MoveWindowByCaption("WinCaption","ScreenNumber","PhraseOnSuccess","PhraseOnError")]
** [CloseWindowByCaption ("WinCaption","PhraseOnSuccess","PhraseOnError")]
** [ActivateWindowByCaption("WinCaption","PhraseOnSuccess","PhraseOnError")]
** [GetCaption("PhraseOnError")]
** [SetWindowTransparency("Percent","PhraseOnError")]
** [SetWindowTransparencyByCaption("WinCaption","Percent","PhraseOnError")]
** [MoveWindowEx("WinCaption","WinLeft","WinTop","WinWidth","WinHeight","PhraseOnSuccess","PhraseOnError")]
** [MoveThisWindowEx("WinCaption","WinLeft","WinTop","WinWidth","WinHeight","PhraseOnSuccess","PhraseOnError")]
===#ChangeLog v2.6.3.18===
* Added functions:
** [GetClipboardText()]
** [Clip()]
** [Type("str","sendkeys"] or [Type("str","winforms"]
===#ChangeLog v2.6.3.17===
* Functions added:
** [LoadProfile("profile name")]
** [GetSpeech()] - use with output=response and request=DISABLE_RECURSE
*** Same as [GetLastSpeech()]
** [GetClipboardText()]
** [StreamIt("full file path")] - works with mp3
** [SerialWrite("LED.ON","SerialConfig_test")]
** [SerialReadLine("timeout in ms","SerialConfig_test")] (not stable)
===#ChangeLog v2.6.3.15===
* Functions Added:
** [GetLastSpeech()]
*** Enables speaking through browser
*** Run in webrequest with DISABLE_RECURSE action=[GetLastSpeech()]&request=DISABLE_RECURSE
*** Use in chrome only/maybe edge
** [GetLastSpeechAsBase64()]
*** gets last speech as base64
** [GetNextWaveFilePath("")]
*** file name to be used for other wave files.
*** This allows you to save custom wave file with a specific name in Customization\Speech\  that would be played by GetLastSpeech() function.
* Added speech wav files in Customize\Speech folder
* All async speech will be stored there for the session
* Added 4 default commands
** enable auto updates
** disable auto updates
** enable saving speech
** disable saving speech
** Reverted cortana.dll to older version
===#ChangeLog v2.6.3.11===
* Read this - fix for ;
* AiIntro function - had a problem in GetWord function - fixed. - May affect GetAnswer function (possibly in better direction.)
* Speak function updated - When invalid voice name is provided it should handle that a bit better/faster
===#ChangeLog v2.6.3.8===
* Updated [VoiceName...] parsing when using -ret
* Added Functions:
** [GetActiveVoiceName()]
** [GetCurrentVoiceOfSpokenPhrase()]
** [GetDefaultVoiceVolume()]
** [GetDefaultSystemVolume()]
** [GetDefaultVoiceRate()]


===#ChangeLog v2.6.3.6===
===#ChangeLog v2.6.3.6===
Line 16: Line 298:


===#ChangeLog v2.6.3.3===
===#ChangeLog v2.6.3.3===
[AutoSleep(...)] updated and tested.
* Updated Functions:
[GetAnswer()] updated.
** [AutoSleep(...)]
Added [InitQuestion("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")] [GetAnswer()]
** [GetAnswer()]
Tray/context menu now has version numbers for plugins.
* Added Function:
Changed auto reset code so it uses less cpu.
** [InitQuestion("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")] [GetAnswer()]
* Tray/context menu now has version numbers for plugins.
* Changed auto reset code so it uses less cpu.


===#ChangeLog v2.6.2.96===
===#ChangeLog v2.6.2.96===
Added customizable sounds for cortana without ui command.
* Added customizable sounds for cortana without ui command.


===#ChangeLog v2.6.2.94===
===#ChangeLog v2.6.2.94===
Added New functions:
* Added New functions:
[SetVarDate("varName","date")]  
** [SetVarDate("varName","date")]  
date format = yyyy,MM,dd,hh,mm,ss
**: date format = yyyy,MM,dd,hh,mm,ss
[SetVarDate("varName","value","date")]  
** [SetVarDate("varName","value","date")]  
date format = yyyy,MM,dd,hh,mm,ss
**: date format = yyyy,MM,dd,hh,mm,ss


===#ChangeLog v2.6.2.93===
===#ChangeLog v2.6.2.93===
Added function:
* Added function:
[AutoSleep("EnableOrDisable","Timeout","PhraseOnExecute")] - not tested
** [AutoSleep("EnableOrDisable","Timeout","PhraseOnExecute")] - not tested
 
* Updated Function:
Changed Function:
** PlaySound function to be more stabilized
PlaySound function to be more stabilized
** Cortana function
Cortana function
** Added done sound on no GUI
Added done sound on no gui
Added more stability


Performance enhancement:
Removed sound on dragging the flyout menu
===#ChangeLog v2.6.2.91===
===#ChangeLog v2.6.2.91===
Plugins can now be loaded from tray icon..
* Plugins can now be loaded from tray icon..
Plugins config is saved in Customization\XML\PluginsConfig.xml
** Plugins config is saved in Customization\XML\PluginsConfig.xml


===#ChangeLog v2.6.2.88===
===#ChangeLog v2.6.2.88===
Added function:
* Added function:
[GetPrevious("var name")] or [GetPreviousVar("var name")]
** [GetPrevious("var name")] or [GetPreviousVar("var name")]


===#ChangeLog v2.6.2.87===
===#ChangeLog v2.6.2.87===
Added functions:
* Added functions:
[Set("varName","varValue","resetTime","resetValue")]
** [Set("varName","varValue","resetTime","resetValue")]
Sample:
*** Sample:
[Set("Details","NewsDescription","30","")]
**** [Set("Details","NewsDescription","30","")]
[IsEmpty("StringToCheck")]","Return this string if StringToCheck IsEmpty")]
**** [IsEmpty("StringToCheck")]","Return this string if StringToCheck IsEmpty")]
Sample:
*** Sample:
[IsEmpty("[Get("[Get("Details")]")]","Details for what, sir?")]
**** [IsEmpty("[Get("[Get("Details")]")]","Details for what, sir?")]
Return data from a variable that may exist and speak it, else return "Details for what, sir?"
**** Return data from a variable that may exist and speak it, else return "Details for what, sir?"
[Remove("varName")] or [RemoveVar("varName")]
** [Remove("varName")] or [RemoveVar("varName")]
[GetDateTime("varName","DateTimeFormat")] or [GetVarDateTime…]
** [GetDateTime("varName","DateTimeFormat")] or [GetVarDateTime…]
Sample:
*** Sample:
[GetDateTime("Details","dd/MM/yyyy")]
**** [GetDateTime("Details","dd/MM/yyyy")]
[GetDateTime("Details","HH:mm")]
**** [GetDateTime("Details","HH:mm")]
[IndexOf("string","string to find")]
** [IndexOf("string","string to find")]
[LastIndexOf("string","string to find")]
** [LastIndexOf("string","string to find")]
Set/Get functions updated
* Updated Functions:
Set function now updates DateTime and PreviousValue values.
** Set/Get functions updated
Get doesn't not error anymore when variable is not found.
** Set function now updates DateTime and PreviousValue values.
** Get doesn't not error anymore when variable is not found.


===#ChangeLog v2.6.2.81===
===#ChangeLog v2.6.2.81===
Fixed db loading issues.
* Fixed db loading issues.
Added a way to auto fix db connection issues.
* Added a way to auto fix db connection issues.
Exposed SpeechSynth.SpeechPrompts so other apps/plugins can figure out if LINKS is speaking.
* Exposed SpeechSynth.SpeechPrompts so other apps/plugins can figure out if LINKS is speaking.


===#ChangeLog v2.6.2.76===
===#ChangeLog v2.6.2.76===
Put function added
* Function Added:
[LINKS.LHttp.Put("JSON","URI")]
** [LINKS.LHttp.Put("JSON","URI")]
[LINKS.LHttp.Put("{"on":true}","<nowiki>http://huebridge/api/lz3nFIcGOelQlsxsDJYqrXGuxivjFmWswZ9fIGcw/lights/1/state</nowiki>")]
** [LINKS.LHttp.Put("{"on":true}","<nowiki>http://huebridge/api/lz3nFIcGOelQlsxsDJYqrXGuxivjFmWswZ9fIGcw/lights/1/state</nowiki>")]
Changed default settings
* Changed default settings
Made PersistedBackgroundAdaptation off by default
** Made PersistedBackgroundAdaptation off by default
Moved music function to "Initial checks completed"
** Moved music function to "Initial checks completed"
Disabled push to talk check box
** Disabled push to talk check box


===#ChangeLog v2.6.2.74===
===#ChangeLog v2.6.2.74===
Play/pause/stop music/video, show/hide media player commands updated.
* Play/pause/stop music/video, show/hide media player commands updated.
Show/hide should now work with any media player selected in settings.
* Show/hide should now work with any media player selected in settings.
Play video should now play a random video.
* Play video should now play a random video.


===#ChangeLog v2.6.2.73===
===#ChangeLog v2.6.2.73===
Plugins now loads after everything else is loaded to make sure nothing crashes while it loads new assemblies.
* Plugins now loads after everything else is loaded to make sure nothing crashes while it loads new assemblies.
Smoother startup animation.
* Smoother startup animation.
Added plugins OnDispose support.
* Added plugins OnDispose support.
This method is called from all plugins before LINKS exits.
** This method is called from all plugins before LINKS exits.
Allowed case insensitive for built in functions.
* Allowed case insensitive for built in functions.
Replies back when asked to check update.
* Replies back when asked to check update.
More stable webserver initialization.
* More stable webserver initialization.


===#ChangeLog v2.6.2.71===
===#ChangeLog v2.6.2.71===
Allows to run async functions, first async web function will be the uAuth2 function...
* Allows to run async functions, first async web function will be the uAuth2 function...
New default function added: "close without confirmation" (add it manually in default commands)
* New default function added: "close without confirmation" (add it manually in default commands)


===#ChangeLog v2.6.2.70===
===#ChangeLog v2.6.2.70===
Bug fix for functions.  
* Bug fix for functions.  
\\ was not allowed in beginning of any parameter. Fixed.
** \\ was not allowed in beginning of any parameter. Fixed.


===#ChangeLog v2.6.2.68===
===#ChangeLog v2.6.2.68===
Enabled position saving for main control center.
* Enabled position saving for main control center.


===#ChangeLog v2.6.2.67===
===#ChangeLog v2.6.2.67===
Some templates updated so plugins can access them.
* Some UI templates updated so plugins can access them.


===#ChangeLog v2.6.2.65===
===#ChangeLog v2.6.2.65===
New function [SayAs("data","ContentType")]
* Added Function:
This function is only for speech (obviously)
* [SayAs("data","ContentType")]
See this for more info on ContentType  
** This function is only for speech (obviously)
Tested:
** See this for more info on ContentType  
localhost:54657/?action=[Speak("The phone number is [SayAs("18001239874","Telephone")]")]&key=ABC1234
** Sample:
*** http<nowiki/>://localhost:54657/?action=[Speak("The phone number is [SayAs("18001239874","Telephone")]")]&key=ABC1234


===#ChangeLog v2.6.2.64===
===#ChangeLog v2.6.2.64===
All UpdateReached events updated to fix multiple events issues.
* All UpdateReached events updated to fix multiple recognition events issues.


===#ChangeLog v2.6.2.61===
===#ChangeLog v2.6.2.61===
InitReport will now be written if audio error occurs.
* InitReport will now be written if audio error occurs.
Tray icon is now only clickable when LINKS is online and ready.
* Tray icon is now only clickable when LINKS is online and ready.
Each db command now starts with open and end with close connection, may help db issues.
* Each db command now starts with open and end with close connection, may help db issues.


===#ChangeLog v2.6.2.58===
===#ChangeLog v2.6.2.58===
Error log will now be posted in event viewer.
* Error log will now be posted in event viewer if LINKS is started as Administrator.


===#ChangeLog v2.6.2.55===
===#ChangeLog v2.6.2.55===
Might fix issue with DB connection bug when changing profiles while mic is on.
* Might fix issue with DB connection bug when changing profiles while mic is on.
Test db performance issues including:
* Test db performance issues including:
Calling commands from different sections and changing profile then calling more commands.
** Calling commands from different sections and changing profile then calling more commands.
Changing profiles by voice vs change profile with UI.
** Changing profiles by voice vs change profile with UI.


===#ChangeLog v2.6.2.52===
===#ChangeLog v2.6.2.52===
Line 154: Line 436:


===#ChangeLog v2.6.2.51===
===#ChangeLog v2.6.2.51===
Fixes zunair.rocks/dashboard issue for fetching commands
* Fixes zunair.rocks/dashboard issue for fetching commands
[EmulateSpeech("any command")]
* [EmulateSpeech("any command")]
This should work on dynamic commands
** This should work on dynamic commands


===#ChangeLog v2.6.2.50===
===#ChangeLog v2.6.2.50===
[TextToWave("phrase","voice","volume",'rate","filename","getBase64")]
* Added Functions:
[TextToWave("wave to base 64","","",'","","true")]
** [TextToWave("phrase","voice","volume",'rate","filename","getBase64")]
Speech code updated to fix a start of voice change/volume bug (need Kim and Dalton to make sure that voice still works without any error)
** [TextToWave("wave to base 64","","",'","","true")]
* Speech code updated to fix a start of voice change/volume bug.


===#ChangeLog v2.6.2.49===
===#ChangeLog v2.6.2.49===
[TextToWave("phrase","voice","volume","rate","filename")]
* [TextToWave("phrase","voice","volume","rate","filename")]
Voice, Volume, Rate is same as SetTaskEx arguments/parameters.
** Voice, Volume, Rate is same as SetTaskEx arguments/parameters.
Tested:
** Sample:
localhost:54657/?action=[TextToWave("This is a test","","","","")]&key=ABC1234
*** http:<nowiki/>//localhost:54657/?action=[TextToWave("This is a test","","","","")]&key=ABC1234
It will make a wav file in LINKS\Customization\Speech\temp.wav
***: It will make a wav file in LINKS\Customization\Speech\temp.wav
We can put file name or full path in last parameter if needed
*** We can put file name or full path in last parameter if needed


===#ChangeLog v2.6.2.48===
===#ChangeLog v2.6.2.48===
[RemoveTask("name")] - can be used to delete task created by SetTaskEx
* Added Function:
Updated tasks so each task is checked every second - note any performance issues like cpu usage.
** [RemoveTask("name")]
*** Deletes task created by SetTaskEx
* Updated tasks so each task is checked every second
 
===#ChangeLog v2.6.2.47===
===#ChangeLog v2.6.2.47===
tested:
* Functions:
** [GetXPathValue("XML xPath")]
*** Sample:
**** http:<nowiki/>//localhost:54657/?action=[GetXPathValue("G:\...\jarvisWPF.vshost.exe.config","/configuration/userSettings/jarvisWPF.Properties.Settings/setting{@name%3D"searchEngine"}")]&key=ABC1234&output=response
*** Take a look at [http://www.freeformatter.com/xpath-tester.html FreeFormatter.com] might be able to use all syntax from there... just replace any [...] square brackets with {...} curly braces and encode = and & characters
** [GetAnswer("","","","","","","")]
*** Sample:
**** http:<nowiki/>//localhost:54657/?action=[GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","show")]&key=ABC1234&output=response


http:<nowiki/>//localhost:54657/?action=[GetXPathValue("G:\...\jarvisWPF.vshost.exe.config","/configuration/userSettings/jarvisWPF.Properties.Settings/setting{@name%3D"searchEngine"}")]&key=ABC1234&output=response
===#ChangeLog v2.6.2.46===
Take a look at http:<nowiki/>//www.freeformatter.com/xpath-tester.html might be able to use all syntax from there... just replace any square [...] brackets with {...} and encode = and & characters
* [GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","ShowIfItsNegativeOrPositive")]
 
* [GetXPathValue("xmlFilePath","xPath")]
http:<nowiki/>//localhost:54657/?action=[GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","show")]&key=ABC1234&output=response


===#ChangeLog v2.6.2.46===
[GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","ShowIfItsNegativeOrPositive")]
[GetXPathValue("xmlFilePath","xPath")]
===#ChangeLog v2.6.2.44===
===#ChangeLog v2.6.2.44===
new command syntax for voice change per command
* New command syntax for voice change per command
 
** Sample:
Grammar: <!--Say 'LINKS listen to (anything you like to say)'-->{ai=test_ainame} listen to {d=test_dictation}  
*** Grammar: <!--Say 'LINKS listen to (anything you like to say)'-->{ai=test_ainame} listen to {d=test_dictation}  
Response:[VoiceName="{{<nowiki/>ai}}"]I heard {d}. I am {ai} and my voice is set to {{<nowiki/>ai}}
*** Response:[VoiceName="{{<nowiki/>ai}}"]I heard {d}. I am {ai} and my voice is set to {{<nowiki/>ai}}
 
** In any response we can now add the following to change voice properties:
in any response we can now add the following to change voice properties:
*** [VoiceName="Exact Voice Name"]
[VoiceName="..."]
*** [VoiceVolume="0-7 or Case sensitive value: NotSet, Default, ExtraLoud, ExtraSoft, Loud, Medium, Silent, Soft"]
[VoiceRate="..."]
*** [VoiceRate="0-5 or Case sensitive value: NotSet, ExtraFast, ExtraSlow, Fast, Medium, Slow"]
[VoiceEmphasis="..."]
*** [VoiceEmphasis="0-4 or Case sensitive value: NotSet, Strong, Moderate, None, Reduced"]
[VolumeType="..."]
*** [VolumeType="System or Voice"]
[SpeechDelay="..."]
*** [SpeechDelay="0.1-100"]
 
* Updated dictation code
Updated dictation code.. need testing to make sure dictation get parsed correctly in action n response...
** Should fix the issue where AI name was spoken with the dictation.
should fix the issue where ai name was spoken with the dictation.


===#ChangeLog v2.6.2.37:===
===#ChangeLog v2.6.2.37:===
Updated update functions.
* Updated update functions.
No more update check before startup.
* No more update check before startup.
Update will be checked after startup.
* Update will be checked after startup.
Will notify when update is completed.
* Will notify when update is completed.
Autoupdate can be disabled from xml by changing UpdateOnStartup to false
* AutoUpdate can be disabled from xml by changing UpdateOnStartup to false
Added LINKSSharedDirectory for scripts and wordlists
* Added LINKSSharedDirectory for scripts and WordLists
Can be changed from xml
** Can be changed from xml
When entering dir path do not end path with slash.
** When entering dir path do not end path with slash.


===#ChangeLog v2.6.2.31:===
===#ChangeLog v2.6.2.31:===
New Functions: [GetAnswer("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")]
* Added Functions:
"QuestionByAI" = question asked by AI
** [GetAnswer("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")]
"WordListTextFileName" = WordList to use for positive and negative grammar and results
*** "QuestionByAI" = question asked by AI
"PositiveGrammarColumnNameOrNumber" = WordList column name or number of positive grammar
*** "WordListTextFileName" = WordList to use for positive and negative grammar and results
"PositiveResultColumnNameOrNumber" = WordList column name or number of results to show if positive grammar is recognized
*** "PositiveGrammarColumnNameOrNumber" = WordList column name or number of positive grammar
"NegativeGrammarColumnNameOrNumber" = WordList column name or number of negative grammar
*** "PositiveResultColumnNameOrNumber" = WordList column name or number of results to show if positive grammar is recognized
"NegativeResultColumnNameOrNumber" = WordList column name or number of results to show if negative grammar is recognized
*** "NegativeGrammarColumnNameOrNumber" = WordList column name or number of negative grammar
"ListeningTimeout" = stops listening for answer after defined milliseconds
*** "NegativeResultColumnNameOrNumber" = WordList column name or number of results to show if negative grammar is recognized
"ShowIfItsNegativeOrPositive" = show/hide + or - symbol based on recognized data
*** "ListeningTimeout" = stops listening for answer after defined milliseconds
Note: We don’t have to use WordList.
*** "ShowIfItsNegativeOrPositive" = show/hide + or - symbol based on recognized data
 
*** Note: We don’t have to use WordList.
Example:
*** Example:
Command: Say a number
**** Command: Say a number
Response:[GetAnswer("which number?","test_nums.txt","firstAnswer","firstReslult","secondAnswer","secondResult","3000","Show")]
**** Response:[GetAnswer("which number?","test_nums.txt","firstAnswer","firstReslult","secondAnswer","secondResult","3000","Show")]
Sample word list:
**** Sample word list:
firstAnswer firstReslult secondAnswer secondResult
::::: {| class="wikitable"
one number 1 negative one minus 1
| '''firstAnswer''' || '''firstReslult''' || '''secondAnswer''' || '''secondResult'''
two number 2 negative two minus 2
|-
three number 3 negative three minus 3
| one || number 1 || negative one || minus 1
four number 4 negative four minus 4
|-
Note: We can use any column for result or answer(grammar)
| two || number 2 || negative two || minus 2
Make sure PositiveGrammar does not contain any words from NegativeGrammar and vice-versa.
|-
 
| three || number 3 || negative three || minus 3
Sample positive answer result: One = +number 1
|-
 
| four || number 4 || negative four || minus 4
[CallCommandEx("PositiveOrNagativeResponse","PositiveCommand","NegativeCommand")]
|}
Positive or Negative command will be called based on PositiveOrNagativeResponse.
::::: Note: We can use any column for result or answer(grammar)
If PositiveOrNagativeResponse starts with a + sign, PositiveCommand will be called.
:::* Make sure PositiveGrammar does not contain any words from NegativeGrammar and vice-versa.
If PositiveOrNagativeResponse starts with a - sign, NegativeCommand will be called.
:::* Sample positive answer result: One = +number 1
{{!<nowiki/>Result!}} keyword can be used in PositiveCommand and NegativeCommand arguments to replace using PositiveOrNagativeResponse  
:* [CallCommandEx("PositiveOrNagativeResponse","PositiveCommand","NegativeCommand")]
 
:** Positive or Negative command will be called based on PositiveOrNagativeResponse.
Example:
:** If PositiveOrNagativeResponse starts with a + sign, PositiveCommand will be called.
Command: Hey LINKS
:** If PositiveOrNagativeResponse starts with a - sign, NegativeCommand will be called.
Response: [CallCommandEx("+Hello","{{!<nowiki/>Result!}}","{{!<nowiki/>Result!}}")]
:** {{!<nowiki/>Result!}} keyword can be used in PositiveCommand and NegativeCommand arguments to replace using PositiveOrNagativeResponse  
In this case Action will be converted to [CallCommandEx("+Hello","Hello","{{!<nowiki/>Result!}}")]
:** Example:
[SubString("String","startIndex","endIndex")]
:*** Command: Hey LINKS
Example:
:*** Response: [CallCommandEx("+Hello","{{!<nowiki/>Result!}}","{{!<nowiki/>Result!}}")]
Command: Remove first char of the string
:*** In this case Action will be converted to [CallCommandEx("+Hello","Hello","{{!<nowiki/>Result!}}")]
Response: [SubString("+Test","1","")]
:* [SubString("String","startIndex","endIndex")]
This will output "Test"
:** Example:
:*** Command: Remove first char of the string
:*** Response: [SubString("+Test","1","")]
:*** This will output "Test"


===#ChangeLog v2.6.2.26:===
===#ChangeLog v2.6.2.26:===
New function: [SetSpeechConfig("Elizabeth","100","-10")]
* New function:  
Name, Volume, Rate (-10 to 10)
** [SetSpeechConfig("Elizabeth","100","-10")]
Remember:
*** Name, Volume, Rate (-10 to 10)
There are 3 types of volumes:
*** Remember there are 3 types of volumes:
System Volume
**** System Volume
Base Voice Volume - set through GUI/SetVoice functions and XML
**** Base Voice Volume - set through GUI/SetVoice functions and XML
Phrase Voice Volume - default is Medium, not allowed change default. Can change per phrase using SpeakEx function.
**** Phrase Voice Volume - default is Medium, not allowed change default. Can change per phrase using SpeakEx function.
Some tests:
**** Some Examples:
SpeakEx with System Volume
***** SpeakEx with System Volume
localhost:54657/?action=[SpeakEx("Completed","","","","","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","","","","","system")]&key=ABC1234
localhost:54657/?action=[SpeakEx("Completed","","40","","","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","","40","","","system")]&key=ABC1234
localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","system")]&key=ABC1234
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","system")]&key=ABC1234
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","Fast","","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","Fast","","system")]&key=ABC1234
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","system")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","system")]&key=ABC1234
**** SpeakEx with Voice Volume
***** localhost:54657/?action=[SpeakEx("Completed","","","","","voice")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","","100","","","voice")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","voice")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","voice")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","100","Fast","","voice")]&key=ABC1234
***** localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","voice")]&key=ABC1234
** Sets default base volume for current voice
*** localhost:54657/?action=[SetSpeechVolume("20")]&key=ABC1234
** Sets default voice
*** localhost:54657/?action=[SetSpeechVoice("Elizabeth")]&key=ABC1234
** Sets base Volume and Rate for specific voice
*** localhost:54657/?action=[SetSpeechConfig("Elizabeth","100","-10")]&key=ABC1234
** Test after volume and rate change:
*** localhost:54657/?action=[SpeakEx("Completed","Elizabeth","20","ExtraFast","0","voice")]&key=ABC1234


SpeakEx with Voice Volume
===#ChangeLog v2.6.2.23:===
localhost:54657/?action=[SpeakEx("Completed","","","","","voice")]&key=ABC1234
* VoiceConfig.XML added
localhost:54657/?action=[SpeakEx("Completed","","100","","","voice")]&key=ABC1234
** Each voice volume will be saved separately.
localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","voice")]&key=ABC1234
* UI and SetVoice should update VocieConfig
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","voice")]&key=ABC1234
* SpeakEx("phrase","VoiceName","VoiceVolume","VoiceRate","SpeechDelay","VoiceVolumeOrSystemVolume")
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","100","Fast","","voice")]&key=ABC1234
** VoiceVolumeOrSystemVolume = voice or system
localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","voice")]&key=ABC1234
you can omit "voice" if you have to


Sets default base volume for current voice
localhost:54657/?action=[SetSpeechVolume("20")]&key=ABC1234
Sets default voice
localhost:54657/?action=[SetSpeechVoice("Elizabeth")]&key=ABC1234
Sets base Volume and Rate for specific voice
localhost:54657/?action=[SetSpeechConfig("Elizabeth","100","-10")]&key=ABC1234
Test after volume and rate change:
localhost:54657/?action=[SpeakEx("Completed","Elizabeth","20","ExtraFast","0","voice")]&key=ABC1234
===#ChangeLog v2.6.2.23: ===
===#ChangeLog v2.6.2.23: ===
VoiceConfig.XML added
* Task xml is written asyc for better performance.
Each voice volume will be saved separately.
* Added some error control in webservice functions
UI and SetVoice should update VocieConfig
* New Default function:
Lots of voice configs to test.
** "stop current voice"
SpeakEx(string phrase, string VoiceName, string VoiceVolume, string VoiceRate, string SpeechDelay, string VoiceVolumeOrSystemVolume = "voice")
* New Functions:
===#ChangeLog v2.6.2.23: ===
** [StopVoiceByName("VoiceName","ResponseOnSuccess")]
Task xml is written asyc for better performance.
** [StopVoiceByIdentifier ("PhraseIdentifier","ResponseOnSuccess")]
Addes some error control in webservice functions
*** PhraseIdentifier is only set in tasks atm - uses tasks name.
New Default function:
"stop current voice"
New Functions:
StopVoiceByName("VoiceName","ResponseOnSuccess")
StopVoiceByIdentifier ("PhraseIdentifier","ResponseOnSuccess")
PhraseIdentifier is only set in tasks atm - uses tasks name.
Following strings or nums can be used to set voice parameters for any speak/task function.
Volume:
Silent = 0,
ExtraSoft <= 20,
Soft <= 4,
Medium <= 60,
Loud <= 80,
ExtraLoud <= 100 (default)
Leave it blank for default
 
Rate:
NotSet = 0
ExtraFast = 1
Fast = 2
Medium = 3 (default)
Slow = 4
ExtraSlow = 5
Leave it blank for default


===#ChangeLog v2.6.2.22:===
===#ChangeLog v2.6.2.22:===
Line 328: Line 598:
* Updated Function:
* Updated Function:
** [SetSpeechVolume("volume")]
** [SetSpeechVolume("volume")]
** [SetTaskEx("name","datetime","speechBefore","speechAfter","speechFailed","voice","volume","runAsShellCommand","repeat", rate = "", VoiceVolumeOrSystemVolume = "voice")]
** [SetTaskEx("name","datetime","speechBefore","speechAfter","speechFailed","voice","volume","runAsShellCommand","repeat","rate","VoiceVolumeOrSystemVolume")]


=== #ChangeLog v2.6.2.20: ===
=== #ChangeLog v2.6.2.20: ===

Latest revision as of 05:48, 1 December 2018

Here you can find changes done around every major dev beta update and that are now available in public beta.

#ChangeLog v2.6.3.104

  • Added a check for Ivona vendor "IVONA Software Sp. z o.o." which caused crashing.
    • This vendor is not compatible with all the speech functionalities. Like inline volume\rate control.

#ChangeLog v2.6.3.103

  • Added function:
    • [GetWordColumn("WordList","ColumnNameOrNumber")]

#ChangeLog v2.6.3.102

  • Added function:
    • [SetWord("test_greetings","good day","converted value","Good day")]
      • Example: http://localhost:54657/?action=[SetWord("test_greetings","good day","converted value","Good day")]&key=ABC1234
      • It takes existing wordlist, uses headers to distinguish which column to use.
      • Allows you to add or update words.

#ChangeLog v2.6.3.101

  • Added functions:
    • [CurrentWindowState]
    • [IsVisible]
    • [Show]
    • [Hide]

#ChangeLog v2.6.3.100

  • Added functions:
    • [GetSpokenPhraseFromGRXMLResult()]
      • Works after we call [GetRecognizedResult(...)]
    • [GetTagFromGRXMLResult("TagName")]
      • Works after we call [GetRecognizedResult(...)]
    • [Clear("FunctionOrString")]
      • Clears return value from function

#ChangeLog v2.6.3.99

  • Updated function:
    • [GetRecognizedResult(...)]
      • Updated so it stops listener before getting the results and start listener afterwards.
  • [GetProperty("name")]
    • Fixed
  1. ChangeLog v2.6.3.98

Added function: [GetProperty("name")] Updated function [SetProperty("name","value")] So it saves the properties in xml Sound effects function updated also, may resolve Cortana issue.

#ChangeLog v2.6.3.97

  • Added properties:
    • CreateVolumeGrammar
      • Can be set to false so default grammar is not made
      • Example: [SetProperty("CreateVolumeGrammar","false")]
  • CreateSwitchProfileGrammar
      • Can be set to false so default grammar is not made
      • Example: [SetProperty("CreateSwitchProfileGrammar","false")]
  • Updated function:
    • [SetProperty("name","value")]
      • This should be able to set any LINKS properties that is stored in InternalStrings or config xml
  • Added function:

#ChangeLog v2.6.3.96

  • Tray menu all organized
  • New tray option to keep LINKS on top
  • Bug fix for UserVars

#ChangeLog v2.6.3.93

  • Functions added:
    • [PlaySoundSync("sound effect")]
    • [PlayWavFileSync("full wav file path")]
    • [strike]Some more tool tips in internal functions under tray menu[/strike]

#ChangeLog v2.6.3.87

  • Updated tray menu for plugins.
    • Allows user to:
      • Run functions.
      • Remove plugins.

#ChangeLog v2.6.3.86

  • Added Function:
    • [SetSaveRejectedSpeech("true/false")] ' enabled by default
    • [Get_LastRejectedSpeechWavePath] - we may have to update this so filename removes any special characters.
      • Use this to get path to last rejected speech wav file path
  • Fixed:
    • Shell -con speech response issue.

#ChangeLog v2.6.3.85

  • Added cache control in WebRequest, so nothing is cached on client.

#ChangeLog v2.6.3.84

  • Added Function:
    • [SetRecogProfile("ProfileName")] - needs testing

#ChangeLog v2.6.3.83

  • Updated functions:
    • [GetRecognizedResult(…)]
      • Added error control

#ChangeLog v2.6.3.80

  • Bug fix - For response with wordlist variable
  • Updated Function:
    • [SetClipboardText(...)] so it does not return the clipboard
  • Changed "do not listen while you speak" functionality so it uses UserVoiceThreshold instead of disabling grammar on the fly that may have caused GetAnswers to not work properly.

#ChangeLog v2.6.3.79

  • A bug fix - clears any wandering speech prompts after 5 seconds when sync Speak is called multiple times in succession

#ChangeLog v2.6.3.78

  • Updated functions:
    • [GetRecognizedResult(…)] to fix Invocation error (tested for error)
  • Updated command dup check for Default commands.
  • Bug fix - For action with wordlist variable
  • Updated functions:
    • [GetClipboardText(...)] so it does not return the clipboard
    • [GetRecognizedResult(…)] to fix Invocation error (not tested)

#ChangeLog v2.6.3.77

  • Added voice threshold option

#ChangeLog v2.6.3.73

  • Added UserVoiceThreshold - set at 12 by default, may need to change mic volume or change the threshold as you prefer.
    • See Debug window for more details when you speak - itll alow you to figure out the correct threshold for your mic level.
    • Threshold is basically how loud you speak, the code takes 5 loudest points in the voice then averages it out then check against UserVoiceThreshold.
  • Added function:
    • [SerUserVoiceThreshold("Threshold as decimal")] - will be renamed to [SetUserVoiceThreshold(..)] in next update.

#ChangeLog v2.6.3.69

  • Added function:
    • [GetRecognizedResult("GrammarXML file","RuleName")]
      • Uses grxml file from GrXML folder, return recognized speech.
      • Example: [GetRecognizedResult("test_en-US", "Confirmation")]

#ChangeLog v2.6.3.67

  • Async tasks from plugins can now be called from LINKS ( this was an issue - it was calling the task from plugin and getting stuck on it)

#ChangeLog 2.6.3.64

  • Added Function:
    • [IsSpeaking]
    • [GetVersion]
    • [SetDefaultConfidence("0-1")]

#ChangeLog Unknown

  • [Audio("file path")] in any response
    • if response is like this:
    • sound of bird [Audio("bird")], sound of wind [Audio("wind")]
    • It will be all said and played in synchronously.
    • bird.wav and wind.wav has to be in soundeffects folder or full path or a url will be needed

#ChangeLog 2.6.3.58

  • Added a function:
    • [SetDefaultConfidence("confidence")]
      • Example: [SetDefaultConfidence(".5")]

#ChangeLog 2.6.3.57

  • Added a function [GetRecognizedSpeech]
  • Saves recognized command and returns path to the wav file.

#ChangeLog v2.6.3.56

  • Can handle one WordList grammar.

#ChangeLog v2.6.3.55

  • Added functions:
    • [AddCommand("shell/web/default","command/grammar","response","action","profile","phrase on success")]
    • [AddCommand("social","command/grammar","response","","profile","phrase on success")]

#ChangeLog v2.6.3.54

  • Updated Settings window - for theming

#ChangeLog 2.6.3.53

  • Updated [AddCommands("full path")] function
    • Checks for existing commands, does not adds duplicates.
    • Path is not case sensitive anymore.
  • Added [AddCommands("full path","phrase")]
    • Speaks phrase if command is added.
  • Fixed sound settings bg issue.

#ChangeLog 2.6.3.51

  • Added override=true in speak.html

#ChangeLog 2.6.3.50

#ChangeLog 2.6.3.49

  • Added updating status in tray icon
  • Added notification popup when update is completed.
  • AppUpdate strings are now available in InternalStrings.xml

#ChangeLog v2.6.3.46

  • Added request=override option for web requests. See change log .2.6.3.50

#ChangeLog 2.6.3.45

  • PTT on load is back, please let me know if it works better or not
  • Test re-pluging microphone, and maybe change default mic - see if it picks up the mic without restarting.

#ChangeLog 2.6.3.44

  • Added PersistedLanguageModelAdaptation and turned off all adaptations

#ChangeLog 2.6.3.40

  • Main window working with colors completely

#ChangeLog 2.6.3.39

  • Added theme customization

#ChangeLog v2.6.3.35

  • Fixed speech rate when using setVoice function.

#ChangeLog v2.6.3.31

  • Added speech rate slider in settings.
  • Fixed loading of correct volume and rate based on config on startup.

#ChangeLog v2.6.3.30

  • Fixed speech folder error on startup
  • Fixed shutdown so it closes LINKS completely.

#ChangeLog v2.6.3.24 (Latest Public Beta as of 02/21/2017)

  • Fixed issue with dictation in shell.action field.
  • Added functions:
    • [MoveThisWindow("ScreenNumber","PhraseOnSuccess","PhraseOnError")]
    • [MoveWindowByCaption("WinCaption","ScreenNumber","PhraseOnSuccess","PhraseOnError")]
    • [CloseWindowByCaption ("WinCaption","PhraseOnSuccess","PhraseOnError")]
    • [ActivateWindowByCaption("WinCaption","PhraseOnSuccess","PhraseOnError")]
    • [GetCaption("PhraseOnError")]
    • [SetWindowTransparency("Percent","PhraseOnError")]
    • [SetWindowTransparencyByCaption("WinCaption","Percent","PhraseOnError")]
    • [MoveWindowEx("WinCaption","WinLeft","WinTop","WinWidth","WinHeight","PhraseOnSuccess","PhraseOnError")]
    • [MoveThisWindowEx("WinCaption","WinLeft","WinTop","WinWidth","WinHeight","PhraseOnSuccess","PhraseOnError")]

#ChangeLog v2.6.3.18

  • Added functions:
    • [GetClipboardText()]
    • [Clip()]
    • [Type("str","sendkeys"] or [Type("str","winforms"]

#ChangeLog v2.6.3.17

  • Functions added:
    • [LoadProfile("profile name")]
    • [GetSpeech()] - use with output=response and request=DISABLE_RECURSE
      • Same as [GetLastSpeech()]
    • [GetClipboardText()]
    • [StreamIt("full file path")] - works with mp3
    • [SerialWrite("LED.ON","SerialConfig_test")]
    • [SerialReadLine("timeout in ms","SerialConfig_test")] (not stable)

#ChangeLog v2.6.3.15

  • Functions Added:
    • [GetLastSpeech()]
      • Enables speaking through browser
      • Run in webrequest with DISABLE_RECURSE action=[GetLastSpeech()]&request=DISABLE_RECURSE
      • Use in chrome only/maybe edge
    • [GetLastSpeechAsBase64()]
      • gets last speech as base64
    • [GetNextWaveFilePath("")]
      • file name to be used for other wave files.
      • This allows you to save custom wave file with a specific name in Customization\Speech\ that would be played by GetLastSpeech() function.
  • Added speech wav files in Customize\Speech folder
  • All async speech will be stored there for the session
  • Added 4 default commands
    • enable auto updates
    • disable auto updates
    • enable saving speech
    • disable saving speech
    • Reverted cortana.dll to older version

#ChangeLog v2.6.3.11

  • Read this - fix for ;
  • AiIntro function - had a problem in GetWord function - fixed. - May affect GetAnswer function (possibly in better direction.)
  • Speak function updated - When invalid voice name is provided it should handle that a bit better/faster

#ChangeLog v2.6.3.8

  • Updated [VoiceName...] parsing when using -ret
  • Added Functions:
    • [GetActiveVoiceName()]
    • [GetCurrentVoiceOfSpokenPhrase()]
    • [GetDefaultVoiceVolume()]
    • [GetDefaultSystemVolume()]
    • [GetDefaultVoiceRate()]

#ChangeLog v2.6.3.6

  • Keyboard section updated.
  • Record button working again.
  • Syntax updated for keys.
  • List of Keys that are now used in keyboard section.
  • Added Mouse event commands.
    • {MOUSE.MOVE:X-Axis,Y-Axis}
    • {MOUSE.LEFTDOWN}
    • {MOUSE.LEFTUP}
    • {MOUSE.RIGHTDOWN}
    • {MOUSE.RIGHTUP}
    • {MOUSE.MIDDLEDOWN}
    • {MOUSE.MIDDLEUP}

#ChangeLog v2.6.3.3

  • Updated Functions:
    • [AutoSleep(...)]
    • [GetAnswer()]
  • Added Function:
    • [InitQuestion("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")] [GetAnswer()]
  • Tray/context menu now has version numbers for plugins.
  • Changed auto reset code so it uses less cpu.

#ChangeLog v2.6.2.96

  • Added customizable sounds for cortana without ui command.

#ChangeLog v2.6.2.94

  • Added New functions:
    • [SetVarDate("varName","date")]
      date format = yyyy,MM,dd,hh,mm,ss
    • [SetVarDate("varName","value","date")]
      date format = yyyy,MM,dd,hh,mm,ss

#ChangeLog v2.6.2.93

  • Added function:
    • [AutoSleep("EnableOrDisable","Timeout","PhraseOnExecute")] - not tested
  • Updated Function:
    • PlaySound function to be more stabilized
    • Cortana function
    • Added done sound on no GUI

#ChangeLog v2.6.2.91

  • Plugins can now be loaded from tray icon..
    • Plugins config is saved in Customization\XML\PluginsConfig.xml

#ChangeLog v2.6.2.88

  • Added function:
    • [GetPrevious("var name")] or [GetPreviousVar("var name")]

#ChangeLog v2.6.2.87

  • Added functions:
    • [Set("varName","varValue","resetTime","resetValue")]
      • Sample:
        • [Set("Details","NewsDescription","30","")]
        • [IsEmpty("StringToCheck")]","Return this string if StringToCheck IsEmpty")]
      • Sample:
        • [IsEmpty("[Get("[Get("Details")]")]","Details for what, sir?")]
        • Return data from a variable that may exist and speak it, else return "Details for what, sir?"
    • [Remove("varName")] or [RemoveVar("varName")]
    • [GetDateTime("varName","DateTimeFormat")] or [GetVarDateTime…]
      • Sample:
        • [GetDateTime("Details","dd/MM/yyyy")]
        • [GetDateTime("Details","HH:mm")]
    • [IndexOf("string","string to find")]
    • [LastIndexOf("string","string to find")]
  • Updated Functions:
    • Set/Get functions updated
    • Set function now updates DateTime and PreviousValue values.
    • Get doesn't not error anymore when variable is not found.

#ChangeLog v2.6.2.81

  • Fixed db loading issues.
  • Added a way to auto fix db connection issues.
  • Exposed SpeechSynth.SpeechPrompts so other apps/plugins can figure out if LINKS is speaking.

#ChangeLog v2.6.2.76

  • Function Added:
    • [LINKS.LHttp.Put("JSON","URI")]
    • [LINKS.LHttp.Put("{"on":true}","http://huebridge/api/lz3nFIcGOelQlsxsDJYqrXGuxivjFmWswZ9fIGcw/lights/1/state")]
  • Changed default settings
    • Made PersistedBackgroundAdaptation off by default
    • Moved music function to "Initial checks completed"
    • Disabled push to talk check box

#ChangeLog v2.6.2.74

  • Play/pause/stop music/video, show/hide media player commands updated.
  • Show/hide should now work with any media player selected in settings.
  • Play video should now play a random video.

#ChangeLog v2.6.2.73

  • Plugins now loads after everything else is loaded to make sure nothing crashes while it loads new assemblies.
  • Smoother startup animation.
  • Added plugins OnDispose support.
    • This method is called from all plugins before LINKS exits.
  • Allowed case insensitive for built in functions.
  • Replies back when asked to check update.
  • More stable webserver initialization.

#ChangeLog v2.6.2.71

  • Allows to run async functions, first async web function will be the uAuth2 function...
  • New default function added: "close without confirmation" (add it manually in default commands)

#ChangeLog v2.6.2.70

  • Bug fix for functions.
    • \\ was not allowed in beginning of any parameter. Fixed.

#ChangeLog v2.6.2.68

  • Enabled position saving for main control center.

#ChangeLog v2.6.2.67

  • Some UI templates updated so plugins can access them.

#ChangeLog v2.6.2.65

  • Added Function:
  • [SayAs("data","ContentType")]
    • This function is only for speech (obviously)
    • See this for more info on ContentType
    • Sample:
      • http://localhost:54657/?action=[Speak("The phone number is [SayAs("18001239874","Telephone")]")]&key=ABC1234

#ChangeLog v2.6.2.64

  • All UpdateReached events updated to fix multiple recognition events issues.

#ChangeLog v2.6.2.61

  • InitReport will now be written if audio error occurs.
  • Tray icon is now only clickable when LINKS is online and ready.
  • Each db command now starts with open and end with close connection, may help db issues.

#ChangeLog v2.6.2.58

  • Error log will now be posted in event viewer if LINKS is started as Administrator.

#ChangeLog v2.6.2.55

  • Might fix issue with DB connection bug when changing profiles while mic is on.
  • Test db performance issues including:
    • Calling commands from different sections and changing profile then calling more commands.
    • Changing profiles by voice vs change profile with UI.

#ChangeLog v2.6.2.52

  • Added Function:
    • [GetFile("FilePathOrUri","SaveAs")]
      • SaveAs is optional
      • Any file can now be downloaded. Might have a size limit.
      • Sample:
        • http://localhost:54657/?action=[GetFile("http://jarvis.ai-dot.net/test.txt","test.txt")]&key=ABC1234&output=response
    • [JsonToXML("FilePathOrUri","SaveAs")]
      • SaveAs is optional
      • Sample:
        • http://localhost:54657/?action=[JsonToXML("http://ai-dot.net/test_json.json","test_json.xml")]&key=ABC1234&output=response
    • [GetXPathValue("FilePathOrUri","XPath")]
      • Sample:
        • http://localhost:54657/?action=[GetXPathValue("http://ai-dot.net/test_json.json","/root/glossary/title")]&key=ABC1234&output=response

#ChangeLog v2.6.2.51

  • Fixes zunair.rocks/dashboard issue for fetching commands
  • [EmulateSpeech("any command")]
    • This should work on dynamic commands

#ChangeLog v2.6.2.50

  • Added Functions:
    • [TextToWave("phrase","voice","volume",'rate","filename","getBase64")]
    • [TextToWave("wave to base 64","","",'","","true")]
  • Speech code updated to fix a start of voice change/volume bug.

#ChangeLog v2.6.2.49

  • [TextToWave("phrase","voice","volume","rate","filename")]
    • Voice, Volume, Rate is same as SetTaskEx arguments/parameters.
    • Sample:
      • http://localhost:54657/?action=[TextToWave("This is a test","","","","")]&key=ABC1234
        It will make a wav file in LINKS\Customization\Speech\temp.wav
      • We can put file name or full path in last parameter if needed

#ChangeLog v2.6.2.48

  • Added Function:
    • [RemoveTask("name")]
      • Deletes task created by SetTaskEx
  • Updated tasks so each task is checked every second

#ChangeLog v2.6.2.47

  • Functions:
    • [GetXPathValue("XML xPath")]
      • Sample:
        • http://localhost:54657/?action=[GetXPathValue("G:\...\jarvisWPF.vshost.exe.config","/configuration/userSettings/jarvisWPF.Properties.Settings/setting{@name%3D"searchEngine"}")]&key=ABC1234&output=response
      • Take a look at FreeFormatter.com might be able to use all syntax from there... just replace any [...] square brackets with {...} curly braces and encode = and & characters
    • [GetAnswer("","","","","","","")]
      • Sample:
        • http://localhost:54657/?action=[GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","show")]&key=ABC1234&output=response

#ChangeLog v2.6.2.46

  • [GetAnswer("Do you want me to turn on x light?","yes;on;lights","Lights On","off;lights","Lights Off","5000","ShowIfItsNegativeOrPositive")]
  • [GetXPathValue("xmlFilePath","xPath")]

#ChangeLog v2.6.2.44

  • New command syntax for voice change per command
    • Sample:
      • Grammar: {ai=test_ainame} listen to {d=test_dictation}
      • Response:[VoiceName="{{ai}}"]I heard {d}. I am {ai} and my voice is set to {{ai}}
    • In any response we can now add the following to change voice properties:
      • [VoiceName="Exact Voice Name"]
      • [VoiceVolume="0-7 or Case sensitive value: NotSet, Default, ExtraLoud, ExtraSoft, Loud, Medium, Silent, Soft"]
      • [VoiceRate="0-5 or Case sensitive value: NotSet, ExtraFast, ExtraSlow, Fast, Medium, Slow"]
      • [VoiceEmphasis="0-4 or Case sensitive value: NotSet, Strong, Moderate, None, Reduced"]
      • [VolumeType="System or Voice"]
      • [SpeechDelay="0.1-100"]
  • Updated dictation code
    • Should fix the issue where AI name was spoken with the dictation.

#ChangeLog v2.6.2.37:

  • Updated update functions.
  • No more update check before startup.
  • Update will be checked after startup.
  • Will notify when update is completed.
  • AutoUpdate can be disabled from xml by changing UpdateOnStartup to false
  • Added LINKSSharedDirectory for scripts and WordLists
    • Can be changed from xml
    • When entering dir path do not end path with slash.

#ChangeLog v2.6.2.31:

  • Added Functions:
    • [GetAnswer("QuestionByAI","WordListTextFileName","PositiveGrammarColumnNameOrNumber","PositiveResultColumnNameOrNumber","NegativeGrammarColumnNameOrNumber","NegativeResultColumnNameOrNumber","ListeningTimeout","ShowIfItsNegativeOrPositive")]
      • "QuestionByAI" = question asked by AI
      • "WordListTextFileName" = WordList to use for positive and negative grammar and results
      • "PositiveGrammarColumnNameOrNumber" = WordList column name or number of positive grammar
      • "PositiveResultColumnNameOrNumber" = WordList column name or number of results to show if positive grammar is recognized
      • "NegativeGrammarColumnNameOrNumber" = WordList column name or number of negative grammar
      • "NegativeResultColumnNameOrNumber" = WordList column name or number of results to show if negative grammar is recognized
      • "ListeningTimeout" = stops listening for answer after defined milliseconds
      • "ShowIfItsNegativeOrPositive" = show/hide + or - symbol based on recognized data
      • Note: We don’t have to use WordList.
      • Example:
        • Command: Say a number
        • Response:[GetAnswer("which number?","test_nums.txt","firstAnswer","firstReslult","secondAnswer","secondResult","3000","Show")]
        • Sample word list:
firstAnswer firstReslult secondAnswer secondResult
one number 1 negative one minus 1
two number 2 negative two minus 2
three number 3 negative three minus 3
four number 4 negative four minus 4
Note: We can use any column for result or answer(grammar)
  • Make sure PositiveGrammar does not contain any words from NegativeGrammar and vice-versa.
  • Sample positive answer result: One = +number 1
  • [CallCommandEx("PositiveOrNagativeResponse","PositiveCommand","NegativeCommand")]
    • Positive or Negative command will be called based on PositiveOrNagativeResponse.
    • If PositiveOrNagativeResponse starts with a + sign, PositiveCommand will be called.
    • If PositiveOrNagativeResponse starts with a - sign, NegativeCommand will be called.
    • {{!Result!}} keyword can be used in PositiveCommand and NegativeCommand arguments to replace using PositiveOrNagativeResponse
    • Example:
      • Command: Hey LINKS
      • Response: [CallCommandEx("+Hello","{{!Result!}}","{{!Result!}}")]
      • In this case Action will be converted to [CallCommandEx("+Hello","Hello","{{!Result!}}")]
  • [SubString("String","startIndex","endIndex")]
    • Example:
      • Command: Remove first char of the string
      • Response: [SubString("+Test","1","")]
      • This will output "Test"

#ChangeLog v2.6.2.26:

  • New function:
    • [SetSpeechConfig("Elizabeth","100","-10")]
      • Name, Volume, Rate (-10 to 10)
      • Remember there are 3 types of volumes:
        • System Volume
        • Base Voice Volume - set through GUI/SetVoice functions and XML
        • Phrase Voice Volume - default is Medium, not allowed change default. Can change per phrase using SpeakEx function.
        • Some Examples:
          • SpeakEx with System Volume
          • localhost:54657/?action=[SpeakEx("Completed","","","","","system")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","","40","","","system")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","system")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","system")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","Fast","","system")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","system")]&key=ABC1234
        • SpeakEx with Voice Volume
          • localhost:54657/?action=[SpeakEx("Completed","","","","","voice")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","","100","","","voice")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft Zira Desktop","","","","voice")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","40","","","voice")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","100","Fast","","voice")]&key=ABC1234
          • localhost:54657/?action=[SpeakEx("Completed","Microsoft David Desktop","20","Slow","3","voice")]&key=ABC1234
    • Sets default base volume for current voice
      • localhost:54657/?action=[SetSpeechVolume("20")]&key=ABC1234
    • Sets default voice
      • localhost:54657/?action=[SetSpeechVoice("Elizabeth")]&key=ABC1234
    • Sets base Volume and Rate for specific voice
      • localhost:54657/?action=[SetSpeechConfig("Elizabeth","100","-10")]&key=ABC1234
    • Test after volume and rate change:
      • localhost:54657/?action=[SpeakEx("Completed","Elizabeth","20","ExtraFast","0","voice")]&key=ABC1234

#ChangeLog v2.6.2.23:

  • VoiceConfig.XML added
    • Each voice volume will be saved separately.
  • UI and SetVoice should update VocieConfig
  • SpeakEx("phrase","VoiceName","VoiceVolume","VoiceRate","SpeechDelay","VoiceVolumeOrSystemVolume")
    • VoiceVolumeOrSystemVolume = voice or system

#ChangeLog v2.6.2.23:

  • Task xml is written asyc for better performance.
  • Added some error control in webservice functions
  • New Default function:
    • "stop current voice"
  • New Functions:
    • [StopVoiceByName("VoiceName","ResponseOnSuccess")]
    • [StopVoiceByIdentifier ("PhraseIdentifier","ResponseOnSuccess")]
      • PhraseIdentifier is only set in tasks atm - uses tasks name.

#ChangeLog v2.6.2.22:

  • New Functions:
    • [RunAsShell("shellCommand","responseAfterExecution","responseBeforeConfirmation","responseFailed","voiceVolume","voiceRate","voiceName","VoiceVolumeOrSystemVolume")]
  • Updated Function:
    • [SetSpeechVolume("volume")]
    • [SetTaskEx("name","datetime","speechBefore","speechAfter","speechFailed","voice","volume","runAsShellCommand","repeat","rate","VoiceVolumeOrSystemVolume")]

#ChangeLog v2.6.2.20:

  • Intro video code updated again. Video should now download in Customization folder.
  • Loading window will now reappear after intro video.
  • Function updated:
    • SpeakExSysVol is now async.
  • Functions Added:
    • Synchronous speech [SpeakExSysVolSync("phrase","VoiceVolume","VoiceRate","phraseDelay","VoiceName")] where delay = delay between next speech.
    • Asynchronous speech [SpeakExSysVolAsync("phrase","VoiceVolume","VoiceRate","phraseDelay","VoiceName")] where delay = delay between next speech.
  • Fixed saving/retrieving of "Play on startup (full screen)" settings.

#ChangeLog v2.6.2.18:

  • Intro video now downloads in Customization folder.
  • Better shutdown if error is found on startup.
  • Better disposing of HttpServer on exit.
  • New function: [AIIntro("This is {{!AIName!}};I am {{!AIName!}} using {{!AIVoice!}} voice to be used for {{!AICatagory!}}","test_ainame.txt")]
  • Speech Issues resolved - need to work on updating plugin speak functions
  • Added SplashScreen (loading window)
  • Fixed saving of Main Control Center size
  • Main Control Center max size is now based on smallest screen side of current monitor
  • New Functions:
    • [AIIntro("This is {{!AIName!}}","test_ainame.txt")]
    • [AIIntro("I am {{!AIName!}} using {{!AIVoice!}} voice","test_ainame.txt")]