VoiceAttack v2 Change Log
v2.1.8
- Improvements
- Added 'Get User Input - Message Box Choice' action.
- Added Random Pause action to the Pause menu.
- Added %APPDATA%\VoiceAttack2\Apps, %APPDATA%\VoiceAttack2\Sounds, %APPDATA%\VoiceAttack2\Shared\Assemblies as
part of the VoiceAttack installation. These provide central, known, user-context (file security) locations
for (mostly) third-party applications.
- Added corresponding tokens: {VA_APPDATA}, {VA_APPDATA_APPS}, {VA_APPDATA_SOUNDS}, {VA_APPDATA_ASSEMBLIES}.
- Added corresponding proxy functions: AppDataDir, AppDataAppsDir, AppDataSoundsDir, AppDataAssembliesDir.
- VoiceAttack will now always scan %APPDATA%\VoiceAttack2\Apps for plugins, in addition to scanning the
installation_folder\Apps directory.
- VoiceAttack will also scan %APPDATA%\VoiceAttack2\Shared\Assemblies to resolve assembly dependencies, in
addition to scanning the installation_folder\Shared\Assemblies folder.
- Bug Fixes
- Fixed a settings export issue involving some decimal values.
- Fixed an issue where the inline function build output directory did not process tokens correctly.
- Fixed an issue with the Set Cursor Position feature of the mouse position action not retrieving properly scaled
coordinates for monitors scaled differently from the main monitor.
v2.1.7
- Improvements
- Added, 'Change Speech Recognition Recording Device' action which will allow you to change your Windows speech
recognition recording device from within a command.
- Added link to Options screen that creates a desktop shortcut to the VoiceAttack executable. This is handy
if you are using the Steam version of VoiceAttack and want to bypass the Steam client.
- Added ListeningModeChanged event to the proxy object which is raised if VoiceAttack's listening mode is
enabled or disabled.
- Added KeyboardShortcutsModeChanged event to the proxy object which is raised if VoiceAttack's keyboard
shortcuts are enabled or disabled.
- Added JoystickShortcutsModeChanged event to the proxy object which is raised if VoiceAttack's joystick
shortcuts are enabled or disabled.
- Added MouseShortcutsModeChanged event to the proxy object which is raised if VoiceAttack's mouse
shortcuts are enabled or disabled.
- Added various warnings to configuration screens to indicate when device shortcuts and listening are turned off.
- Added visual indication on main screen recognition level bar when speech recognition is turned off.
- Added System.Linq.Expressions.dll as a default assembly reference when creating new inline functions.
- Bug Fixes
- Exposed UI and token support for joysticks 5-8 (doh).
- Fixed main screen audio popup not opening every time if 'x' was clicked.
- Fixed an issue in the settings import where if specific information was missing from a version 1
settings file the import would fail.
- Fixed an issue with the condition builder crashing introduced in the last update.
- Fixed an issue with the Wait for Keypress screen not allowing input for the timeout and integer variable input
boxes if key capture was turned on.
- Fixed an issue with the Keypress screen key icons not appearing if 'Variable Keypress' checkbox was checked.
- Fixed an issue where some instances of VR interaction would cause a crash if the 'Get user input' action screens
were opened and then closed.
v2.1.6
- Design changes
- Window size and position are no longer imported when importing settings.
- Automatic update/version checks will now only occur once per day (default - can be set manually using user.config,
minimum 6 hours).
- Removed training status indicator for profiles for now. More work will be needed to make this behave properly.
- Removed 'check for updates' checkbox for trial version.
- Improvements
- VoiceAttack will now attempt to import a VoiceAttack version 1 settings file.
- Added the ability to copy apps, sounds and shared folder contents as well as allow plugin support to be enabled
when executing the 'Copy Version 1 Data Files To Version 2.bat' file.
- Updated joystick output components to be a bit more flexible with newer (forked) versions of vJoy.
- VoiceAttack will now show up in Windows' Volume Mixer app, even if no sound is played.
- Added ability to filter the command list on the Profile Edit screen by random sound path in command's actions.
- Added ability to find actions that contain random sound paths on Command Edit screen.
- Added several tokens to allow number formatting with C# formats:
{INTFORMATUSER} will allow user formatting of integer values.
{INTDEFAULTFORMATUSER} is just like the previous token, but also allows for a default value.
{DECFORMATUSER} and {DECDEFAULTFORMATUSER} are the same as the integer tokens, but accept decimal values.
{DECINVFORMATUSER} and {DECINVDEFAULTFORMATUSER} are the same as the decimal tokens, but use the invariant culture.
- Added version number to version update version check message.
- Internal updates to serialization routines.
- Bug Fixes
- Fixed issue where turning off mouse shortcuts would not turn off mouse global listening hotkeys.
- Fixed verbiage issue on Change Speech Profile action screen.
- Fixed an issue with Get User Input tooltip causing screen to lose focus and then become hidden.
- Numerous small ui/functional fixes related to public release.
- Language fixes.
- Installer updates.
v2.1.5
- Design changes
- Small Integer action is no longer available to be added to a profile. The dialog will only be available to edit
existing actions.
- Changed from Ctrl to Shift key when clicking the Options button to bring up the Sound control panel applet.
- Caps Lock key on the Keypress screen is now reserved for disabling/enabling key capture. To set the caps
lock key as a key press, the extended key chooser will need to be used.
- VoiceAttack v2 now uses it's own .dat files (VoiceAttack.dat, VASnippets.dat, VAEffects.dat) within the VoiceAttack2 directory (%APPDATA%/VoiceAttack2).
- Removed speech control panel applet launching from tips and Options > Recognition tab > Utilities if the version of Windows
is Windows 11 24H2 or later.
- Pressing F1 via key press/release actions with VoiceAttack in focus will no longer pass F1 through to the app (subsequently
opening the help document).
- VA scaling now defaults to 120%.
- Plugin assembiles are now loaded using AssemblyLoadContext.
- Opacity no longer has an on/off option (opacity is now always on (defaults to 100%)). This means that VA's screens
no longer have a drop shadow.
- LogEntryAdded event is now called asynchronously from within the proxy.
- Updated code analysis components to v4.9.2.
- Removed execution of standard commands when its 'when i say' is the same as a pending 'Wait for spoken response'
action's response. Indicated as a design change in case anybody has a profile that depends on this condition.
- Improvements
- VoiceAttack is now a .NET 8 application. Legacy plugins (version 1.x) and precompiled inline functions should continue to work as long as
what they contain will still work under .NET 8. Inline functions that are runtime-compiled may need to be rewritten, unfortunately.
- Added the ability to scale VoiceAttack's user interface.
- Added proxy function UIScale which returns VA's user interface scaling expressed as a double between 0.75
and 2.0.
- Added support for up to eight joysticks.
- Added, 'Change Audio Device Availability' action which allows you to enable or disable Windows' playback
or recording devices.
- Microphone icon now displayed all of the time to show recording device status. Speech engine status is now
displayed as an alert badge over the microphone icon. More information is now available via the microphone
icon's tooltip.
- Microphone icon can now be clicked to display a popup to assist in controlling the active speech device.
- Added, 'Advanced Speech Options' menu item to Options > Recognition > Utilities menu.
- Added speech recognition helper screen to assist in discovering what speech recognition facilities are available
on a user's PC (work in progress).
- Added inline function code as a searchable item to profile list filter.
- Added inline function code as searchable item to the add/edit command action list find feature.
- Updated data storage components.
- All screens are now 'borderless', which means a darker 'dark' mode (yay).
- Follow Windows' Dark/Light Mode option no longer requires restart of VoiceAttack when settings change.
- Ongoing accessibility updates
- Rework of most screens to work a little bit better with screen readers.
- Added option, 'Enable main screen keyboard navigation' to allow keyboard navigation and to be able to
allow various controls to be focused so that screen readers can interrogate them.
- Added hotkey support for 'Option' button.
- Added focus hotkey for the profile list control.
- Added focus hotkey for the log control.
- Added shape icon to the 'Write a Value to the Event Log' action.
- Added optional parameter 'IconShape' to the 'WriteToLog' and 'WriteToLogNoParse' proxy functions.
- Cyan added as a log color.
- Added Nato phonetic alphabet ranges for some fun (maybe).
- Added -appsDir and -soundsDir command line options to override the Apps and Sounds directories, respectively.
- Added '-noversioncopy' command line parameter that prevents VA from copying v1 data files (this flag is only checked if
no version 2 VoiceAttack.dat file is found and a version 1 VoiceAttack.dat exists (like when VA v2 is first run after using
v1)).
- Changed "browser" to "open browser" and "help" to "open help" with default profile to prevent further chaos.
- Added action, 'Reset Speech Recognition' which allows the speech engine to be reset within a command.
- Added action, 'Change Windows Speech Recognition Profile', which allows the speech recognition training profile to be
changed from within a command.
- Added, 'Windows Speech Recognition Profile' option to the Recognition tab which will allow for the speech recognition
profile to be changed.
- Added dropdown for changing the speech recognition profile to the microphone icon 'helper' flyout on the main screen.
- Added '-resetscale' command line parameter that will reset VoiceAttacks user interface scaling to 100%.
- Added internal virtual joystick access. This will replace (or augment) the current functionality found in the
VAJSOutput.dll plugin that is out there. The option to turn this on can be found in Options > System/Advanced>
'Enable Virtual Joystick Services', and the actions are found under Other > VoiceAttack Action > Virtual Joystick.
This set of functionality is currently experimental and unsupported as an official feature.
- Added variable and token support for the 'Set an Integer Value' action's random option.
- Added variable and token support for the 'Set an Decimal Value' action's random option.
- Added, 'Overwrite file' feature to the 'Captured audio' action.
- Added the ability to add a new command from a group header in the profile screen.
- Added alpha ranges to dynamic command sections (note that this only supports modern Latin (English) characters, due to
speech engine weirdness.
- Bug Fixes
- Fixed an issue with {CMD} token displaying the full command string and not the spoken phrase when the
command begins with a 'Start Listening' action.
- Fixed an issue with dynamic commands not adding all commands.
- Minor registration fixes.
- Fixed command snippet add not creating with a proper identifier (ie, completely borked).
- Fixed various joystick setup issues.
- Fixed issue with LogEntryAdded event only showing 'green' as the log color.
- Added warning for setting opacity when -opacity command line parameter not set.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Legacy v1 Change Log
v.1.16
- Design Changes
- Updated Options and tips to accommodate Windows 24H2 and later.
- Improvements
- Added, 'Start VoiceAttack with Options.bat' to installation. This simply launches VoiceAttack the same as
if you hold down CTRL + Shift at launch.
- Bug Fixes
- Fixed an issue with {CMD} token displaying the full command string and not the spoken phrase when the
command begins with a 'Start Listening' action.
- Fixed an issue with 'Continuous Speech' and 'Restricted Continuous Speech' still processing phrases
even though, 'When I Say' was not checked.
- Fixed an issue with 'when I press key' functionality not working every time an extended numpad key
(home, delete, end, insert, etc.) was pressed. This was not a bug fix per-se, but rather an attempt at
a workaround for how Windows reports an extended numpad key up if the shift key is pressed after the
extended numpad key was pressed down.
- Fixed an issue where a command that used the 'Repeating' setting to repeat a command would continue to
repeat while using various actions that would normally exit the command.
- Minor registration fixes.
v1.15
- Design Changes
- VoiceAttack no longer requires an email address to validate registration.
- Bug Fixes
- Fixed a critical issue where VoiceAttack would not load fully under specific conditions.
- General maintenance fixes and optimizations.
v1.14
- Bug Fixes
- Fixed issue with broken identifiers for command snippets.
v1.12
- Design Changes
- Pending 'Get User Input- Wait for Spoken Response' responses will now take precedence over commands that
have identical 'When I say' phrases.
- Bug Fixes
- Fixed some small issues related to 'Get User Input - Wait for Spoken Response'.
v1.11
- Design Changes
- Changed the hotkey shortcuts for the 'Get User Input' series of screens.
- Duplicating a profile now stops all running commands first before duplicating.
- Updated shading of 'favorites' star icon in 'Other Stuff' screens when in dark mode.
- Improvements
- Added option "Follow Windows' Dark/Light Mode" to the Options screen to allow dark mode to automatically
follow what Windows has as its application mode setting.
- Added 'Get User Input - Wait For Key Press' feature that will allow a command to wait until a
key or key combination is pressed.
- Added 'Get User Input - Wait For Joystick Button Press' feature that will allow a command to wait until a
joystick button or combination is pressed.
- Added 'Get User Input - Wait For Mouse Button Press' feature that will allow a command to wait until a
mouse button or combination is pressed.
- The 'Text Variable' input box on the 'Get User Input - Wait for Spoken Response' screen will now
auto-populate with a command-scoped variable named '~textResult' on add.
- Added 'Exit command if speech recognition is not available' option to the 'Get User Input - Wait
for Spoken Response' screen. This will keep the action from executing if speech recognition is simply not there.
- Added 'Execute even if listening is disabled' option to the 'Get User Input - Wait for Spoken Response'
screen. This will allow the spoken response to be detected even if listening is turned off.
- Added decimal variable hold time to Add/Edit a Keypress screen.
- Added decimal variable click duration to Add/Edit a mouse click screen.
- Added 'Use variable joystick shortcut (Advanced)' option to the command joystick shortcuts screen.
- Added 'Refresh Variable Joystick Shortcuts' action to refresh joystick shortcuts when variable values
are changed.
- Added 'Use variable mouse shortcut (Advanced)' option to the command mouse shortcuts screen.
- Added 'Refresh Variable Mouse Shortcuts' action to refresh mouse shortcuts when variable values are changed.
- Restructured mouse click screen to use dropdown boxes instead of radio box matrix.
- Added triple-click mouse action to mouse click screen.
- Added, 'Launch elevated as admin' to 'Run an application' action.
- Added 'Append text to existing value' option to the 'Set a Text Value' action that will allow
the incoming variable value to be appended to an already-existing variable value.
- Added proxy function 'CompactModeEnabled', which will return true if VoiceAttack's compact mode is on.
- Added proxy function 'SetCompactMode(bool Value)' which will switch VoiceAttack's compact mode on if true.
- Added proxy function 'ToggleCompactMode()' which will toggle VoiceAttack's compact mode on and off.
- Added token {DOUBLEQUOTE} that will render as a single double quote character.
- Added token '{TAB}' that will render as a tab character (ASCII 9).
- Added token '{ASCII:}' which will render an ASCII value (0-127) as text.
- Added, '{STATE_SPEECHENABLED}' token that will render "1" if speech recognition is available or "0" if
it is not.
- Added, '{STATE_MOUSEHOOKENABLED}' token that will render "1" if mouse hooks are enabled or "0" if
the mouse hook is null or not enabled for any reason.
- Added, '{STATE_KEYBOARDHOOKENABLED}' token that will render "1" if keyboard hooks are enabled or "0" if
the keyboard hook is null or not enabled for any reason.
- Added, '{STATE_KEYCAPTION:}' token that will render as a keyboard key description of a Windows
virtual key code.
- Added, '{STATE_SPEECHINSTALLED}' token that will render as '1' if the speech engine VoiceAttack
is using has been user-installed. '0' if not.
- Added listening, keyboard, mouse and joystick enabled indicators to the Settings Summary.
- Added 'speech recording device allows applications to take exclusive control' and 'speech recording
device gives exclusive mode applications priority' to the Settings Summary.
- Added proxy utility function 'ResourceExists' that will return true if a given resource name exits
within a given resource file.
- Added proxy profile function 'StartupEnabled()', which returns true if the 'Load Profile on Statup' option has
a profile selected.
- Added proxy profile function 'StartupInternalID()', which returns the internal id for the profile selected as the
startup profile (if it exists).
- Added command line parameter '-nomodkeyrelease' which indicates not to release the left and right modifier keys
(shift, ctrl, alt) on profile load when VoiceAttack starts up.
- Bug Fixes
- Fixed an issue with the 'Duplicate' command keyboard shortcut not working from the Profile Edit screen.
- Fixed an issue with 'Execute a command each time a command phrase is recognized' not firing if listening
is turned off prior to command execution.
- Fixed an issue with token {TXTREPLACEVAR:} that was stripping out more double quotes than it should have.
- Fixed an issue with random decimal generation causing a crash under certain conditions.
- Fixed various joystick setup issues.
- Fixed an issue with default TTS voice not able to preview when set to Speech Platform 11 TTS and
SAPI TTS is also installed.
- Fixed an issue with the command list filter of the profile screen not filtering properly with commands
containing more than 250 actions.
- Fixed an issue where modifier keys were not registering properly in 'Add a Keypress' screen (introduced in
prior beta).
- Fixed an issue (for both tokens as well as the device state conditions) when checking joystick
position that would cause a crash if the joystick used is a gamepad.
- Fixed an issue with command snippets not persisting portions of condition actions.
- Fixed an issue with inline function compilation if VoiceAttack's current directory was changed.
- Fixed issue with condition device state evaluating gamepad axes.
- Fixed issue with condition device state evalutating axes for joystick 3 and 4.
- Fixed an issue where keyboard shortcut hook was not turned back on after editing keyboard-related
actions with shortcuts turned off in some cases.
- Version check with Steam edition has been turned off.
- Fixed an issue with proxy WriteToLog() function not parsing tokens properly.
v1.10.6
- Bug Fixes
- Fixed a critical issue that was preventing exporting of profiles in certain cases.
v1.10.5
- Bug Fixes
- Fixed various issues with update checks (both Steam and standalone versions).
v1.10.4
- Design Changes
- Changed internal process by which profiles are deleted. Profiles are now flagged to be deleted
and will not actually be removed until next startup of the application. Only noting this here
just in case an older version of VA is sharing a .dat file with a newer version (older versions
will still show the profile as available if the .dat is accessed prior to actual delete).
- Blank/whitespace profile names are no longer permitted.
- Any features added to playing sound from this point on will only be available for the
'Integrated Components' audio type.
- Resetting default setting values from the Options screen will now close VA.
- The hotkey for the Windows Misc Functions action has been changed from Ctrl + F to Ctrl + O.
- Command action caption verbiage in list is now limited to the first 250 actions to increase
display performance.
- Changed command line parameter '-bypassPendingSpeech' to '-bypasspendingspeech' to be consistent
with other command line parameters. Note that '-bypassPendingSpeech' will continue to work (just
no longer documented).
- Improvements
- Added 'Command Snippets' feature, which allows you to store collections of actions for later use.
- Added basic find capability to the command action list.
- Added more detailed information for the 'mic mute/no signal' icon.
- Added options 'Do not play this sound if other sounds are playing', 'Only allow a single instance
of this sound', 'Do not play additional sounds while this sound is playing' and 'Play this sound
regardless of the settings of other sounds' to the 'Play a Sound' and 'Play a Random Sound' actions.
Note that this is only available for the 'Integrated Components' audio type.
- Added options 'Do not activate this speech action if other speech is active', 'Only allow a single
instance of this speech action', 'Do not activate additional speech actions while this speech is
active' and 'Activate this speech regardless of the settings of other speech' to the 'Say Something
with Text-To-Speech' action. Note that this is only available for the 'Integrated Components' audio
type.
- Added, 'Disable Additional Text-to-Speech Options' option to Profile Options > Advanced tab. This
option allows profile-level bypassing of new text-to-speech options.
- Added '-legacytts' command line option to bypass new text-to-speech options for all profiles.
- Optimized loading time and memory usage of profiles.
- Added the ability to hide/show columns in the profile editor screen.
- Added the option to save the quick reference list as Comma-Separated Values (CSV) (*.csv) to the profile export screen.
- Added command line parameter '-disablemainshortcuts' which will disable all hotkey shortcuts on
the main screen.
- Added author flag which will allow reverse profile renaming. By default, an imported profile will
have its name updated with a numeric value if another profile already exists with the same name. Setting
this flag to 1 will tell VoiceAttack to rename the existing profile in order to preserve the imported
profile's name.
- Added optional Boolean parameter 'SaveToProfile' to SetText, SetInt, SetDecimal, SetDate and SetBoolean
proxy functions. Setting this parameter to true will instruct VoiceAttack to save the value to the profile
(directly correlates to the 'Save value to profile' option on the 'Set a Text Value' screen). 'SaveToProfile'
defaults to false.
- Added optional Boolean parameter 'RetrieveFromProfile' to GetText, GetInt, GetDecimal, GetDate and GetBoolean
proxy functions. Setting this parameter to true will instruct VoiceAttack to load the value from the profile
(directly correlates to the 'Retrieve saved value' option on the 'Set a Text Value' screen). 'RetrieveFromProfile'
defaults to false.
- 'Wait for Spoken Response' timeout can now accept decimal variable names and any combination of tokens.
- Added the ability to use a blank for the Responses input of 'Get User Input - Wait for Spoken Response',
which allows for any spoken response to be captured.
- Added 'Invoke VoiceAttack's mouse shortcuts' option to the Mouse Click screen. This will allow VoiceAttack's
commands with mouse shortcuts to execute from VoiceAttack's own mouse actions. Some games and apps do not work
well with VoiceAttack's method of restricting its own mouse clicks. This option will help with that situation.
- Separated Enable/Disable Action(s) menu item on command screen into two separate menu items.
- Bug Fixes
- Fixed an issue where having no recording devices available to the speech engine would hang
the Options screen for several seconds upon close.
- Fixed various reordering issues with the command action list, including an issue where duplicating and dragging
multiple items in the action list of a command would change the order of the dragged items.
- Fixed a scaling issue when moving windows between monitors using 'Perform a Window Function'
action.
- Fixed issue with screen edge snapping in some cases.
- Fixed issue with screen load position recall in some cases.
- Fixed an issue with VA.Profile.SwitchTo() not working properly from within an inline function.
- Fixed an issue where the 'Convert a Variable Value' values would accept variables with semicolons,
or, colons without the use of tokens.
- Fixed an issue where browsing in 'Run an Application' would crash if illegal characters in the path
were present.
- Additional fixes for issue with command keyboard shortcuts not handling key-up event when 'Do not allow key
to be passed through' option is checked.
- Fixed an issue with the Command Add/Edit screen where clicking 'No' to confirm cancel would disable
key bindings for that screen.
- Fixed issue where system summary was no longer showing installed speech engines, current culture or
current ui culture.
- Fixed issue with tooltips on main screen not respecting system tooltip colors.
- Fixed some CSS issues in HTML export.
- Fixed issue with command keyboard shortcuts not handling key-up event when 'Do not allow key
to be passed through' option is checked.
- Fixed issues with combo boxes and the backspace key and other minor visual glitches.
- Tightened up excessive automatic scrolling with dropdown boxes when hovering near the bottom
or top.
- Added missing [MENU]/[APPS] indicators for Quick Input and variable keypresses.
- Made some adjustments to device muting when resetting the speech engine.
- Fixed an issue where groups would not retain expanded setting after adding a command in certain
situations.
- Fixed an issue where a deleted command would still be available for repeating.
v1.10.3
- Bug Fixes
- Fixed an anomaly dealing with speech engine resets that may cause devices to
mute unexpectedly.
v1.10.2
- Bug Fixes
- Fixed an issue where resetting the speech engine with excessive noise would cause
a hang until the noise was silenced.
- Fixed the issue with no commands being displayed in the list if migrating from an
earlier version of VA to the latest version and the list was sorted by actions.
v1.10.1
- Bug Fixes
- Fixed an issue where disabling the speech engine would close the application.
- Fixed the ability to enter text in the 'Default text-to-speech voice' option in
the Profile Options screen.
- Fixed an issue where resetting the speech engine would fail to complete.
v1.10
- Design Changes
- VoiceAttack is now primarily a WPF application. That is, the user interface has gone through
an almost 100% porting process. Theming is consistent throughout the application, including,
'Cover of Darkness (Dark Mode)'. Overall editor speed should seem a little bit snappier with
this port. The ability to override VoiceAttack's language is available, but still in its
development phase.
- VoiceAttack now requires .Net Framework 4.8.
- Token '{TXTRANDOM:}' no longer trims extra spaces from selected items.
- Resize grip bars are no longer visible in the corners of resizable windows within
Windows 11.
- Comment action now only trims blank spaces from the end (right).
- 'VA_DisplayInfo' function from the plugin interface will now display as a tooltip for the item
represented in the plugin manager.
- Recording screen minimum pause has been changed to 0.001 from 0.000.
- If Windows Media Player is not installed, the Audio Output Type of 'Windows Media
Components' will not be available on the Options screen > Audio tab.
- Warning now displayed if internal sounds are played while using 'Windows Media
Components' as the audio output type.
- 'Use Nested Tokens' has been removed as an option from the 'Options' screen. Nested tokens
will now always be rendered.
- Increased pause maximum time to 9999.999 seconds.
- Moved 'Dark Mode' toggle from the system menu of the main screen to the Options screen,
General tab in an effort to make it more discoverable.
- Improvements
- Added, proxy property VA.DarkModeEnabled which returns true if VoiceAttack's dark mode
is turned on and false if it is not.
- Added state token '{STATE_VA_DARKMODE}' which renders '1' if VoiceAttack's dark mode is
turned on and '0' if it is not.
- Added, proxy property VA.LogReversed which returns true if VoiceAttack's log is displayed
in reverse order (new entries at bottom) and false if it is not.
- Added state token '{STATE_VA_LOGREVERSED}' which renders '1' if VoiceAttack's log is displayed
in reverse order (new entries at bottom) and '0' if it is not.
- Updated plugin samples to use .Net Framework 4.8.
- Added, '-minimizetosystemtray' command line parameter. When VoiceAttack is minimized, its icon will
be displayed in the system tray (works just like the 'Minimize to System Tray' option on the Options
screen).
- Updated audio components.
- Added Profile Option 'Exclude global profiles'. This option will prevent global profiles
from loading when a profile has this option selected.
- Added 'Utilities' button to the Profile Options > Advanced tab. Three new utilities added:
Clear all disabled keyboard, mouse and joystick shortcuts.
- Added, 'Do not render tokens in variable values' option to 'Set a Text Value' action.
- Added proxy function 'WriteToLogNoRender' which works exactly like proxy function
'WriteToLog', except that tokens will remain intact (not rendered) when output to the
log.
- Added, 'Do not render tokens' option to 'Write to Log' action.
- Added command line parameters -logtostdout which will send log entries to STDOUT.
You can pipe the output to a text file or to another app. Note that the output is
not consolidated or trimmed as sometimes displayed in the main screen's log.
- Added command line parameter -logtostdoutnotime which does the same as the one above,
except omits the time portion of the log entry.
- Added proxy event 'LogEntryAdded' which is raised any time a new entry is written to the
main screen log.
- Added 'Release All Keyboard Keys' feature to the Windows Misc Functions action. This
will attempt to release all keys that are detected as currently pressed down.
- Added 'Release All Mouse Buttons' feature to the Windows Misc Functions action. This
will attempt to release all mouse buttons that are detected as currently pressed down.
- Attempt to reset keyboard hotkeys on wake from Windows sleep/hibernate implemented.
- Attempt to follow latest default speech device when recording devices added/removed improved.
- Added, 'Execute a command each time a command phrase is recognized' to Profile Options. To allow
this to be bypassed by specific commands, the option 'Do not execute additional recognition
command' has been added to the Command > Advanced screen.
- Added option 'Execute even if rejected for low confidence' to 'Execute a command each time
a command phrase is recognized' to allow the selected command to execute even if the spoken
command did not meet the set minimum confidence level.
- Added token '{CMDEXECREJECTED}' that can be inspected within an 'Execute a command each time a
command phrase is recognized'-executed command. The token will render "1" if the executed command
was the result of the spoken command phrase being below the minimum set confidence level. A value
of "0" will be rendered if the spoken command phrase has met the minimum set confidence level.
- Added proxy utility function 'GetLanguageValue' that allows access to VoiceAttack's verbiage
values.
- 'WriteToLog()' proxy function now parses tokens.
- The 'Write a Value to the Event Log' action and the 'WriteToLog()' proxy function both allow
for end of line characters '\r\n' in addition to the {NEWLINE} token when indicating line breaks
in the log.
- Bug Fixes
- Imported and duplicated profile information (author tags and ids) are now included in
profile history.
- Fixed various proxy event handlers that would crash VA if an exception was thrown in user
code (plugins/inline functions).
- Fixed issue where editing keypress modifier keys would get out of sync on edit.
- Bolstered plugin areas to try to deter some crashes.
- Fixed an issue with 'Execute a command each time a command phrase is recognized'
blocking the executed command if 'Allow other commands to execute while this one is running'
was unchecked.
- Fixed issue with {CMDTARGETFOREGROUND}, {CMDTARGETMINIMIZED}, {CMDTARGETMAXIMIZED} not working
if no input actions included in the command.
- Fixed issue with modifier keys (ctrl, alt, shift) not working when device condition 'Only Key Pressed'
was used.
- Fixed issue with '-PassedText' command line parameter if used when VA set to run as
an administrator and multiple literal values are passed in.
- Fixed issue with copying log messages sometimes resulting in an error.
- Fixed issue with default/demo profile not saving if changes were made and a new profile
was created.
- Attempt to fix Quick Input missing characters when targeting VoiceAttack itself.
- Fixed issue where selecting multiple command actions would prevent certain right-click
menu items from enabling.
- Fixed issue with setting 'on recognized' and 'on unrecognized' profile options would not
be available until the profile was reloaded.
- Fixed issue with 'Write Text to a File' action not importing newline characters
properly if imported as binary.
- Fixed issue with 'Switch to another profile' by reference resetting profile if the profile
being changed to happened to be the active profile.
- Fixed issue with saving variables with profile on profile switch.
v1.8.9
- Bug Fixes
- Fixed an issue with long-running profile unload commands breaking if stopped.
- Bolstered joystick device query to try to stem NTDLL.dll crashes when devices are
not plugged in for an extended period.
v1.8.8
- Design Changes
- Recent changes to Windows 10 (version 2004+) have affected the way applications
handle timing in certain ways. As a result, VoiceAttack's timings have been
affected (adversely). VoiceAttack will now adjust its timing automatically
if it is run in Windows 10 version 2004+. This *will* dramatically increase the
execution speed of your commands for those that are affected. In order to
keep the peace, the option, 'Auto-adjust cpu utilization during command execution'
was added to Options>System/Advanced for those that need a little more time to make
adjustments to their commands (if needed).
- Profile edit screen's filter buttons will now only persist while the profile is
active. If the profile is changed or if VA is shut down, the filter buttons
will have their state reset.
- Variable change events are no longer removed when a profile is changed.
- Subcommands that are not able to locate their target window/application will now
stop the entire command tree. This is indicated as a design change (and not
just a bug fix) as not only would it not stop when target found, but would
also continue running. This may affect existing profiles.
- Installer will now attempt to install to the last location where VoiceAttack
was installed, regardless if going between 32 and 64-bit installers.
- Improvements
- A 64-bit version of VoiceAttack is now available as a full release.
- Added token '{STATE_VA_IS64BIT}' which returns '1' if the VoiceAttack process
is 64-bit, and '0' if it is not.
- Added proxy function State.Is64Bit() which returns true if the VoiceAttack
process is 64-bit, and false if it is not.
- Naming of pasted commands in the, 'Edit Profile' screen has been updated to
be more sequential.
- Refactored/reorganized most code. Probably not something anybody will notice -
just want it to be indicated here.
- Generating a settings summary now has the option to either write to file or
be copied directly to clipboard.
- Added, 'Set Always on Top' and 'Unset Always on Top' to the 'Perform a Windows
Function' display selections. These attempt to set/unset the target window's
'always on top' state.
- Added, 'Change Opacity' option to 'Perform a Windows Function' action. This
will allow you to attempt to change the opacity of a target window to a
set percentage.
- For loop with indexer now shows indexer name in action list.
- Plugin context now displayed in action list.
- Added proxy Utility functions MinimizeUI() and RestoreUI() for hiding/showing
VA from inline functions or plugins.
- 'Listen once then stop listening' hotkey, 'listening' sound has been restored
for joystick and mouse control.
- Added command line parameter -bypassimpropershutdowncheck which will make
VoiceAttack not display the, 'Improper Shutdown' screen on launch. This is
to help with debugging plugins in cases where VA gets shut down improperly.
- Bug Fixes
- Fixed issue with 'Listen Once' where listening icon would get out of sync.
- Fixed issue with keyboard hotkeys not saving in certain situations.
- Fixed issue where rapidly clicking the, 'Apply' button on the Profile Edit screen
could cause a crash.
- Fixed various minor UI glitches on mouse move screen.
- Fixed issue with Record screen hotkey selection screens allowing keys to be passed
through to the recorder.
- Fixed issue where saving and recalling the mouse location in concurrently-executing
commands could cause a crash.
- Fixed issue with Captured Audio file browser crash if path did not exist.
- Fixed issue where plugin selection on Plugin screen would allow free text to be entered
(which would subsequently cause a crash).
- Fixed Set a Decimal Value random caption formatting issue with whole numbers ending with
zero not displaying properly.
- Fixed issue with, 'Wait for spoken response' where items with additional
spaces would not be recognized.
- Fixed issue with 'Set integer value' screen not disabling proper controls if
'Clear value' was selected on edit.
- Fixed issue with composite (prefix/suffix) commands not being allowed to be added
even if they were in different composite groups.
- Variable change events are no longer called twice when values are saved
to the profile.
- Fixed issue where spamming a search character when opening the profile edit screen
would cause a crash.
- Fixed issue with .vax import where an improper shutdown message may be presented
when VoiceAttack restarts.
- Fixed issue where indicating a command trigger would allow a blank command
'when I say' value.
- Included missing joystick 3 and 4 POV tokens.
- Fixed issue with restricted continuous recognition failing to execute command
immediately following a spoken 'start listening' action.
- Fixed {WINDOWMINIMIZED} and {WINDOWMAXIMIZED} tokens not working against 64-bit
processes (64-bit version only).
- Main screen now restores properly if minimized to system tray and a second
instance of VA is launched.
- Fixed issue with passed values getting added multiple times, causing a crash.
- Stopping all commands now indicates any queues that are stopped.
- Fixed issue with {CMD_WILDCARDKEY} token not showing wildcard expression if the
expression was the full command.
v1.8.7
- Design Changes
- Command queue stop actions on a non-started queue will now clear the queue.
- Tokens in TTS ('Say Something With Text-to-Speech') will now be rendered before any dynamic
TTS. Previously this was the other way around.
- New installations of VoiceAttack will now have, 'Check for updates' selected by default.
- Fixed issue with functions that involve window dimensions including dimensions of window shadows.
Mouse move actions and mouse position tokens (and possibly other areas) will be affected by this
change.
- Passed command values that are indicated as blank will now have their corresponding
variable set to 'Not set' instead of just omitting the value. For example, passing
"1;2;;3" to a command's, 'passed integers' will result in the following variable
creation:
~passedInteger1 = 1
~passedInteger2 = 2
~passedInteger3 = Not set
~passedInteger4 = 3
- Disabling profile initialization commands from the, 'Load Options' screen now also
prevents profile unload commands from being invoked.
- Audio cleanup was made a little bit less eager in order to keep sounds from disrupting
each other. Added a command line argument of -eageraudiocleanup to revert back to the
original method.
- Improvements
- Added a settings summary to Options > General > System Info. This summary can be saved
and referenced so you can view/share most of your settings in one list.
- 'Send command to this target' can now accept tokens at the command and profile levels.
- Increased number of spoken responses for the, 'Wait for Spoken Response' action from 250 to 500.
- Added TextVariableChanged, IntegerVariableChanged, DecimalVariableChanged, BooleanVariableChanged and
DateVariableChanged to the proxy. This will allow variables with a suffix of '#' to raise change
events if their values change.
- Added, 'CommandExecuting' and 'CommandExecuted' events to the proxy object for use within inline
functions so that your inline function can be notified when a command is about to execute and
when a command has completed executing. Note that the 'Enable proxy command events' option
(Advanced/Experimental Command Options screen) must be selected for each command that is to fire
either of these events.
- Added token, '{CMDEXISTS:name}' that renders '1' if a command (spoken phrase) exists. '0' if not.
- Added command line parameter '-loadoptions' which will launch VA with the load options
screen (the same as holding down CTRL + Shift at startup).
- Key press and Recorder screens will now allow for key presses emitted from VA itself.
- Command-passed date and decimal values can now contain literal values, as long as the literal values
are expressed using the invariant culture.
- Added option, 'Evaluate passed values when command is queued' to the Enqueue Command action.
This option will allow the enqueued command's passed values to be evaluated when the command
is queued (rather than when the command is executed).
- Added the ability to pass values to commands from the command line using -passedText, -passedInteger,
-passedDecimal, -passedBoolean, -passedDate.
- Added item, 'Reset Keyboard Shortcuts' to the Windows Misc Functions actions. This will attempt
to reset VoiceAttack's keyboard shortcuts/hotkeys if something has caused VoiceAttack's keyboard hook
to be overridden.
- Bug Fixes
- Fixed issue with command queue actions not rendering tokens.
- Fixed issue with command line parameters not being picked up when running VoiceAttack's
registration screen.
- Fixed help document not showing up when F1 pressed on various screens.
- Fixed various threading issues with 'Get Input' actions.
- Fixed excessive overhead between down/up key sequence for quick input when delay is zero.
- Fixed issue with TTS mass update button not becoming available if volume or rate changed.
- Fixed issue with joystick options screen loaded from command screen's joystick setup
not assigning a stick if no sticks were already assigned.
- Fixed issue with joystick options screen loaded from command screen's joystick setup
crashing if all sticks were unassigned.
- Fixed issue with -passedText command line parameter losing quotes if the, 'Run
VoiceAttack as an administrator' setting turned on.
- Fixed issue where '-listeningoff' and '-listeningon' command line parameters were being
overridden by hotkey state on startup.
- Importing a profile now verifies that commands indicated on the, 'Profile Exec' tab
actually exist within the exported profile.
- Fixed listening icon not updating if, 'Reject Pending Speech' was turned on and speech
was occurring.
- Fixed issue with passed values in 'Execute another Command' screen and 'Enqueue command'
screen were not cleared out on edit.
- Fixed issue with {TXTREPLACEVAR} token where if the, 'from' parameter was blank the
token replacement will freeze the command.
- Fixed an issue with joystick button screens not working until refreshed if more than two buttons
were already down when the screen loads.
- Fixed issue with command actions dragging if mouse dragged from scrollbar.
- Fixed issue with system beep when hitting Alt + E from main screen.
- Fixed issue where semicolons in passed text values were not being processed properly if
contained in a literal value.
- Fixed issue where InternalID (for both command and profile) was being copied on duplication.
- Fixed issue where dragging out of the condition builder list would cause an exception.
- Fixed issue where hitting Alt + K to open the key press screen would cause the Alt key
to be held down.
- Fixed threading issue when using command-shared variables.
- Resolved a threading issue while using passed values for executing/queued commands.
- Fixed an issue where using wildcards at the start of a phrase containing dynamic command segments
would result in unrecognized phrases.
- Resolved issue with command hotkeys (keyboard, mouse, joystick) double-firing if 'release only'
selected in conjunction with other options (long press, double tap).
- Fixed issue with joystick hotkey screen not picking up button presses when the options screen is
opened and joystick is newly assigned.
- 'Prevent Speech Engine From Changing Microphone Volume' feature crashes VA with some versions of
Windows. Some checks are done to help prevent this (hopefully).
- 'Listen once then stop listening' hotkey, 'listening' sound has been restored.
v1.8.6
- Design Changes
- The following tokens were returning 'Not Set' in error when the underlying function yielded a null value.
In order to make these tokens more consistent with the rest of the system, they have been updated to return,
'Not set': {TXTSUBSTR:}, {CMDSEGMENT:}
- The following tokens were returning blank '' in error when the underlying function yielded a null value.
In order to make these tokens more consistent with the rest of the system, they have been updated to return,
'Not set': {TXTURL:}, {TXTNUM:}, {TXTALPHA:}, {TXTWORDTONUM:}, {TXTTITLE}
- The following tokens were returning blank '' in error when the variable passed was not set. In order to make
these tokens more consistent with the rest of the system, they have been updated to return, '0':
{PROCESSCOUNT:}, {WINDOWCOUNT:}
- Plugin and inline function execution in the unregistered version is restricted if the command that is
executing is a multipart/dynamic/composite command or a subcommand.
- Improvements
- Added, 'Passed Values' feature to, 'Execute Another Command' and 'Enqueue Command' actions. This allows
for you to specify (via semicolon-delimited lists) sets of values to pass to commands. The values that
are passed to the commands are converted to a standard set of command-scoped variables that are accessible
only to the executed command. Think of this as being able to have parameters for commands o_O
- Added ability for passed values to indicate variable names fully or partially with tokens.
- Added passed value functionality to proxy command function Execute().
- Command actions can now be reordered by dragging.
- Added the ability to edit multiple commands at once, via the 'Command Multi-Edit' screen.
- Added the ability to delete multiple commands at once.
- Added, 'Do not add command to queue if already enqueued' option to the 'Enqueue Command' action. This
will prevent a command from being added to a named queue if the command already exists in the queue.
- 'Say Something with Text-To-Speech' action screen is now sizable.
- Export as HTML now allows you to filter out commands where, 'When I Say' is disabled.
- Snap to edge is back (for those that remember it years ago) for all VoiceAttack screens.
- Added command line parameter -snapdistance to allow you to adjust (in pixels) how close to
the screen edge a VoiceAttack screen can be before it snaps to the edge. Set this value to
zero to turn off snapping. The default value is 20, with a maximum value of 500.
- Stopping command processing will now attempt to release mouse buttons left in a pressed-down
state.
- Added Proxy attribute, 'Dictation'. Dictation has four functions: Start(out String Message),
Stop(), IsOn() and ClearBuffer(Boolean LastStatementOnly, out String Message). These
work similarly to the corresponding dictation actions.
- Added task bar and system tray item, 'Relocate to Primary Display' which moves all open forms
over to the primary display. This is useful when a VoiceAttack screen is opened on a monitor that
has been turned off or disconnected and Windows still thinks it should be there ;) There is also
a new command line parameter, '-relocate' which can be used to perform this action as well.
- Added, 'Advanced' button to the Command edit screen to hold advanced and experimental
command options.
- Added advanced/experimental command option, 'Resource balance offset' which controls
VoiceAttack's action throttling in places where it may be needed (turbo switch for your
command - at a cost ;)).
- Added advanced/experimental command option, 'Do not execute this command if it is already
running'. This keeps the current command from executing if another instance is already
in progress.
- Added option, 'Do not execute this command if it is already running' to the, 'Execute Another
Command' screen. This will prevent a command from executing if it's currently running.
- VoiceAttackFault.txt will now provide last execution information for each enabled plugin
(Windows Event Log and VoiceAttackFault.txt).
- Added token, '{CMDACTIVECOUNT:}' that renders the number of running instances of the indicated
command.
- Added proxy Command function ActiveCount(String name) and ActiveCount(Guid InternalId) which
return an integer count of the number of running instances of the indicated command.
- Added token '{CMDALREADYEXECUTING}' - This provides a way to test if the current command is
already executing in another instance. The rendered value will be, '1' if the command is
already executing, or '0' if not.
- Added proxy Command function AlreadyExecuting() which returns a Boolean true if the current
command is already executing in another instance. False if it is not.
- Command line parameters -darkon and -darkoff have been updated to change, 'dark mode' on both
the launched and running instance of VA.
- Added Loop Continue action which will cause a looping section to skip on to its next iteration
without breaking the loop.
- Added option, 'Consolidate Duplicate Entries' to the right-click menu of the main screen's log.
This will allow VoiceAttack's log to consolidate repeated items into one line, instead of filling
up the log with the same item, over and over again.
- Added token, '{STATE_AUDIOOUTPUTTYPE}' which renders the currently-selected audio output type as
indicated on the Options > Audio tab. The rendered values are "Legacy", "Windows", and "Integrated".
- Added proxy State function 'AudioOutputType()' which returns the same values as the
{STATE_AUDIOOUTPUTTYPE} token above.
- Added group header right-click option, 'Select All Items In This Category', which selects all items in
a group on the Profile edit screen.
- Added, 'Prefetch' to random sounds. This will load either the selected list or an entire directory
(use with caution for obvious reasons).
- Improved timing of {STATE_AUDIOCOUNT} token to be a little bit more forgiving when checking for counts
immediately following the playback of a sound file when using Windows Media Components.
- Counts added to groups on Profile edit screen.
- Added option, 'Disable F1 Help' to the Options > General tab. This disables VoiceAttack's
reaction to pressing F1 for help.
- Bug Fixes
- Various scaling issues addressed, including initial resizable form sizes when scaling changes.
- Renamed proxy command Execute() parameters to allow for named parameters.
- Fixed issue with proxy ProfileChanged event locking up if certain commands were executed
with, 'WaitForReturn' set to true.
- Stability improvements for several proxy functions.
- Fixed threading issue with proxy function, 'CommandExists()'.
- Fixed issue with reading resource sounds from VB.Net-based libraries.
- Fixed issue with lockup while previewing TTS while using the {CMDSEGMENT:} token.
v1.8.5
- Bug Fixes
- Fixed issue with category grouping introduced in a late-arriving bug fix.
- Fixed issue with {NEXTPROFILE_AT2} and {NEXTPROFILE_AT3} showing contents of {NEXTPROFILE_AT1}.
v1.8.4
- Design Changes
- Commands that have a value of, 'not set' for, 'When I say' will now be ignored. This
generally occurs when a token is used and a variable that the token references is not set.
- Prefetched audio will no longer display an error log entry if tokens are used and the resulting
path results contains, 'Not set'.
- {CMDWHENISAY} token was only returning the lower-cased passed value (name) when command
was executed via the, 'Execute another command' action by name. This now returns the
full, 'when i say' value for the command. This is kind of a bug fix, but it is listed
up here in case you are depending on this value for whatever reason.
- Improvements
- Added keyboard, joystick and mouse button shortcut, 'double tap' mode which will allow the execution
of a command when a keyboard, joystick or mouse button shortcut is pressed twice. Note that there is
also an advanced additional option with this feature that will allow you to execute the same
command with a single press.
- Added token, '{CMDDOUBLETAPINVOKED}' that renders, '1' if a command is executed as a result
of a double tap and '0' if it is not.
- Added Boolean function, 'IsDoubleTapInvoked' to the proxy's Command object. This will return
true if the executing command was executed as a result of a double tap. False if it was not.
- Added keyboard, mouse and joystick shortcut, 'long press' mode which will allow the execution
of a command when a shortcut is pressed for a longer period. Note that there is also an advanced
additional option with this feature that will allow you to execute the same command with
a short/standard press.
- Added token, '{CMDLONGPRESSINVOKED}' that renders, '1' if a command is executed as a result
of a long press and '0' if it is not.
- Added Boolean function, 'IsLongPressInvoked' to the proxy's Command object. This will return
true if the executing command was executed as a result of a long press. False if it was not.
- Added, 'bleem', 'glomm', 'hiccup', 'leaveit', 'lookatme', 'revfast', 'revslow', and 'smack' as
sound resources.
- Added option, 'Stop after all commands complete' to the start action on the, 'Queue Action' screen.
This tells the started queue to stop automatically once all the items in the queue finish executing.
- Enqueued commands now receive command-scoped variable values.
- Added, 'Always execute' command option that will allow a command to execute even if other commands
are blocking.
- Added time stamp to inline function output log.
- Added option button to joystick button shortcut screen, plus a little bit of extra verbiage
to indicate when no joysticks are enabled/assigned.
- Added token, '{STATE_TTSCOUNT}' which renders the number of actively playing text to speech
synths. Renders, '-1' if any error occurs.
- Added '{STATE_SPEECHCULTURE}' that returns the culture name for the speech engine
(for instance, 'en-US' or 'de-DE').
- Added token, '{LASTSPOKEN}' which renders the value captured from the speech engine, recognized
as a command or not.
- Added token '{PREVIOUSSPOKEN}' which renders the previous value captured from the speech engine,
recognized as a command or not.
- Added token {TXTOCCURRENCES} that will render the number of times a text string appears in
another text string.
- Added token {TXTREGEXREPLACE} that will allow you to replace text in one string with the text
of another using regular expression matching.
- Added profile-level author flag which will allow you to specify a nice message to the
end user when commands are prohibited from being imported (used with the flag).
- Added profile-level author flag which will allow you to specify a nice message to the
end user when profiles are are prohibited from being duplicated (used with the flag).
- Added command line option -noexport that indicates when a profile is exported as a binary .vap
that the resulting profile cannot be exported as binary or XML when imported.
- Command line parameter -datadir now parses environment variables.
- Added command line option, '-restore' that will restore the VA window to a normal
window state if minimized, maximized or minimized to the system tray.
- Added, 'Right Ctrl', 'Right Alt', 'Right Shift', 'Right Win' as selections when clicking the key
icons on the, 'Key Press' screen.
- Bug Fixes
- Fixed issue with {CMDSEGMENT} token rendering spurious values if the command was executed in any
way other than by spoken phrase. If {CMDSEGMENT} is used in a command executed by mouse, keyboard
or joystick, 'Not set' will be rendered.
- Fixed issue with many volume sliders appearing in the Windows volume mixer if Windows Media
Components was selected as the audio type.
- Fixed issue with profile change action not being ignored if withing a command being called
on profile unload.
- Fixed issue with repeated commands holding on to locally-scoped variables.
- Fixed issue where if a TTS voice was invalid, TTS would not stop if commands were stopped.
- Fixed issue with category rename not changing if only letter casing changed.
- Fixed issue with 'ProfileChanged' event not firing if a command is called on profile unload.
- Fixed issue with, 'Get User Input' screens not getting focus when opened.
- Fixed issue with relative movement checkbox not saving properly on edit on the Mouse Move action
screen.
- Fixed issue with System.Threading.AbandonedMutexException being logged if two instances of VA
were running and one of the instances was shutting down.
- Commands where, 'Ignore Command' actions exist did not include spoken phrase info for use in
various tokens. This has been fixed.
- Fixed issue with single-instance TTS not maintaining default TTS voice.
- Fixed issue with TTS UI not enabling certain controls if SSML error was encountered.
- Fixed issue with CLM author tag displaying blank when set.
- Fixed issue with prefetched audio failing to resume prefetching if an exception was raised.
- Fixed issue with browsing for file name with illegal characters in, 'Capture a Screenshot' action.
- Fixed issue where screen shot causing certain color values to be transparent.
- Fixed caption display issue with joystick buttons on command screen.
- Fixed Category Rename screen not trimming spaces.
- Several command line options were fixed to work when VoiceAttack is minimized to the
system tray.
- Fixed issue with joystick hotkey profile override not including sticks 3 and 4 in configuration.
- Fixed issue with multipart dynamic composite command segments (say that five times) not fully
populating.
- Fixed issue when editing a command's command type was not updating the speech recognition engine.
- Fixed issue with internal sound resource file not being accessible if a startup path was used.
- Fixed low visual contrast on selected commands in profile list when command triggers were disabled.
- Fixed crash issue with, 'Execute command by name' screen.
- Fixed issue with log quiet mode not displaying log entry from, 'WriteToLog' proxy function
even if option was set to do so.
- Fixed UI issue with highlight disappearing when adding specified pauses.
- Fixed issue with proxy method WriteToLog crashing VA in certain instances if null was passed in.
- Fixed issue with some resizable screens not displaying all controls when opened for the first
time.
- Fixed issue with, 'Stop command if target window focus is lost' not working if the
target app is not open.
- Fixed issue with, 'Resume command if focus is regained' not stopping the paused command if the
target process is terminated.
- Fixed right-click context menu not working right on export and import command screens.
- Fixed issue with multiple simultaneous sounds directed to multiple devices may cause
the sounds to sometimes be played through the same device.
- Fixed issue with recorder actions not being picked up as changes.
- Recorder actions committed to the command screen now have an, 'undo'.
- Null values written to log no longer crash VA when tool tip is presented (now displays,
'Log entry is a null value').
- Fixed issue with actions modified warning not being the topmost form when, 'always on top'
is selected.
v1.8.3
- Bug Fixes
- Fixed an issue that caused some to not be able to have access to a working speech engine without
running as an administrator.
v1.8.2
- Improvements
- Added extra verbiage to speech engine error screen to suggest running VA as an admin
(due to potential permission issues). Not necessarily an improvement (but not a bug fix).
- Bug Fixes
- Fixed issue with minimize on startup and minimize to system tray not working together.
v1.8.1 - Steam version only
- Bug Fixes
- Fixed issue with export/import screens crashing application.
v1.8
- Design Changes
- .Net Framework 4.7.2 is now required. This is to aid in ongoing plugin / inline function development.
- Global targeting settings have been removed from the main screen. You can still target applications by
using the profile and command, 'Send commands to this target' options. These options are located in the
Profile Options and Command screens, respectively.
- Complete UI overhaul using new controls to help with screen scaling. The first round of updates is intended
to reproduce the UI of the original controls as much as possible.
- 'Compact Mode' button has been removed and replaced by, 'Compact Mode' menu option in the system menu (icon
in the top-left corner).
- Default audio output type is now, 'Integrated Components' when VA is first installed (used to be
Windows Media Components).
- Exporting a profile now defaults to exporting as a compressed binary. This is labeled
simply as, 'VoiceAttack Profile' in the profile export dropdown. Exporting as XML has
been renamed, 'VoiceAttack Profile Expanded as XML'.
- Creating a new profile will stop any running commands when the, 'Add Profile' screen is
opened.
- Improvements
- Added support for selecting from four joystick devices (up from 2).
- Added, 'Loop Start - Repeat Indefinitely (Infinite Loop)' that starts a looping block
that loops continuously.
- Added text-to-speech effect sets. Effect sets are a combination of sound effects that you can
apply to tts voices for a custom sound. You can manage effect sets in two ways: from the Options
screen and from the, 'Say something with TTS' screen. Effect sets can be exported and imported
and are saved in a new .dat file in VoiceAttack's .dat folder (named, VAEffects.dat). Effects
currently include echo, reverb, distortion, flanger, phaser, 'auto wah', chorus and pitch shift.
- Added access to VoiceAttack's internal sounds from the, 'Play a Sound' and 'Play a
Random Sound' screens. The path to the internal sounds is, 'internal:', followed
by the name of the sound. For example, 'internal:Abinkle' will play the, 'Abinkle'
sound. For convenience, the file input box is now a drop-down list that will allow you
to select the sounds.
- Added, 'Capture a Screenshot' action that allows you to capture the active window, primary screen,
entire desktop or region to the clipboard, a file or to a folder (with automatically-named files).
- Updated Options > Audio > Feature On Sound, Feature Off Sound and Stop Commands Sound
dropdowns to preview sounds when values are changed.
- Added some new sounds to VoiceAttack's internal sounds: 'cutsthru', 'hooweehoo', jarmouth',
'later', 'pom', 'powerplus', 'quitter', 'sapsapsap', 'shieldhit', 'squeepatpat', 'tonk' and,
'why'. 'Stop' and, 'start' are added as selections (they used to only be available as default
selections).
- Added advanced ability to access sounds in your own resource files.
- Added, 'Active Window' as an option to, 'Set Audio Volume' action.
- First round of sound file caching has been added. The maximum size of the cache (up to
256 mb) can be set from the Options > Audio tab with the 'Audio Cache Size' option. Set
to zero to disable audio caching. Note that audio caching is only available when,
'Integrated Components' is selected as the audio output type.
- 'Prefetch' option added to the, 'Play a sound' action. This will allow a sound file to
be loaded into memory when the profile is changed. Prefetching audio is only available
when 'Integrated Components' is selected as the audio output type.
- 'Disable Audio Prefetch' option added to Options > System/Advanced tab. This will allow
an override of any profiles that have 'play a sound' actions that also have, 'prefetch'
enabled.
- 'Preserve Prefetched Audio on Profile Change' option added to Options > System/Advanced tab
to allow the retention of prefetched audio between profile loads.
- Added, '-prefetchstats' command line parameter that will display a brief summary of
prefetched items in the log on profile change.
- Added, 'Reset Active Profile' system menu item. This works the same as the, 'Reset Active
Profile' action, which means that this will invoke everything that normally occurs during
a profile change (without actually changing the profile).
- Added proxy Profile function 'ProfileInternalIDs()' which returns an array of GUIDs of all
profiles that have non-null internal ids.
- Added {STATE_JOYSTICK1ISGAMEPAD}, {STATE_JOYSTICK2ISGAMEPAD}, {STATE_JOYSTICK3ISGAMEPAD},
{STATE_JOYSTICK4ISGAMEPAD} tokens to indicate if the corresponding joystick has been designated
as a gamepad controller in VA. If the joystick is a gamepad controller, the rendered value will
be "1". If the joystick is not indicated as a gamepad controller, "0" will be rendered.
- Added proxy State.Joystick Boolean functions, 'Joystick1IsGamePad()','Joystick2IsGamePad()',
'Joystick3IsGamePad()', 'Joystick4IsGamePad()' that correspond to the new tokens added above.
- Added {STATE_JOYSTICK1LEFTTRIGGER}, {STATE_JOYSTICK2LEFTTRIGGER}, {STATE_JOYSTICK3LEFTTRIGGER},
{STATE_JOYSTICK4LEFTTRIGGER}, {STATE_JOYSTICK1RIGHTTRIGGER}, {STATE_JOYSTICK2RIGHTTRIGGER},
{STATE_JOYSTICK3RIGHTTRIGGER}, {STATE_JOYSTICK4RIGHTTRIGGER} that return the value of
the left and right triggers (gamepad controllers only). The rendered value range is "0"
to "255". If the stick is unavailable or not indicated as a a gamepad controller, the rendered
value will be "-1".
- Added proxy State.Joystick integer functions, 'Joystick1LeftTrigger()',
'Joystick2LeftTrigger()', 'Joystick3LeftTrigger()', 'Joystick4LeftTrigger()',
'Joystick1RightTrigger()', 'Joystick2RightTrigger()', 'Joystick3RightTrigger()',
'Joystick4RightTrigger()' that return a value of 0 to 255 if the joystick is indicated as a
gamepad controller, or -1 if the joystick is not indicated as a gamepad controller (or is
unavailable).
- Added proxy State.Joystick methods for joystick 3 and joystick 4.
- Added optional parameter, 'CompletedAction' to proxy.Command.Execute (both by command name
and by internal id). This parameter allows you to specify a callback function that is called
when the executed command completes. This is a test feature - which means it may or may not
remain as an exposed feature.
- Command screen now has a warning box that is displayed if canceled with actions changed.
- Added {STATE_JOYSTICK1LEFTTRIGGER} {STATE_JOYSTICK2LEFTTRIGGER} {STATE_JOYSTICK3LEFTTRIGGER}
{STATE_JOYSTICK4LEFTTRIGGER} {STATE_JOYSTICK1RIGHTTRIGGER} {STATE_JOYSTICK2RIGHTTRIGGER}
{STATE_JOYSTICK3RIGHTTRIGGER} {STATE_JOYSTICK4RIGHTTRIGGER} tokens to check left/right
joystick trigger values. Note this is for devices listed as, 'Gamepad Controller (1-4)' only.
- Added, 'Toggle Listening', 'Toggle Hotkeys', 'Toggle Joysticks' and 'Toggle Mouse' actions.
These toggle the various inputs - if they're on, they are turned off. If they're off, they
are turned on.
- Comment actions are now searched from the profile edit screen's filter box.
- 'Set a Boolean Value' screen now includes a random ('coin flip') option.
- Bug Fixes
- Fixed issue with adding integer variables with names that had any uppercase characters.
- Improved some sound file handling when files are previewed and do not exist in the,
'Play a Sound' and 'Play a Random Sound' action screens.
- Fixed issue where reading text into a variable from a stream that does not end would
cause the command to not be able to be stopped.
- Fixed issue with {TXTLASXTPOS} not working right with an empty string and a variable
that does not exist.
- Fixed issue with {RANDOM}, {CONDITIONFORMAT}, {INTFORMAT}, {SMALLFORMAT} always
returning a comma for the thousand separator regardless of locale.
- Fixed issue with sounds not stopping properly when stopped while using, 'Integrated
Components'.
- Fixed issue with keyboard hook disconnect after multiple, rapid, 'stop command'
executions.
- Fixed mouse hook issue where loading may cause brief delay on startup.
- Fixed some issues with joystick z-axis tokens breaking when using a device designated as
'Gamepad Controller (1-4)'.
- Fixed issue with TTS and blank entries resulting in an exception log entry or exception message box in
preview.
v1.7.8
- Design Changes
- Getting a target by window class name now requires the use of the prefix, '+'. For example, if you
are searching for a window that has a class name, 'foo', simply search for, '+foo'.
- Improvements
- Targeting for subcommands optimized.
- Added, SetOpacity(int value) method to the proxy object. Works exactly like the -opacity command line
parameter.
v1.7.7
- Bug Fixes
- Fixed issue with users that have corrupt user.config files not working any more.
- Fixed issue with legacy plugins no longer working if the profile was changed or commands stopped.
- Fixed issue with proxy command Execute() method not executing commands referenced by internal id in
linked profiles.
- Improvements
- Added proxy property, 'IsTrial' that returns true if VoiceAttack is in trial (non-registered) mode.
v1.7.6
- Design Changes
- Replaced sliders for sound/tts offset on Options > Audio tab with numeric input boxes.
- Improvements
- Added character prefix helpers to targets. If '^' is prepended to the, 'send commands to' target,
the target search is limited to only window titles. If '~' is prepended, only process names are
searched. If '+' is prepended, only class names are searched. For example: '^*notepad*' will
only search all window titles that contain, 'notepad'.
- Added, 'End at Position' to, 'Play a sound' action.
- Added workaround for wireless Xbox controllers. Controllers identifying as gamepads will now show an additional
option of 'Gamepad controller' in the selection list. This also adds support for left and right triggers as
buttons 11 and 12.
- Added joystick POV, 'button' support to conditions.
- Speed improvement for importing profiles (more noticeable with profiles with a large number of commands).
- Updated main screen images to be a bit more scalable.
- Sounds folder and apps folder in Options > General are now browsable by clicking.
- Startup tip that advises to add more commands now a tiny bit smarter about displaying within
default profile.
- Added, 'ProfileNames()' function to vaProxy that returns a string array of all profile names.
- Added action support for changing default communication recording and playback devices.
- Added -inputcomms, -inputcommsx, -outputcomms and -outputcommsx command line parameters that change
Windows' default recording and playback communication devices.
- Added, 'Set Windows Default Communications Playback/Recording Device on Startup' option to
Options > Audio tab.
- Added tokens {STATE_DEFAULTPLAYBACKCOMMS} and {STATE_DEFAULTRECORDINGCOMMS} that render the names
of the default communications playback and recording devices.
- Added proxy State string functions DefaultPlaybackComms() and DefaultRecordingComms() that return
Windows' default communications playback and recording devices.
- Added token {TXTWORDTONUM} which replaces "zero" through "nine" with "0" through "9". This is simply
to help a bit with the way the speech engine interprets single-digit numbers.
- Added, 'Wait for X seconds between keys' option for Quick Input that allows a pause between key release
and the next key press.
- Added command line parameter -priority which adjust the process priority of VoiceAttack. The values can
be, 'low', 'belownormal', 'normal', 'abovenormal', 'high', and 'realtime' (all without quotes). Note that
running with a value of, 'realtime' requires VA to be run as an administrator. This only works against a
newly-created instance of VA and does not work against a running instance. Example: -prority high
runs VA with a high-priority process.
- Added token, '{CMD_WILDCARDKEY}' which returns the non-variable portion of a wildcard spoken phrase.
- Added proxy Command function, 'WildcardKey()' which returns the non-variable portion of a wildcard spoken phrase.
- Added proxy function, 'Close()' which closes VoiceAttack (same as clicking the close button on the main screen).
- Added a, 'stop commands' button to the profile screen that will stop commands/sounds (works just like the
one on the main screen).
- VoiceAttackFault.txt is now written to C:\Users\YOUR_USER_NAME\AppData\Roaming\VoiceAttack if it cannot
be written to the installation directory.
- Added, '{ACTIVEWINDOWPATH}' token that renders the executable path of the active window.
- Added 'ActiveWindowPath()' method to the proxy's Utility object. This returns the executable path of the
active window.
- Added, 'Execute(string CommandName, optional Boolean WaitForReturn, optional Boolean AsSubcommand) and
Execute(Guid InternalID, optional Boolean WaitForReturn, optional Boolean AsSubcommand) methods to the
proxy's Command object. This overload adds the, 'AsSubcommand' option which allows the executed command
to be executed as a subcommand to the calling command. This allows the executed command to gain certain
attributes, such as the command-shared variables as well as non-blocking when the calling command is
executed synchronously.
- Log message regarding privileges not being elevated and running as admin on startup now has a right-click,
'Stop showing this message' which hides the message. This can be reset by running VA with the
(new) -resetwarnings command line parameter.
- Startup tip that advises to add more commands can now be right-clicked and switched off (use -resetwarnings
to turn this back on).
- Updated the System Info button on the Options > General tab to include shortcuts to MSInfo and DxDiag.
- Increased the line height of profiles exported as html.
- Added information links to the bottom of the, 'Perform a Window Function' action screen that allow you
to view information about the active window such as the window title, process name, location, size
and underlying class name. Clicking each of these will copy their values into their respective input boxes.
- Added option, 'Run VoiceAttack as an Administrator' to the Options > System/Advanced tab. This will
attempt to allow running as an administrator (without all that right-clicking).
- Added command line parameter, '-clearasadmin' to clear the, 'Run as an Administrator' setting (in case
'Run as an Administrator causes some type of situation that cannot be broken).
- Added command line parameter, '-asadmin' to attempt to launch VoiceAttack as an administrator for
the current session.
- Reduced the overall height of the Options screen to help with lower-resolution setups.
- Bug Fixes
- Fixed issue with {CMD_BEFORE} token sometimes truncating output.
- Fixed issue with Utilities flyout menu items not working if speech engine is not enabled.
- Fixed issue with copying and pasting commands into a profile that has an flag set.
- Fixed issue when deleting a command that is referenced within the profile's options page not also
removing the reference.
- Fixed issue where selecting the same profile from the dropdown list would still fire the profile
unload command.
- Fixed mouse shortcut threading issue that would cause VA to momentarily hang under certain conditions.
- Attempt to not briefly display red, 'mute' icon when speech engine goes unavailable in certain configurations.
- Fixed issue with KeyPress screen mass update dialogs sometimes causing VA to crash.
- Fixed an issue with pasting/duplicating condition builder items.
- Several action caption corrections.
- Fixed issue with restricting mouse movement not working unless other mouse actions are turned on.
- Restrict mouse movement/block mouse input is now cancelled if a, 'Stop all commands' action is executed.
(Not implemented on a single command kill - the check would be too costly to see if other commands overlap).
v1.7.5
- Improvements
- Added option, 'Allow command segment info for composite commands' to System/Advanced screen. This option will
allow the bypass of processing command segments for composite (prefix/suffix) commands. This will prevent
performance bottlenecks imposed on those that do not use command segments for composite commands.
v1.7.4
- Design changes
- Changed, 'Profile Options' button from icon to an actual button that says, 'Options' - this is to make
the button more noticeable as the icon kind of escapes notice.
- Changed proxy GetCommand() to Command.Name(). GetCommand() is still available at the proxy level for backward
compatibility.
- Changed proxy CommandExists(String commandName) to Command.Exists(String commandName). CommandExists(String commandName)
is still available for backward-compatibility.
- Changed proxy CommandActive(String commandName) to Command.Active(String commandName). CommandActive(String commandName)
is still available for backward-compatibility.
- Changed proxy GetProfileName() to Profile.Name(). GetProfileName() is still available at the proxy level for backward
compatibility.
- Changed proxy ExecuteCommand(String commandName, Boolean waitForReturn = false) to
Command.Execute(String commandName, Boolean waitForReturn = false). ExecuteCommand() is still available at the
proxy level for backward compatibility.
- Moved proxy ParseTokens(string Value) to the proxy Utility class. ParseTokens(string Value) is still
available at the proxy level for backward compatibility.
- Moved proxy GetAuthorID(), GetProductID(), GetAuthorTag1(), GetAuthorTag2(), GetAuthorTag3() to
Profile.AuthorID(), Profile.AuthorTag1(), Profile.AuthorTag2(), ProfileAuthorTag3().
GetAuthorID(), GetProductID(), GetAuthorTag1(), GetAuthorTag2(), GetAuthorTag3() are all still
available for backward-compatibility.
- Moved proxy ExtractPhrases(string Phrases) and ExtractPhrases(string Phrases, optional Boolean TrimSpaces,
optional Boolean Lowercase) to the proxy Utility class. Both are still available for backward-
compatibility.
- Moved proxy CapturedAudio(int Type) to Utility.CapturedAudio(int Type). CapturedAudio(int Type) is still
available for backward-compatibility.
- Improvements
- Added a somewhat experimental option, 'Recognition' on the command edit screen as a test to try to
get a little bit more speed out of speech recognition. The three options are:
'Normal' - which processes the command the same way VA always has which is waiting until the speech
engine fully completes a speech event before, 'recognizing' a spoken phrase.
'Continuous Speech' - which attempts to find your spoken phrases within continuous speech (that is,
*while* the speech engine is still engaged in the speech processing).
'Restricted continuous speech' - which works just like, 'continuous speech' (above), but restricts
what is detected as a spoken phrase to the start of the speech event. Hands down, this option is
my new favorite thing could have justified a full release on its own ;)
- Rearranged command screen in order to accommodate those with a screen height of 768 pixels.
- Added -running command line parameter that writes 0 to stdout if no instances of VoiceAttack are
currently running, and 1 if an instance of VoiceAttack is running.
- Added, 'Evaluate 'Not Set' as false' to the Set a True/False (Boolean) Value screen's toggle option.
- Added command line parameters '-darkon' and '-darkoff' to turn on and off the dark mode setting on
the main screen ('Cover of Darkness'). Note these only affect the launched instance.
- Added experimental command line parameters '-noclasses' and '-noprocs' to exclude class names and
process names when searching for applications, respectively. This is to help speed up processing
by eliminating items that are not used (that is, if a window is not found by window title, the check
will conclude sooner rather than continuing to check for either processes or class names).
These are considered experimental as they are included for various testing. If testing is positive
for these items, they will become UI elements in a future release.
- Added, 'Reset Speech Recognition' menu item to the system menu on the main screen. Selecting
this will reset the speech engine (and not reset the entire profile).
- Added media keys to Quick Input / Variable Keypress / Variable Hotkeys - [VOLUMEMUTE], [VOLUMEDOWN],
[VOLUMEUP], [NEXTTRACK], [PREVTRACK], [STOP], [PLAYPAUSE].
- Added author flag element to the command-level flags. This flag will allow the author to
indicate a friendly message for the command if the flag is set to lock the command. This
overrides the element at the profile level.
- Added author flag element to the profile-level flags. This flag will allow the author to
indicate a message for all commands that have their element set at the command level.
- Added author flag element to the profile-level flags. This flag indicates that no new commands
may be added to the profile. This was implemented to prevent data loss for profiles that should be,
'included' rather than edited directly.
- Added author flag element to the profile-level flags. This flag can be used to indicate a
friendly message to the end user that explains why the new commands are not allowed.
- Added tip to log to add some commands if there are only a few commands in your profile and the
spoken phrase is unrecognized.
- Added, 'Mute Speech Recognition Device' to system menu. This mutes/unmutes the recording device that
the speech engine is currently using.
- Added, 'Speech Engine Recording Device' as an option to, 'Recording Device' on the 'Set Audio Level'
screen. This is so you can just specify whatever the speech engine is currently using without
having to know exactly what device it is.
- Added command line parameter, '-showcommandnames' that will make the VA log entries display the
current command name when a command is executing (for debug purposes).
- Added tokens, '{STATE_JOYSTICK1ENABLED}' and, '{STATE_JOYSTICK2ENABLED}' which render as '1' or '0(())'
depending on whether or not the joystick is enabled. These have actually always been in there, just
did not get documented o_O.
- Added, '{STATE_JOYSTICKSHORTCUTS}' that renders "1" if joystick button shortcuts are on, "0" if not.
Somehow this was missed long ago when these tokens were added.
- Added token, '{STATE_SPEECHDEVICEMUTE}' to test if the recording device that the speech engine is using
is muted or not. This renders '1' if muted, '0' if not.
- Added token '{STATE_SPEECHDEVICEVOL}' this returns the volume of the recording device that the speech
engine is currently using rendered as a value from '0' to '100'.
- Added, 'InternalID' author flag to profiles. This is a nullable Guid (GUid?) value that
can be supplied by authors to identify individual profiles.
- Added, 'InternalID' author flag to commands. This is a nullable Guid (Guid?) value that can
be supplied by authors to identify individual commands.
- Proxy Updates
- Added proxy property, 'InstallDir' to the root proxy object. This indicates the installation directory of VA.
- Added proxy properties, 'SoundsDir', 'AppsDir' and 'AssembliesDir' to the root proxy object. These indicate VA's
sounds directory, apps directory and assemblies directory.
- Added proxy property, 'IsRelease' to the root proxy object. This is a boolean value to indicate whether or
not the current version of VA is a released version.
- Added proxy property, 'PluginsEnabled' to the root proxy object. This is a boolean value to indicate if
plugins are enabled (from within an inline function, of course (lol)).
- Added proxy property, 'NestedTokensEnabled' to the root proxy object. This is a boolean value to indicate if
the nested tokens option is turned on or not.
- Added, 'Command' object to the plugin/inline function proxy that contains a set of methods that pertain
to VoiceAttack commands. There are new methods as well as a set of methods that were previously only
available through token rendering.
- Added, 'Profile' object to the proxy that contains methods that pertain to VoiceAttack profiles. There are
new methods as well as a set of methods that were previously only available through token rendering.
- Added, 'Queue' object to the proxy that contains methods that pertain to VoiceAttack command queues.
- Added, 'State' object to the proxy that contains methods that relate to various VoiceAttack/system
states. These are almost all direct ports of the state tokens that are currently available.
- Added a 'Joystick' object to the new, 'State' object that has direct ports of all the joystick state tokens
into typed methods.
- Added, 'Utility' object to the proxy that contains some (hopefully) helpful functions. There are new
methods as well as a set of methods that were previously only available through token rendering.
- Added optional parameters, 'trimspaces' and 'lowercase' to the VAProxy, 'ExtractPhrases' function (both default
to false). Passing in a true value for, 'trimspaces' will return all elements without leading or trailing
spaces. Passing in a true value for, 'lowercase' will return all elements as lowercase.
- Added, 'CommandsStopped' event to the proxy object for use within inline functions so that your
inline function can be notified when the, 'Stop All Commands' action has been executed (or the
button on the main screen has been pressed).
- Added, 'ProfileChanging' and 'ProfileChanged' events to the proxy object for use within inline
functions so that your inline function can be notified when a profile is changing or has changed.
- Added, 'ApplicationFocusChanged' event to the proxy object for use within inline functions so that your
inline function can be notified when a focused application has changed. This takes advantage of the
auto profile switching thread, so, auto profile switching must be turned on for this event to fire.
- Bug Fixes
- Command not able to be executed on paste has been corrected.
- Installer now removes legacy files that may cause conflicts for some users.
- Fixed issue with not preventing last profile from being deleted.
- Fixed command screen ui anomalies introduced in prior releases.
- 'Copy To' feature from the Profile edit screen not respecting flags has been fixed.
- Fixed issue where [LSHIFT] was excluded from variable hotkey processing.
- 'Reset the Active Profile' action now works again when adding it.
- Registry settings for Last Run now updated when options updated.
- Pressing, 'F1' on the Recorder screen no longer shows the help doc if recording.
- Increased 'Get User Input' text size from 64 characters to 32767.
- Scroll bar for, 'Set a Text Value to the Windows Clipboard' is now turned on.
- Added some crash prevention when mouse scrolling through profile list.
- Fixed issue where importing commands from other profiles was not updating the speech engine.
- Fixed issue where {CMDSEGMENT} token not working with composite (prefix/suffix) commands.
v1.7.3
- Design Changes
- Text-to-speech (TTS) simultaneous voices have been limited to three total when, 'Single TTS Instance'
is not enabled.
- Duplicate, 'when I say' phrases are no longer allowed when there are duplicate, disabled commands.
- Moved, 'Disable Speech Recognition' from Options > System/Advanced to Options > Recognition.
- Improvements
- Added, 'Use variable hotkey' feature to keyboard shortcuts. This will allow you to specify a
text variable to indicate the hotkey(s) to monitor for the selected command. The notation to
indicate the keys to use is the same that is used for Quick Input and variable keypresses. Note
that any variable changes will require the use of the newly-added, 'Refresh variable hotkeys' action.
Note that only global and profile-scoped variables will work with this feature.
- Added, 'Command Queues - Enqueue Command' and 'Command Queues - Queue Action' actions to the
VoiceAttack Action menu. These will allow creation and control over command execution queues.
Command execution queues execute commands serially (that is, one after the next) as each is
completed. Queues can be named so that you can have multiple queues for various purposes.
- Added, 'Refresh Variable Hotkeys' action to update VoiceAttack's hotkey monitoring after a
text variable value has been changed.
- Added balance (pan) feature to, 'Play a Random Sound' action.
- Added variable volume and balance to the, 'Play a Random Sound' action that will override the setting
of each slider bar.
- Added variable volume and balance to the, 'Play a sound' action that will override the setting
of each slider bar.
- Execute command by name will now include composite commands (prefix + suffix).
- Added, 'AuthorID' and 'ProductID' to profiles. These are GUID values that can be modified within
exported XML. These values can be accessed by calling proxy methods, 'GetAuthorID()' and
'GetProductID()', respectively.
- Added, 'Block potentially harmful profile actions' to Profiles Options > Advanced tab.
When selected, this works to prevent the following from occurring:
- Profile switch actions (action prevented)
- Profile startup command execution (command not executed)
- Profile unload command execution (command not executed)
- Commands locked by author flag (command not executed)
- Run an application actions (action prevented)
- Stop process actions (action prevented)
- Inline function actions (action prevented)
- Plugin execution actions (action prevented)
- Unrecognized catch-all command execution (command not executed)
- Dictation recognized command execution (command not executed)
- Added option, 'Upon import, profiles will have, 'Block potentially harmful profile actions'
selected'. This will flag each imported profile so that they may be inspected prior to use.
- Added, 'Advanced' tab to Profile Options screen.
- Added option, 'Prevent speech engine from changing microphone volume' to Options >System > Advanced
screen. This will attempt to prevent the speech engine from changing the mic volume to compensate
for a quiet or loud training environment. This is a Windows-level adjustment and
affects all running instances of the speech engine. *Not a replacement for a properly trained
speech engine.
- Added the ability to use tokens in the Responses for the, 'Wait For Spoken Response' action.
There is an experimental element to this, where the speech engine is initialized to accept the
variable responses WITHOUT having to reset the profile (and subsequently the speech engine).
Note that the limit for responses is still 250 items.
- Added mouse button down/up toggle option (Mouse > Click screen).
- Updated joystick component to .Net framework 4.5 and merged libraries into one dll (VAJS.dll).
- Added, 'ExtractPhrases' function to VAProxy for use in plugins and inline functions. This accepts a
string containing single, multipart and dynamic phrases and will break it up into a string array of
single phrases. For example, 'hello;hi;howdy' will result in an array with three elements: hello,
hi and howdy. 'good[morning;day;night;gravy]' will result in an array with four elements: good
morning, good day, good night, good gravy.
- Added Pause shortcuts on the Command screen. The last pause value entered is now a menu item
that can be added without opening the pause screen. Also, a flyout containing some common pause
values is now available. This pause set can be configured by adding a semicolon delimited string
to the SpecificPauseValues element in the user.config file (e.g. 0.25;1.2;3.7;88). Not sure if
that's going to be officially documented or not.
- Added, 'CommandActive' function to VAProxy for use in plugins and inline functions.
- Added token, '{CMDACTIVE:}' to test if a command is active or not. If the command is active, '1'
is rendered. If the command is not active, '0' is rendered.
- Updated, '{CMDACTION}' token to also include, 'DictationRecognized' which will be rendered if
the command was invoked due to a dictation phrase being recognized.
- Added token, '{STATE_CULTURE}' and '{STATE_UICULTURE}' to indicate the default user locale of
the system and the default user interface language, respectively.
- Added tokens, '{EXPDECINV}' and '{DECINV}' to provide invariant culture support for decimal
rendering.
- Added token, '{QUEUESTATUS:name}' to indicate the status of the indicated queue (Such as
running, idle, paused, stopped, etc.).
- Added token, '{QUEUECMDCOUNT:name}' to indicate the number of commands added to the
indicated queue.
- Added token, '{QUEUEACTIVECMD:name}' to indicate the name of the command running within
the specified queue (if applicable).
- Added token, '{QUEUECOUNT}' to indicate the number of created queues.
- Added token, '{CMDLASTUSEREXEC}' that indicates the number of seconds since the last command
executed by spoken phrase, keyboard key press, mouse click or joystick button press. That is,
it does not include subcommands, commands executed externally, right-click execute, etc.
- Bug Fixes
- Set Audio Level screen OK button not enabling when, 'Application' selected has been fixed.
- Fixed issues with text-to-speech being easily overloaded and not completing.
- Various range checking and messages regarding range checking updated for setting small int, int and
decimal values.
- {AUDIOPOS} token not working correctly when sounds set to, 'wait until complete' has been fixed.
- Fixed radio button grouping issue on mouse click screen when involving the scroll options.
- Fixed issue on mouse move screen not selecting default options when changing from mouse click to
mouse move.
- Fixed parsing error in {EXP} that was not using the invariant culture.
- 'Wait for spoken response' and 'Restrict Mouse Movement' as favorite actions now working.
v1.7.2
- Emergency Bug Fix
- Fixed issue with settings conflict keeping some users from changing options.
v1.7.1
- Design Changes
- Added new, 'Profile Exec' tab to Profile Options/Overrides screen. Moved the command exec options
to this tab (page was getting way too tall).
- Removed 'Exit VoiceAttack' icon from task bar jump list.
- Improvements
- Added, 'Wait for Spoken Response' action to, 'Other Stuff'. This is to help provide a simple
way to wait for a response from the user (without having to make several commands). Just indicate
the possible responses that the user may provide (dynamic, multipart), the text variable name to
hold the response and a timeout.
- Added, 'Profile Unload Command' to Profile Options. This is a command that can be specified to
execute immediately before a profile is unloaded. A profile is unloaded when another profile is
selected, or, when VoiceAttack is shutting down. You can distinguish between the two types of
unloading by checking the value of the {CMDACTION} token (see below). Note that the profile that
is selected to be loaded will wait until the unload command completes, and any startup command
will execute after the unload command. Note that VA's shutdown will be delayed until the command
completes.
- Added, 'Convert a Variable Value' screen to, 'Other Stuff'. This provides a slightly more direct
(and somewhat faster) approach to converting values from one type to another (without having to use
tokens).
- Added individual playback and recording device selection in the, 'Set Audio Level' screen.
- TTS output channel is now selectable if you are using, 'integrated components' (also included
in mass update).
- Added "\Shared\Assemblies" folder to VoiceAttack installation directory to serve as an additional
assembly repository. This becomes an alternate location to just putting assemblies in VA's root
directory. This will help mostly with inline functions that are not precompiled and with plugins/
inline functions that access common assemblies. Updated the documentation in regards to references
(both inline functions and plugins).
- Added, 'Block Keyboard Input' feature to, 'Other Stuff > Windows'. This will allow you to block,
unblock and toggle block/unblock on various keyboard keys.
- Added, 'Block Mouse Input' feature to, 'Other Stuff > Windows'. This will allow you to block,
unblock and toggle block/unblock various mouse actions (click, scroll, move). This kind of does
double-duty to allow speed reduction of the mouse.
- Added, 'Stop command by name' option to, 'Stop another command' screen.
- Added, 'Captured Audio' screen to, 'Other Stuff' screens. This is basically for fun as it gives a
UI element to the plugin/inline function's CapturedAudio() function. You can play back or save
the audio captured by VoiceAttack's input.
- Moved/added often-used Windows speech utilities to Options > Recognition tab, 'Utilities'
button. Might save a few clicks.
- 'Run an application' parameter box now accepts environment variables.
- Added 'Override Default Playback Device' to Options > Audio tab. This will allow you to
specify a playback device to override the playback channel for all, 'Play a sound'
actions when, 'Default' is selected ('Default' is what is set as Windows' default device).
- Added 'Override Default Text-to-Speech Device' to Options > Audio tab. This will allow you to
specify a playback device to override the playback channel for all, 'Say Something with TTS'
actions when, 'Default' is selected ('Default' is what is set as Windows' default device).
- Added basic plugin manager to options screen to allow enabling/disabling of individual plugins.
- Device conditions now include joystick X & Y positions and mouse X & Y positions (screen and app).
- Added, 'ClearLog()' method to VAProxy that simply clears the log on the main screen.
- Added, 'Get User Input - Text', 'Get User Input - Choice', 'Get User Input - Integer' and
'Get User Input - Decimal' screens. These will allow you to present the user with a very basic input
screen and be able to capture that input in a variable.
- Main screen log can now select all with Ctrl + A and copy with Ctrl + C.
- Updated import warning messages to include inline functions and plugin access.
- Added, 'Disable speech recognition (this session only)' option to the load options screen.
- The option, 'Show window titles' on the, 'Load Options' screen changed to, 'Show window info'.
The feature that this enables will now show both the window title and the process name in the log.
- Added, 'Extract Multipart and Dynamic Commands' option to HTML export. This will expand multipart
and dynamic commands on to separate lines.
- Last run info written to registry: HKCU/Software/VoiceAttack.com/VoiceAttack/LastRun.
- Added {STATE_AUDIOLASTFILE} token which renders the file name of the last-played audio file.
- Added token, '{SPACE}'. Just renders a space o_O
- Added token, '{NEWLINE}'. Just renders as a new line (\r\n).
- Added token, '{PROCESSEXISTS:}' that renders a '1' if the process name exists and '0' if it does not
(wildcards accepted).
- Added token, '{PROCESSCOUNT:}' that renders the count of processes that match the name given (wildcards
accepted).
- Added token, '{NEXTPROFILE}' that can be used within a profile unload command to get the name
of the profile that has been selected to load after the current profile is unloaded. This token
will render as empty if the profile is not unloading or if the profile is unloading due to VA
shutting down.
- Added tokens, '{NEXTPROFILE_AT1}', '{NEXTPROFILE_AT2}', and '{NEXTPROFILE_AT3}' that can be used
within a profile unload command to get the author tags of the profile that has been selected to
load after the current profile is unloaded. These tokens will render as empty if the profile is
not unloading or if the profile is unloading due to VA shutting down.
- Updated, '{CMDACTION}' token to also include, 'ProfileUnloadChange' and 'ProfileUnloadClose'.
The command will have these action types if the profile has an unload command specified.
'ProfileUnloadChange' will be rendered if the profile is changing to another profile.
'ProfileUnloadClose' will be rendered if VoiceAttack is shutting down.
- Added tokens '{PROFILE_AT1}', '{PROFILE_AT2}', and '{PROFILE_AT3}' that render each of the three
author tags within the current profile.
- Added tokens '{PROFILE_AT1:value}', '{PROFILE_AT2:value}', and '{PROFILE_AT3:value}' that render
each of the three author tags for previously-loaded profiles specified by, 'value'.
- Added tokens '{PREVIOUSPROFILE_AT1}', '{PREVIOUSPROFILE_AT2}', and '{PREVIOUSPROFILE_AT3}' that render
each of the three author tags within the last-loaded profile.
- Added token, '{STATE_SYSDIR}' which renders the path of the system directory.
- Added token, '{STATE_WINDIR}' which renders the path of the windows directory.
- Added token, '{STATE_ENV:textValue}' token which will render the Windows environment variable for the
value indicated in, 'textValue'.
- Added token, '{VA_ASSEMBLIES}' which renders the path of VoiceAttack's Shared\Assemblies
folder.
- Added tokens, '{CMDTARGETMINIMIZED}', '{CMDTARGETMAXIMIZED}', '{CMDTARGETFOREGROUND}' that
render '1' if the current command's target is minimized, maximized or the foreground window. '0' if
not.
- Added tokens, '{WINDOWMINIMIZED:}', '{WINDOWMAXIMIZED:}', '{WINDOWFOREGROUND}' that
render '1' if the windows searched for is minimized, maximized or the foreground window. '0' if
not.
- Added tokens, '{PROCESSSMINIMIZED:}', '{PROCESSMAXIMIZED:}', '{PROCESSFOREGROUND}' that
render '1' if the process searched for has a main window that is minimized, maximized or the
foreground window. '0' if not.
- Added tokens, '{GUID}' and '{GUIDCLEAN}'. '{GUID}' renders a GUID (unique identifier), and
'{GUIDCLEAN}' renders a GUID without any dashes.
- Added tokens, '{DATETIMEFORMAT:textFormatVariable}' and '{DATETIMEFORMAT:dateVariable:textFormatVariable}'.
This returns a date/time as a user-formatted string, using standard format strings.
- Added tokens, '{TIMESTAMP}' and '{TIMESTAMP:dateVariable}'. This returns either the current date/time
or variable date/time formatted as a four-digit year, two-digit month, two-digit day, two-digit hour
(24 hour), two-digit minute, two-digit second and three-digit millisecond: 20180101123020500.
This could easily be done with {DATETIMEFORMAT}, but it's more of a matter of convenience (and not
having to know that the format is yyyyMMddHHssmmfff o_O).
- Added function CapturedAudio(int type) to the VoiceAttack proxy object for use in plugins and inline
functions. You can specify the type of audio, and what is returned is a memory stream (wave stream).
- Added, 'AuthorTag1', 'AuthorTag2', 'AuthorTag3' to profile-level author flags. These are text values
and can be accessed via VA proxy methods, 'GetAuthorTag1()', 'GetAuthorTag2()', 'GetAuthorTag3()'
(plugins and inline functions).
- 'CommandExists' function of VAProxy expanded to return all referenced commands and not just the active
profile's commands.
- Bug Fixes
- Fixed issue with closing certain dialog boxes also closing Profile edit screen.
- Fixed issue with inline function references not rendering tokens on test compile.
- Fixed compile issue with assemblies located inside of, 'Shared\Assemblies'.
- Fixed issue with -command parameter not working when, 'minimize to system tray' is active.
- 'Train speech engine' link on, 'Tips' screen has been fixed.
- Highlighted TTS remains highlighted after preview.
- Fixed issue where exporting profiles as HTML would not work if expanding an, 'execute another command'
if the target was a multipart/dynamic command.
- Fixed issue where copying a command to another profile was not saved if the target profile was not
edited.
- Fixed issue with repeat last command feature not updating the repeated command on edit.
- Fixed some issues with, 'dictation' that caused actual recognized commands to get mixed in with the dictation
buffer.
- Fixed issue with 'Run an application' not working with combined environment variables and tokens (path and
working directory).
- Fixed Condition Builder summary horizontal expanding issue.
- Minimize to system tray on startup no longer shows icon in task bar.
- Fixed issue with options screen resetting listening.
- Fixed command screen repeating radio button selection issue.
v1.7
- Design Changes
- Options > General > Display Size is no longer applicable. What VoiceAttack will now do
is allow Windows to adjust the sizing based on scale. If automatic sizing does not fit
your needed requirements, v1.6.9 will still be available for use. See the VA user forum
for more info.
- Moving the form by dragging from open space on the form has been removed.
- The 'Snap to edge' feature when moving a window to the edge of a screen has been removed.
- 'Select a special action' list on, 'Other stuff' screen has been removed.
- Improvements
- Added device state checks to conditions. You can now check to see if your keyboard keys/
mouse button/joystick buttons are down or up. You can also check if they are the only
keys/buttons down as well as check if any keys/buttons are down (or none at all). This
will allow you to do stuff like say, 'Fire Weapons' and VA can react based on what keys are
down. Or, if you are using a hotkey to execute a command, you can control flow of your
command based on a mouse button or joystick button or keyboard key or all or none or whatever
lol. For a while, this could be done with tokens, but now can be done right in the condition
screen (or condition builder).
- Added ability to export a VoiceAttack profile (.vap) as a compressed binary (it's still a .vap, just
a binary .vap).
- Added some author flags for use within VoiceAttack. See the help document section, 'VoiceAttack
Author Flags' for more info.
- Added, 'Global Profiles' option to the Options>General tab. This works exactly like the profile
includes option that is in the profile options screen. This will allow you to pick a cascading
set of profiles that will be included with when ANY profile loads. The commands in these selected
profiles will be overridden by commands in the profile options and then by the commands in the
active profile:
Priority:
- Active Profile
- Referenced, included profiles from the Profile Options screen
- Referenced, included profiles from the Global Profiles option on the Options screen
- The main screen is now sizable.
- Added, 'Repeat Command Phrases' to the Options>Recognition tab. This will allow you to specify
'repeat' phrases in a semicolon-delimited list. So, instead of saying, 'increase front shields'
over and over again, you can simply say, 'repeat' or 'repeat that'.
- Added an, 'Apply' button to the Profile screen. Been needing that for some time o_O
- Load speed improvements for most, 'Other Stuff' screens.
- Yet another attempt to allow even larger sets of commands to be added to profiles. In this go-round,
dynamic commands are placed more efficiently into the speech engine for use. This will hopefully
allow for a lot more dynamic commands, as well as a quicker load time.
- 'Cover of Darkness' option is now in the main screen's menu. This will allow you to toggle the
main screen's, 'dark mode', which was only available as a command-line parameter (the command line
parameter has been removed).
- Added, '-exit' command line argument to tell VoiceAttack's running instance to exit.
- Added, 'MainWindowHandle' property (get) to VAProxy for use with plugins and inline functions.
- Turned on basic code folding and rudimentary autocompletion (keywords and VA.*) and brace matching
for inline functions.
- Added some very basic auto-indenting for inline functions.
- 'Perform a Window Function' Window Title box now processes text variables and tokens.
- 'Perform a Window Function' Window Title has been overloaded to also search for windows by process id
if the value resolves to an integer.
- Automatic profile switching now allows for process name to be included. Works exactly the same as
the window title stuff that's already in there (wildcards). Search priority is window title, then
process name.
- Adding/updating command duplicate check is now a little quicker.
- Added, 'Min Unrecognized Confidence Level' option to the Options>Recognition tab. Setting this
value allows you to filter the, 'Unrecognized' log items a bit. The higher the value, the more
likely your, 'unrecognized' log items will be filtered out.
- Added, Export/Import Settings facilities on Options>System/Advanced tab. This will allow you to
backup your VoiceAttack settings and restore if needed. Note that your registration details and
profile data is not saved with this information. Also, your profiles and registration data will
be unaffected by an import of settings.
- Added link to Options>System/Advanced tab to browse VoiceAttack's data folder. Might save a
few steps explaining here and there ;)
- Added token, '{PREVIOUSSPOKENCMD}' as a quick way to retrieve the previously-spoken command phrase.
- Added token, '{SPOKENCMD:X}' as a way to access the history of spoken commands, starting at zero.
A value of zero ({SPOKENCMD:0}) is the same as getting the value of the {LASTSPOKENCMD} token. A
value of 1 is the same as getting the value of {PREVIOUSSPOKENCMD} ({SPOKENCMD:1}). A value of 2
would get the spoken phrase that was issued before the previous spoken command and so on. If
no history exists for the value, a blank (empty string) is rendered. The maximum number of items
in the history is 1000.
- Added token, '{PREVIOUSPROFILE}' as a quick way to retrieve the previously-loaded profile name.
- Added token, '{PROFILE:X}' as a way to access the history of loaded profiles, starting at zero.
A value of zero ({PROFILE:0}) is the same as getting the value of the {PROFILE} token. A
value of 1 is the same as getting the value of {PREVIOUSPROFILE} ({PROFILE:1}). A value of 2
would get the name of the profile loaded before the previous profile and so on. If no history
exists for the value, a blank (empty string) is rendered. The maximum number of items in the
history is 1000.
- Moved, 'Reset Screens' button over to the System/Advanced tab of the Options screen.
- Exposed, '-reverseprofilepriority' command line argument to allow for reversing, 'included' profile
priority. So, for example, your active profile's commands are lower priority than the included
and the included are lower than the global.
- Removed restriction on global, 'Stop All Commands' hotkey that required that the selected keys
are the only keys down in order for, 'Stop All Commands' to fire.
- Added, 'Silence' as a choice in feature sounds (Options => Audio). Now you don't have to turn
ALL the sounds off if you don't want just one of the sounds.
- Added, 'Reset the Active Profile' action to reload the current profile. The profile will be reloaded,
which means that any profile-scoped variables (variables prefixed with ONE '>') will be cleared. Persistent
profile variables (variables prefixed with '>>') will be retained. All commands will be reloaded and
any tokenized, 'when i say' phrases will be reevaluated. The speech engine will also be reloaded
(of course), and any executing commands will be stopped. As you can see, this is whatever a, 'change
profile' action does, just without actually changing.
- Made startup a little more forgiving (well... less crashy) when selecting, 'Lightweight'
variants of the Speech Platform 11 engines.
- Bug Fixes
- Fixed issue where playing a random sound from a directory would sometimes crash the app.
- Fixed inline function indenting issue.
- Fixed issue where clicking, 'Ok' on Options screen would enable listening if listening was disabled.
- Fixed issue when accessing, 'not set' command-scoped variables when using subcommands.
- Fixed issue where, 'Active Window' selection in, 'Perform a Windows Function' ceased to work.
- Fixed inline functions set as asynchronous not showing function exception messages.
v1.6.9
- Improvements
- Added audio channel selection when playing random sounds. Just like single audio file playback, you will
need to have, 'Integrated Components' selected as your audio output type in order for this feature to
be available.
- Bug Fixes
- Fixed critical issue with Recorder screen causing an error on save.
v1.6.8
- Improvements
- Profile set load/save time performance increased. This will be mostly noticeable on larger profiles and/or
profile sets.
- Profile edit load time improved for larger profiles (lots of commands and/or lots of actions).
- Added new action, 'Add a Loop Break' which will cause control flow within a loop to move to the End Loop action
(breaking the loop).
- Added, 'Default' override text-to-speech voice at the profile level. You can now specify a default voice for
your profiles (instead of Microsoft David o_O). This should work when you select, 'Default' as the voice as
well as if your token/variable name does not resolve to a valid voice name... that is, if the override also resolves
to a valid voice name (otherwise, it's Microsoft David for you lol).
- Added, 'Enable Sleep Mode' option on Systems/Advanced tab of the Options screen. When the Windows speech
engine is active, Windows is prevented from going to sleep on its own. When this option is enabled, VoiceAttack
will attempt to put the speech engine to sleep ('Sleep Mode') if no audio is detected after the number of seconds
you specify. When the speech engine is off, Windows will then be able to sleep if it is able. To wake up the
speech engine out of, 'Sleep Mode' just move the mouse, click a mouse button or press a keyboard key.
- Added, 'Windows Speech Recording Device' option to options screen. This will allow you to easily view and/or modify
the device that the speech engine is using (this is essentially a shortcut to the Windows setting so you don't have to dig
for it).
- Added the ability to provide a custom, 'interrupt' sound in place of the default sound (for stop all commands). Just
provide a, 'sys_stop.wav' to the VA install directory and that sound will be used. For more info, see the, 'For fun...
maybe' section in the help doc.
- Also for fun (maybe)... Added three new options to the Audio tab of the Options screen: 'Stop Commands Sound', 'Feature On
Sound' and, 'Feature Off Sound'. This will let you set the three base sounds (stop commands, listening on/off, mouse on/off,
etc.) in VA to something maybe more similar to your setup other than the default sound ;)
- Mouse clicks are a little bit more context menu friendly when not using the, 'bypass mouse targeting' option.
- Export as HTML will now respect the column order from the Export screen.
- Export as HTML now limits the height of all the rows to a single line (except for rows where, 'Actions' is
included).
- Holding down the Alt key while clicking the, 'Move Up' or, 'Move Down' buttons on the Command screen will move
the selected actions to the top or to the bottom.
- Removed restriction for, 'listen once' and 'toggle' options of the global listening hotkey that required the
selected hotkeys to be the only keys down to operate.
- Added a modifier to the, 'check for updates on startup' option which will allow you to check for new beta
versions along with the usual full-release versions.
- 'Active window' now a selection in the dropdown list for the, 'Perform a Window Function' action. This is so
you don't have to use the '{ACTIVEWINDOWTITLE}' token to get the same result.
- Removed byte order marker (BOM) from beginning of text when, 'Write to text file' is used. If this is somehow
needed out there by somebody, I'll make sure to put an option in to include it. For now, it's gone.
- Added token, 'STATE_VA_NESTEDTOKENSENABLED' to indicate whether or not the setting for using nested tokens
is on or not. "1" will be the rendered value if nested tokens are on, "0" if they are not.
- Added token, 'STATE_DIRECTORYHASFILES:textVariable' to indicate whether or not a directory contains any files.
"1" will be the rendered value if files exist, "0" if not. Note that if the directory that is queried does not
exist, "0" will be returned.
- Bug Fixes
- Fixed issue with Plugin interface v4's session state not retaining values set during, 'Invoke'.
- Fixed issue with command-scoped variables not not maintaining 'not set' state when returning from
a subcommand.
- A little less crashy when updating the task bar icon (especially when options are changed).
- Fixed issue where, 'Stop Sounds' action would not stop sound if, 'wait until complete' was checked.
- Fixed issue where a disabled multi-part command would allow single elements of the multipart command to be added.
- Fixed issue where environment variables would not be rendered properly when previewing sounds.
- Fixed issue where columns were missing from html export sheet when columns were moved around.
- Fixed issue where hitting ctrl+z (undo) or ctrl+y (redo) on command screen when, 'when I say' is focused, the
command actions would be modified.
v1.6.7
- Design change
- Instead of forcing to use legacy audio, the default output type will be, 'Integrated Components' if Windows
Media components are not installed.
- Improvements
- Steam security update.
- Added, 'Integrated Audio' support as an audio output option. This will allow VoiceAttack to play a wide range of
sound files and not require Windows Media Player (and its components) to be installed. Two additional benefits
of using 'Integrated Audio' are the ability to choose the output channel (speakers, headphones, monitor, etc.) and
adjust the balance (left/right) of the audio.
- New tokens: '{STATE_ANYKEYDOWN}' renders "1" if any keyboard button is pressed, "0" if no keys are down.
'{STATE_ANYMOUSEDOWN}' renders "1" if any of the five standard mouse buttons are pressed and "0" if no mouse
buttons are pressed. '{STATE_JOYSTICK1ANYBUTTON}' renders "1" if any of the buttons on joystick 1 are down, "0"
if no buttons are down. '{STATE_JOYSTICK2ANYBUTTON}' renders "1" if any of the buttons on joystick 2 are down, "0"
if no buttons are down.
- Bug Fixes
- 'Kill a process by name' feature now processes tokens as it says it should.
- Calculating integer values with capitalized variable names would cause the variables to not calculate.
This has been fixed.
- Mass update of TTS actions not updating everything within the same command has been fixed.
v1.6.6
- Improvements
- Steam security update.
- Added option, 'Load Profile on Startup' to the options page. Select a profile to load at startup,
regardless of last-used profile. I'm thinking this has been on the request list the longest ;)
- Removed token restriction on variable pause screen. You can now use any number of tokens/literals
that can resolve to either a decimal value or a decimal variable that resolves to a decimal value.
- Added token, {RANDOMDEC:lowValue:highValue} - This renders a random decimal between a low value and a
high value (inclusive).
- Bug Fixes
- Composite (prefix/suffix) commands that also have a profile override not allowing the override to be
optional has been fixed.
- Mic unplugged during edit no longer crashes the application.
- Package import (.vax) false warnings fixed.
- Profile global listening hotkey, 'prevent key from passing through' not working has been fixed.
v1.6.5
- Improvements
- VoiceAttack can now detect and use Microsoft Speech Platform 11 speech engines and text-to-speech synthesizers.
- Added, 'Condition Builder' feature to allow compound conditions. You can now, 'AND' and 'OR' your
conditional statements (If, Else If, Start Loop), and make your conditions a little easier to read
with fewer duplicated actions. You can also convert your existing conditional statements by right-
clicking on the action and selecting the, 'Edit with condition builder' menu item. There's a LOT going
on, so I'll defer to the help document (there's a new section titled, 'Using the Condition Builder').
- First round attempt to bulk load dynamic and composite (prefix/suffix) commands more efficiently.
- Added, 'Start Loop - Repeat Certain Number of Times'. There are two options. The first is to just
repeat a certain number of times. The second is to repeat a certain number of times using a range with an
optional specified indexer variable. This can be found in the, 'Add a Loop Start' submenu.
- Added mouse event recording to the, 'Recorder' screen. You can toggle the capture of mouse click/scroll/
tilt wheel by pressing a hotkey (assignable from the recorder screen). Also, mouse position is captured
via separate hotkey with application-relative coordinates available as an option.
- Changed, 'Set a Date/Time' value action to allow for a variable/token when adding time.
- First round attempt to isolate Steam VoiceAttack from the Steam environment to help with things like running
as an admin, starting with Windows and not showing, 'in app' when VA is started last.
- The "Say something with text to speech" screen voice selection dropdown now allows you to also type whatever you
want in the box. This can be a text variable or literal text and/or tokens that can also resolve to a variable
name. When the tts is rendered, an attempt is made to derive a voice from the name. If no valid voice is found
with the rendered name, the default voice will be used. Just a note... the voice names must match exactly with
what is installed in the system.
- Added start/stop recording hotkey to, 'Recorder' screen, plus audio feedback for when recording starts and stops.
- Added small, live coordinates update to the mouse position capture screen as a source of additional feedback.
- Removed, 'Mouse Capture Hotkey' option from Options screen (Hotkey tab), since this is now configured from the
mouse position capture screen.
_ Updated 'capture mouse position' screen to allow for a single-key capture hotkey, configurable from the mouse capture screen.
- Added a, 'mass update' feature to the Say Something with Text-To-Speech screen. Right now, this updates the
voice, volume and rate only, and only across the entire profile.
- Switch to another profile by name has been added as an option to the, 'Switch to another profile' action. Note that the
input box can take any number of tokens to render a valid profile name. Also note that if your profile names change, this
value will not be updated.
- Added first-round take on importing, 'packages' (.vax) files. Packages are zipped-up profiles, sounds and apps/plugins that
can be imported in one shot (see help doc section, 'VoiceAttack Profile Package Reference' and updated, 'Importing Profiles'
section).
- Option added to allow VoiceAttack to minimize when close button is clicked.
- Added a version check for newer profiles on import. If the imported version is from a newer version of VoiceAttack,
the user will get a message box stating so.
- Added state token, '{STATE_SPEECHACTIVE}' which will render "1" if the speech engine is detecting speech,
or "0" if the speech engine is not detecting speech.
- Added new tokens, '{STATE_SYSMUTE}', '{STATE_APPMUTE}' and '{STATE_MICMUTE}'. These work exactly like
'{STATE_SYSVOL}', '{STATE_APPVOL}' and '{STATE_MICVOL}', except that the test is for mute/unmute (instead
of just volume being zero). A rendered value of "1" means the device/app was muted, "0" means the device/app
was not muted.
- Added check for NeoSpeech voices to offer warning for users to use the, 'Single TTS Instance' option.
- Bug Fixes
- Fixed an issue where if a jump and jump marker were in a suffix command together, and the
marker preceded the jump the position pointer would be offset incorrectly.
- Set Text variable by invalid URI was causing VoiceAttack to crash. This has been fixed.
- Crash resulting from key up/mouse up/joystick up shortcuts when combining profiles has been fixed.
- Switching profiles with startup command no longer blocked by synchronous calling command.
v1.6.4
- Steam version update, security.
v1.6.3
- Steam version update, security.
v1.6.2
- Design Changes
- Replaced, 'include profile' with the ability to include multiple, prioritized profiles on
the Profile Options screen. Just click the, '...' button and add profiles to include. The
higher the profile is on the list, the higher its priority. Duplicate-named commands in higher-
priority profiles will be retained. Note: The current, active profile always has the highest
priority.
- Improvements
- Added, 'Execute an Inline Function - C# or VB.net Code' command action. This will allow you
to write C# or VB.net code in a function to be compiled and executed on the fly. This is
for use when you want to do something a little more complicated but a plugin would just be
too much to work with. From within this class (yeah... the action is named poorly... it's
better than saying, 'Instantiate an inline class and execute a function') you have access
to the VoiceAttack proxy object (just like you do with plugins)... execute commands, parse
tokens, get/set variables, etc. There is a very basic editor included that may or may not improve
over time. I've been resisting requests for a long time for this, since plugins were available.
Hoping I don't regret this lol o_O
- Added, 'Build Output' to the, 'Execute an Inline Function - C# or VB.net Code' screen. What this
does is make the, 'Execute an Inline Function - C# or VB.net Code' screen dual-purposed by
allowing you to specify a file name in which to compile your code into (the resulting file is
also called an, 'assembly'). This is so you can have precompiled versions of your inline functions
for whatever reasons you may need.
- Added, 'Execute an Inline Function - Precompiled' action to execute the file you create using the,
'Build Output' feature outlined above.
- Added token, '{CMDSEGMENT:segment}' which will allow you to extract specific portions
of dynamic commands (commands that contain dynamic sections), indicated by, 'segment'.
This will allow you to make more precise decisions based on what was spoken.
For instance, let's say you have a complex dynamic command that you use to build several
kinds of items like this:
'build [1..10][bulldogs;wolves;strikers][please;]'
Then, you say, 'build 5 bulldogs' to execute that command. To find out what was built,
you can check {CMDSEGMENT:2} (note that the specified, 'segment' is zero-based. So, the
first segment is 0. The second is 1, and so on). The rendered value will be, 'bulldogs'.
Then, you can find out how many items to build by checking {CMDSEGMENT:1}. The rendered
value will be, '5' (which you can convert and use in a loop, for instance). For bonus
points, you can check {CMDSEGMENT:3} and see if, 'please' was spoken and then thank the
user for being so polite (or chide them if they didn't say, 'please') ;)
- First pass at, 'scoped' variables. Variables can now be, 'scoped' globally
(as they always have been), profile-level and command-level. In order to not
triple up the user interfaces, variable names will now have a prefix associated
with them. Profile-level variables will be prefixed with the, '>' character,
and command-level variables will be prefixed with, '~'. Global variables will
be unprefixed. So, 'myTextVariable' will be globally-scoped, '>myTextVariable'
will be profile-scoped and '~myTextVariable' will be scoped at the command
level.
When a profile is switched, the profile-scoped variables are lost. If you want
to retain a profile-scoped variable between profile changes, prefix your variables
with two '>' characters. For example, '>myTextVariable' (single, '>') will be lost,
'>>myTextVariable' (double '>') will be retained and will be available when you switch
back to that profile.
Command-scoped Variable names that are prefixed with two '~' are considered
command-shared. That means that the variable will be, 'shared' among commands that
are executing in the same execution chain. Basically the values are passed from one
command to any subcommands and then back when control is released. Clear as mud?
Some examples... First, WITHOUT command-shared variables:
Command A sets text variable ~myText to 'hi'. Command A then executes Command B as a
subcommand. Command B reads ~myText and it is, 'Not Set' (null). That is because
~myText is command-scoped. It is only available to Command A.
WITH command-shared variables:
Command A sets a shared text variable, '~~myTextVariable' to 'hello'.
Command A then executes subcommand Command B. Since ~~myTextVariable is shared,
Command B can then read and write ~~myTextVariable. Command B reads ~~myTextVariable
as, 'hello' and then decides to set ~~myTextVariable to, 'greetings'. When Command B
completes its execution and control returns to Command A, Command A will read
~~myTextVariable updated as 'greetings'.
Another example is Command A executes Command B. Command B executes Command C.
Command C initiates the creation of ~~myTextVariable and sets its value to 'welcome'.
When Command C completes, it releases control to Command B. Command B completes and
releases control to Command A. Command A reads ~~myTextVariable as, 'welcome'.
The idea here is that even though the variable was created two levels down from
Command A, it is still accessible to Command A.
The only things that you need to be aware of is that all shared variables are passed
down to subcommands. If you want values to be passed back up to the calling command,
the, 'Wait until this command completes before continuing' option MUST be selected
for the subcommand.
This is kind of an unorthodox way to be able to pass private information between
commands without having to use global variables or establish parameters or return
values. Note this is experimental and will get pulled if it causes issue.
Added a section to the help document called, 'Advanced Variable Control (Scope)'
in regards to this.
- Dynamic range has been updated to optionally accept a multiplier. This way, you can
have ranges that, 'step' by the multiplier value. For instance, if you would like to
specify a dynamic range that uses only 10s, you would use the following: [1..10,10].
The result would be 10, 20, 30,..., 100.
- Added, 'Duplicate Profile' to the main screen. This will only be available to registered
users as you can only have one profile in trial mode.
- Added, 'Repeat command while keys are held down' option to command hotkey screen. If this
option is selected, the invoked command will loop as long as the keys that invoked the
command are held down.
- Added, 'Repeat command while joystick buttons are held down' option to command hotkey screen.
If this option is selected, the invoked command will loop as long as the joystick buttons that
invoked the command are held down.
- Added, 'Repeat command while mouse buttons are held down' option to command hotkey screen. If this
option is selected, the invoked command will loop as long as the mouse buttons that invoked the
command are held down. Note that the option to prevent pass-through has to be unchecked to
use this feature.
- Added, 'Stopped' and, 'ResetStopFlag()' to the VoiceAttack proxy object. The 'Stopped'
property will allow you to query whether or not the user has issued a, 'stop all
commands' action or pressed the stop commands button on the main screen. Note that
the VA_StopCommand function in the plugin interface still works. This is mainly for
using the proxy object within inline function actions that are run asynchronously (not
waiting for the function to complete). The 'ResetStopFlag()' function will reset the flag
if you want to continue for some reason (and still want to check again later).
- Added, '{CMDWHENISAY}' token to indicate the full value of what is in the, 'when i say' box
when a command is executed.
- Added, '{CMDCOUNT}' token as an indicator for the count of executed top-level (non-subcommand)
commands.
- Added, '{CMDISSUBCOMMAND}' token to indicate if a command that is executing is being executed
as a subcommand.
- Copying a command that contains subcommands is now allowed if the subcommands that are executed
are executed by name.
- Added, '-uritimeout' command-line parameter to allow for changing the default timeout for
the, 'Set text variable by URI' feature. This is a stopgap until proper user interface is
(ever) created.
- Log no longer clears when profile changes.
- By special request, "Pink" has been added to the choices of log icon colors ;) This is
available in the, 'write to log' action, as well as through the VoiceAttack proxy object's
WriteToLog() function.
- Added, 'Log Quiet Mode' option to System/Advanced tab. This will let you keep
log clutter to a minimum, especially with externally-executed plugin commands
occurring more and more. With this option, you can choose to allow warnings
(yellow-dot entries) and/or, 'Write to log' command actions (regardless of
color). Error entries (red-dot, VA generated) are never filtered.
- Increased the tooltip delay across the board to 7 seconds (used to be 5). There
is a setting inside the VoiceAttack user.config file that holds the tooltip
display duration (the setting is called, 'ToolTipDuration'). It is expressed in
milliseconds. So, if you want to extend or shorten the delay, you can change
that value if you want (that value is now respected application-wide).
- Added, '{TXTLASTPOS:textVariableOf / text value : textVariableIn / text value}
and {TXTLASTPOS:textVariableOf / text value : textVariableIn / text value : intVariableStart / int value}'
tokens to get the last position of text within other text. Note that there are two
variations of this token. One with a numeric start position and one without. If you use
the option without a start position, the end of the text is assumed.
{TXTLASTPOS:"abc", "abc123abc"} will return "6".
- Added, '{STATE_VA_PLUGINSENABLED}' token. Returns "1" if plugins are enabled, and "0" if
plugins are disabled.
- Added, 'append' option to, 'Write Text to a File' action.
- Added, 'Begin at position' option on the, 'Play a sound' screen. This option
will accept a literal, token or decimal variable. When the sound is played,
the position will be set according to the number of seconds you provide (expressed
as a decimal value). The sound preview screen will allow you to try this out,
as long as what you are putting in the box can be rendered into a decimal at the time
of preview (variables must be set first).
- 'Fade in' option added to, 'Play a sound' screen. This is only available if you
use, 'begin at position'. This is used to keep sounds that start at a position from
sounding too harsh if started at particular points in the audio.
- Added, {STATE_AUDIOCOUNT:variable/value} token. This returns the number of currently-
playing instances of an audio file with a given file path.
- Added, {STATE_AUDIOPOS:variable/value} token. This returns the position of a currently-
playing audio file with a given file path, expressed as seconds.
- All keys that are down are now released when commands are stopped (not just mod keys).
- Added 'Set Audio Level' action to Windows actions. This action will allow you to
mute/unmute/toggle mute/set volume/offset volume for the system audio (default
playback device), the microphone (default recording device) and various apps
as they relate to the Windows System Volume Mixer.
- All targeting-type actions will now accept the window class name as a target.
This includes, 'Send Commands To', Perform a Windows function's 'Window Title'
and the new, 'Set Audio Level' application target.
- Added, '{STATE_SYSVOL}' token. This renders a value between '0' and '100' based on your
current system volume (default playback device).
- Added, '{STATE_MICVOL}' token. This renders a value between '0' and '100' based on your
current mic volume (default recording device).
- Added, '{STATE_APPVOL:value}' token. This renders a value between '0' and '100' based on
the indicated app volume as it relates to the System Volume Mixer. If the volume cannot
be accessed (app closed for instance), a value of "-1" will be returned. The value parameter
can be a variable name (without quotes: {STATE_APPVOL:myTextVariable}, or it can be a token
or a literal if contained within double quotes: {STATE_APPVOL:"*windows media*"} or
{STATE_APPVOL:"{TXT:myVariable}"}. The value expected for the parameter can be the window title,
process name or window class name (wildcards are supported).
- Added token processing support to Set Text/Small Int/Int/Date/Boolean/Decimal variable name
input boxes.
- Added evaluation default options to each of the condition types. If you
have this option selected and you set up a condition for, as an example,
a boolean variable, the boolean variable will be evaluated as false if
it is not set (null). Small and large integers and decimals will evaluate as
zero, text will evaluate as empty (blank) and date/time will evaluate as
1/1/0001 12 am. This option is on by default when you add a new condition
start (if) statement. The option choice persists for each type. This was
put in to help those that are new at this to not get confused by null values
as well as maybe save a step here and there for everyone.
- Updated the convert token/text for integers and small integers to accept decimal
tokens. The fractional value is simply lopped off (does not round). Previously,
this would result in a value of, 'not set' for the integer variable.
- When selecting more than one command action in the command edit screen and adding
a 'Begin a conditional statement', the begin/end actions will now wrap the
selected actions.
- 'Pause command when focus lost' now does not pause when the target is not focused when the
command is first issued. The intended window will be focused as expected
- Added command line parameter -datadir to allow a directory to be specified to hold the
VoiceAttack.dat file (and its backups).
- Added extra speech engine handling (trying to prevent lockup) when locking and
unlocking Windows.
- Bug Fixes
- Fixed issue with setting text variable by URI hanging the entire user interface.
- Fixed {CMDSEGMENT} token not accessing segments when used with a composite (prefix/suffix)
command.
- Fixed command line options not working if .exe is NOT cased correctly o_O
- Fixed issue where composite (prefix/suffix) commands and Quick Input would not respect
target process or lost focus/continue command.
- Automatic profile switching no longer tries to switch to a deleted profile during the same
running session.
- Automatic profile switching for newly-created profiles is now working.
- Additional handling in audio output/input options in case of broken internal components
(Trying to keep the entire house from coming down from minor options).
- Fixed issue where animated mouse was not ending up in the right place when, 'application
coordinates' selected.
- Very large dynamic number ranges would cause VA to hang and/or crash. This has been
fixed up a little better.
- Fixed issue where the numpad number 9 could not be used in the key press duration box on the
'Add a key press' screen.
- Multiple instances of the same plugin causing VA to crash has been fixed. You'll get a
warning message that only one will be used (first one in wins).
- {CMD} token now shows the proper command name when, 'execute a command by name' is used with
a command that is using dynamic sections.
- Fixed an issue with Pause and Numlock keys not working correctly with DirectX games.
- Profile-level targeting now works again.
- Fixed an issue when retrieving a saved value from a profile would not work with
variable names that contain tokens (variable variable names o_O).
- Exporting, 'Write Text to File' actions would not preserve cr/lf. This has been fixed.
- Fixed command-scoped variables not copying correctly in additional situations. I think this should
cover it... o_O
- Automatic profile switching a little less, 'eager' to switch to default profile.
- You can now have full commands that have the same, 'when i say' values as prefixes and suffixes
(again).
- Fixed command-scoped variables not copying correctly in certain situations.
- The, 'include commands from another profile' option not showing latest selection until
fully persisting has been fixed.
- Made the, 'improper shutdown' check a little bit less aggressive.
- Fixed, 'improper shutdown' message when VA is restarted after registering.
- When using, 'Stop a process by name' (killing a process) on the VoiceAttack process, an attempt is
made to do an elegant shutdown (should not get the 'improper shutdown' message).
- {STATE_KEYSTATE} token was not showing keys that were down when VoiceAttack itself
was pressing them down (oddly, this is kind of by design). This should produce
expected results now.
- Fixed a decimal rounding to NOT use banker's rounding but to use rounding
for both odd and even numbers.
- Desktop ("Program Manager") not being recognized during auto profile switching has
been fixed.
- Output window titles option from Load Options screen now works again.
- Fixed issue where using a capital letter in the profile screen's list filter would
cause the filter to not work.
v1.6.1
- Bug Fixes
- Fixed a bug that is causing multiple instances of TTS to crash in certain cases.
- Fixed a display issue for decimals in the command action list.
- Fixed {STATE_JOYSTICKXPOVY} not displaying all values correctly.
v1.6
- Design changes
- Standard and DirectX mode have been removed. There is no longer a need to choose a mode.
This was found on the key press, key recorder and quick input screens. You will need to
use the key press screen's 'key chooser' feature to select any keys that are not available
to you by simply typing them on your keyboard (such as, 'numpad enter' for games and some
media keys).
- New update to the plugin interface: Version 4. This revision adds some more methods
and simplifies most of the existing interfaces. You can now execute commands and get/set
variable values, parse tokens, get various environment information (and more) straight from
your plugin. The eight or so parameters in the invoke and init functions have been reduced to
one parameter of type dynamic (object in vb.net). I decided to go dynamic and not require a
referenced interface as I expect this interface to change quite a bit and to keep up with and
support that would just not be very fun for anybody. There may be an interface included to
reference later, but that will be down the road if absolutely needed. The properties and
methods available are documented in the VoiceAttack help file (VoiceAttackHelp.pdf in your
installation directory or from the right-click menu at the top-left of the main screen).
VoiceAttack is still backward-compatible with plugin interfaces going back to version 1.
There is no real need to ever NOT be backward-compatible, so I don't see a need to ever
remove it.
Since the dynamic type is now used, This will require .Net framework 4.0. This shouldn't
be a problem, as VA requires that version and you can get Express versions of Visual
Studio that will allow you to build the .dll.
Note in the documentation that prior versions of the plugin interface have been updated
to include vaProxy (the object used to execute commands, set variables, etc) as part of
the state dictionary.
- Tokens can now be nested and are treated as nested by default. That means that tokens
can now be inputs for other tokens. Tokens are processed from the inner-most token to
the outer-most and the entire statement is reprocessed for tokens on each iteration.
Since the statements are reprocessed for tokens, this can effectively cause an infinite
loop or cause VA to crash (stack overflow) so use with caution when using tokens to create
more tokens. Also note that text between two curly brackets { } that do not resolve in a
token will be replaced with whatever is between the brackets. So, something like {hello}
will be rendered as, 'hello' (no quotes). This all may cause issues with older commands
that may not be set up properly, so there is an option on the options screen called,
'use nested tokens' which is turned on by default. Unchecking this will make VA process the
tokens as before (v1.5.12 and earlier). Note this is a global setting and you'll want to
fix up your old commands in order to continue to be able to use new commands where the
tokens may be nested. If curly brackets are preceded with a pipe (|): |{ or |}, they
will be rendered as literal brackets. '|{hello|}' will be rendered as, '{hello}' (no
quotes).
- The Quick Input indicator, '[PAUSE]' (to press the Pause/Break key) has been replaced
by, '[BREAK]' in the documentation. '[PAUSE]' will still work on its own, but a new
inline function, '[PAUSE:seconds]' has been introduced (see below).
- Duplicating a command no longer creates a unique name. The name is now just duplicated to
make it a little easier to copy and reuse. For example, 'My Command', when duplicated in
earlier versions of VA would create a unique name of, 'My Command 1'. From the version on,
the duplicated name will just be, 'My Command'.
- Turning off keyboard shortcuts now only turns off command shortcuts. Global hotkeys (listening,
command stop, mouse capture) will remain in effect. To turn these off, either turn them
off in the options screen, or, to completely turn off VoiceAttack's keyboard hooks, run
with the command line parameter of -nokeyboard. Remember, this is only for the keyboard
hook and does not turn off key presses (output).
- Recorder screen no longer, 'handles' key presses. All key presses will pass through
to the target application while the recorder is, 'recording'.
- Improvements
- Added variable key presses to the key press screen. This will allow you
to issue a key press/down/release/toggle via text variable using the same
notation found in Quick Input. This is to aid (primarily) in cases where keys
for various commands may change periodically (such as with key bindings for games).
The idea is that keypress variables would be initialized at profile startup or by
plugin activation, thereby not requiring constant, manual updating of commands each
time the key bindings change in a game. Hoping to see some interesting implementations
come out of this one.
- Process targets (send commands to) now include windows that are not the main window handle
when seeking out the target. If the window is located, an attempt will be made to make the
window the top-most window for the application before input is sent to it.
- 'Send commands to' on main screen, profile screen and command screen now show all open
windows (versus only the active, top-level windows for each application). When commands
are now sent to windows that are not the active, top-level window, an attempt is made
to bring that window to the front to accept input.
- Added pause indicator to Quick Input. If you add an indicator of [PAUSE:seconds] to
Quick Input, typing will be paused for the indicated number of seconds. For example,
if you enter, A[PAUSE:0.5]B[PAUSE:2.5]C, 'A' will be typed out, then a pause of one
half second, then 'B' will be typed and then a 2.5 second pause and then, 'C'. Pretty
straightforward. Note that that the [PAUSE] indicator still exists to allow you to
indicate the Pause/Break button, however the documentation suggests using, '[BREAK]'
instead.
- Quick input / variable keypress indicators added:
[SPACE] - space bar... just in case you don't like using an actual space or having
a space is hard to see in the interface.
[DEAD] - Dead key that's found on German and various French keyboards. This
is mainly for variable key presses but will work with Quick Input. Supported layouts
are German, French (France), French (Canada), Belgian French and Belgian Dutch.
[ALT], [CTRL], [SHIFT] [WIN] - stateless modifiers which are only available for
variable key presses (state (down/up) will be determined by the type of key action
(press, down, up, toggle).
[1]-[254] - if you happen to know the virtual key value (integer), you can put the
value between brackets and the key will be processed accordingly (note that there is
no speed increase by doing it this way... just yet another way to get things done).
- Mouse up/down/left/right movement options have the option to use relative data broken
out as a separate option. So, now there is an option, 'move using relative data (useful
for 3D games)' which forces movement to be relative to the mouse cursor. If this option
is not selected, you can then choose to move the cursor relative to the current cursor
location or the location that was last set by VA.
- Mouse move left and right are independent of move up and down so you can now set both
the x (left/right) or y (up/down) at the same time (for diagonal movement in the same
action).
- Added options to move mouse left/right/up/down feature to allow moving based on current
cursor position and last-set position. The, 'move based on last-set position' option will
move the mouse based on the last place that VoiceAttack had set. If it's the first time
run, however, the cursor position will be used.
- Mouse move left/right/up/down boxes now accept numbers, tokens or integer (long... not
short/conditional) variables. If the value cannot be evaluated, it will default to zero.
If the value evaluates to a decimal, it is converted to an integer.
- Added, 'animate mouse cursor' option to the mouse move screen. This will allow you to
have the mouse move from where it originates to its destination with a more, 'natural'
effect than just appearing in the destination. The option, 'ease movement' allows for
the mouse to gradually reach its destination. Not selecting, 'ease movement' will move
the mouse cursor in a constant motion. You can specify the number of steps over a base,
'time'. The time (in seconds) is not exact, as the more steps you add the more the time
can expand. Also, if 'ease movement' is selected, the timing will actually be less.
This will be handy in cases where sudden movement will cause things like menus to
disappear.
- Added 'scroll wheel left x clicks' and 'scroll wheel right x clicks' to mouse screen
(click/scroll tab). This simulates tilting the scroll wheel to the left or right.
- Added scroll wheel left/right/up/down to mouse shortcuts. You can now have a command
execute for each click of the scroll wheel as well as tilting the scroll wheel left and
right. Note that these are obviously very sensitive, and the left/right event repeats
when held down (there is no up/down state for any of these, so use with caution).
- Added VA version tokens. Might help with profiles or plugins:
{STATE_VA_VERSION} - "1.5.12.15"
{STATE_VA_VERSION_MAJOR} - "1"
{STATE_VA_VERSION_MINOR} - "5"
{STATE_VA_VERSION_BUILD} - "12"
{STATE_VA_VERSION_REVISION} - "15"
{STATE_VA_VERSION_ISRELEASE} - "1" is true, "0" is false.
{STATE_VA_VERSION_COMPARE:textVarialbe} - "1" if VA version is greater or equal to the
version number provided in, 'textVariable'. "0" if VA version is earlier.
- Added {TXTSUBSTR:source:start:length} token to allow for a substring feature outside of {EXP}
({EXP} wants to do too much work and will automatically eval numbers out of a substring). If
length or start position are negative, an empty string will be returned.
- {CMDCONFIDENCE} token added to indicate the confidence level of a command.
Values range from 0 to 100. Note this value is accessible from within the
specified unrecognized catch-all command.
- {CMDMINCONFIDENCE} token added to indicate the minimum confidence level set
by the user for the executing command. Values range from 0 to 100. Note that
if the minimum confidence level is not turned on, this value will be always be
zero.
- Numpad keys can now be distinguished from home cluster/alpha keys. Whether your app or
game can tell the difference is now up to the app or game. This includes keys pressed
by VoiceAttack as well as hotkeys that VoiceAttack processes (command shortcuts, global
listening, etc).
- Added 'Windows Miscellaneous Functions' to Other stuff screen. By popular
demand (and some extras thrown in), VA will attempt (given proper version and
user rights) to execute the following:
Toggle Desktop, Lock Workstation, Log Off Current User, [Force] Sleep (Standby) PC,
[Force] Hibernate PC, [Force] Restart PC, [Force] Shutdown PC, [Force] Power Off PC,
Minimize All, Undo Minimize All, Open Run Dialog, Open Search Dialog, Open Window
Switcher, 'Hide' and 'Show' task bar and Run Screensaver (one line of code... might as well,
right?). I've resisted long enough, so here you go (lol).
- If VoiceAttack is improperly closed (probably due to a crash), the load options screen
will be presented to allow you to disable certain functionality.
- Added the option to set the Windows default input and output device on VoiceAttack startup.
This feature will also allow you to change the default input and output from the options
screen, saving a trip through the system tray. This is experimental and totally for
convenience (mostly mine) and may not be included later if it proves to be problematic.
This is only currently available for Windows 7 or later. Sorry, Vista users... may implement
for you later if there is significant demand for it.
- Added command line parameter, '-input' to change your Windows default input device (microphones)
from the command line. You will need to indicate your device within double quotes, and your
device name must match what is listed in the dropdown list on the Options screen. Often, just
updating a driver will cause the device name/description to change, so this parameter can also
accept wildcards (see documentation on how wildcards are used if you are not sure what they are
about). VoiceAttack will find the first match and use that device, so use with care. Note
that this parameter will work against new or existing instances of VoiceAttack.
This example shows how to change to a device exactly as indicated:
C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -input "Speakers (4- Sennheiser 3D G4ME1)"
This example shows how to select the first device that has a description
that contains, 'G4ME1':
C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -input "*G4ME1*"
These can be put in a .bat file or used in a desktop shortcut.
- Added command line parameter, '-output'. Works just like the -input one above, except it's
for output (speakers/headphones).
- Added command line parameters, '-inputx' and '-outputx'. These work exactly like '-input'
and '-output' above, except that once the devices are changed, VoiceAttack closes immediately
(does not show the user interface. Again, this is helpful if you have a desktop shortcut,
batch file or launching app and want to quickly change default devices without fully launching
VoiceAttack.
- Option added to Load Options screen to reset automatic audio device switching on startup.
- Options screen now opens on last selected tab.
- Jump to marker now supports tokens.
- Added, 'Black' and, 'Gray' to Write to Log icon colors.
- Registration screen will now show warning if hidden characters are in registration info.
- New command line parameter, '-punload' to indicate the timeout for plugins to unload in milliseconds.
When plugins are unloaded on exit, VoiceAttack will wait a specified amount of time before
giving up and shutting down. If the timeout is exceeded, an entry will be written to
VoiceAttackFault.txt in the installation directory. The default timeout is 5000 (5 seconds).
Example:
C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -punload 1000
- Updated various tokens to accept literal values (mostly text-related tokens).
See documentation for changes.
- Added listening, shortcut, mouse, joystick and stop command icons to the VoiceAttack
task bar icon plus some jump list settings (right-click on taskbar icon). Might save
a step here and there.
- Info box regarding not running as an administrator now shows up for registered users.
Also, a warning is indicated in the log when VA is launched. Hoping this might help
out those that don't know about this.
- Bug fixes
- Exporting a profile with certain circular references will cause the export to fail. This
should be good to go.
- Clearing hotkey now clears the, 'do not allow key to be passed through' check box when only
modifiers are selected (alt, shift, ctrl, windows).
- Closing TTS screen while preview is playing and text is selected no longer crashes.
- Updates to key press to help with some compatibility issues.
- Pause mass update not updating after an undo fixed.
- Pasting at the end of a grouped command list throwing exception has been fixed.
- Jump to marker not maintaining marker in list fixed.
- First pass at curbing shutdown exceptions.
- VA will now log plugin exceptions received when plugins are unloaded when VA closes. Also,
plugins that do not exit in a timely manner will be logged in case it is causing VA to crash.
The log entries are written to VoiceAttackFault.txt, which is located in the VA install directory.
- {STATE_KEYSTATE} token not working when key press set to not pass through fixed.
- Move mouse left/right/up/down moving based on previously-set values has been fixed.
- Mouse click targeting now a little less heavy-handed.
- Attempt to curb Error 740 when installer instructed to launch VA after installation.
- {STATE_KEYSTATE:LSHIFT} now working as intended.
- Fixed an issue with running out of memory while exporting extremely large profiles.
- Log warning is now given if commands are right-click executed while, 'Stop Running Commands
When Editing' option is turned on.
- Mouse screen, 'ok' button disabled in certain circumstances now fixed.
- Token parser will now not bail out when it finds extra curly brackets.
- Bolstered up error trapping around some joystick functionality.
v1.5.12
- Improvements
- Slight profile load time increase.
- Bug fixes
- Fixed issue where profiles would not load
if a duplicate was in a linked profile and
one of the commands was set to voice-disabled.
v1.5.11
- Bug fixes
- Attempting to correct startup crash some are
experiencing.
- Write to file not writing if, 'overwrite' not
selected.
- Fixed issue with double-quotes causing the
speech engine to crash.
- Fixed issue where deleting a profile caused
a double reload of the fallback profile.
- Fixed issue where creating a new profile was
not loading commands.
- Start minimized to system tray for some not working
possibly working again... maybe.
- Fixed an issue with duplicate-named commands
causing a crash.
- Attempt to correct installer-related issues.
v1.5.10
- Bug fixes
- Fixed audio error and stop command issue when,
'fade out stopped audio' set.
- Removed the 21-day time-constraint that is part
of the trial. The trial is still just one profile
with 20 commands, but the startup will be slowed
incrementally over a certain number of uses.
v1.5.9
- Design changes (important)
- All mouse down actions will now make the application
that is under the mouse the current process target
(set as process target, move to foreground and focus).
The process target will remain for the duration of
the command. This is to simulate what a hardware
mouse would do and this should be the expected
behavior. The old way would maintain the process
target throughout the command, and when a mouse
click was used to access another process, the
messages were not being sent to that other process
(which was expected). If this causes problems for
existing macros, my apologies. There is a new
option on the Options screen to help with this:
Bypass Mouse Targeting.
This will keep things the old way and not potentially
set a new target.
- Before, if a, 'Start Listening' action was discovered
*anywhere* within a command, and listening was off,
the command would execute as if VoiceAttack was listening.
This was for convenience and was left over from the
early days when there wasn't much going on.
The design has changed slightly. This behavior is still
available, however, it is only available if the FIRST
action in the command is a, 'Start Listening' action.
Again, this is for convenience and is still a weird
design decision but it's meant to be helpful and
reduces some user interface clutter.
- 'Cancel blocked commands' option added in v1.5.8.23 will
now be true by default. The behavior up until now has been
that the blocked commands would queue up and then execute
once the blocking command completed. To keep that behavior,
just un-select this option.
- Improvements
- Added new command trigger by mouse button click.
You can set up any combination of the five standard mouse
buttons, including mouse up (release). On the command
screen, you'll now find, 'When I press mouse'. Combined
with the new state tokens, this should give a fair amount
of flexibility. To turn the mouse shortcuts on and off,
there is an icon on the main screen, plus an icon in the
notification icon in the system tray. Profile screen
command list and export command list updated with new mouse
column. The column will only be displayed if there are
commands that have mouse triggers. There is also a filter
button to hide disabled mouse commands on the profile
screen.
- Added new actions for mouse: Stop Mouse Shortcuts and
Start Mouse Shortcuts (just like the actions for hotkeys
and joysticks).
- Added, '-mouseoff' and '-mouseon' command line parameters
to support enable/disable mouse shortcuts. Note: These do
not affect the mouse listening feature (just the command
shortcuts).
- Support added for four screen sizes :
Normal, large, larger, largest. The setting for this
is on the options screen. This is a stopgap before
building a WPF version of VoiceAttack. I also wanted
to be able to provide a way for the user to increase
their screen size without forcing them to have to
change their font size.
- Added, 'Reset Screens' button to options screen that allows
the reset of all screen sizes/locations to default values (in case
you change resolutions and screens are too big).
- Added option, 'Disable Acoustic Echo Cancellation'
to attempt to aid in recognition. This is due mostly
to Razer devices not working properly with the speech
engine in some regards.
- Moved delete, export, import and create to
new, 'More' button on the main screen. The
profile lists are becoming a lot longer than
I had anticipated, so I've consolidated
everything under one button to clean things up
a bit.
- Added new key press action, 'Toggle Key(s)'. If the keys
are down, release them. If they are up, press them down.
Note this toggles the state of all keys involved. So,
if the keypress is a combo of CTRL + X and CTRL is down
and X is up, toggling will release CTRL and press X.
- Warning box now pops up if derived commands from
a single command exceed a count of 100.
- Attempt at decreasing the overall load time of
profiles. Larger profiles and profiles with lots of
derived commands will benefit from this the most.
- Added 'Else If' action for condition blocks.
Reduces the need for multiple begin/end
blocks. You can finally do if/else if/else.
- Added Loop start/Loop End actions. While a
condition is met, you can loop a section of
your command. Loops can be nested.
- Added explicit 'Exit Command' action (no longer
need to add a jump and set a flag unless you
want to). Added this to make it a little bit
more obvious. Note this also does not stop
any executed subcommands (it just exits).
- Added new data type: Date/Time. With the new data
type comes a new Set Date/Time feature, plus an
extra tab on the, Condition (If and Else If statements)
and Loop start screens. There are also some new
tokens that work exactly like the existing date and
time tokens (except the new tokens accept a variable
name). Plugin interface has been updated to include
the date/time values (this is now version 3... still
backward compatible).
- Added dynamic responses to text-to-speech. Just as with
using dynamic commands, you can now use square brackets to
have more dynamic responses with text-to-speech.
Before, if you wanted a random response with slight
variation, you would have to explicitly indicate each
variation:
[fire;launch;dispatch] the [missiles;weapons;porcupine] will result
in a random response of:
fire the missiles
fire the weapons
fire the porcupine
launch the missiles
launch the weapons
launch the porcupine
dispatch the missiles
dispatch the weapons
dispatch the porcupine
- Added the ability to inhibit the execution
of multiple commands with hotkey shortcuts.
This is only available if all involved commands
have the, 'Shortcut is invoked only when all keys
are released' option set in the, 'When I press...'
Command Shortcut screen.
For instance, let's say you have three commands:
One that executes when F1 is released, and
another that executes when CTRL + F1 is released.
Before, if you pressed CTRL + F1 down and then
happened to release F1 first, the command associated
with F1 would execute, followed by the command
associated with CTRL + F1. In this release, only
the command associated with CTRL + F1 will be executed.
F1 will still execute when pressed on its own.
Apologies to anybody that's gotten used to this
behavior, but this is the way it should have been
since the beginning o_O.
- Added, 'Shortcut only executes when all buttons are
released' option to the joystick button trigger for
commands. You can now have commands that execute on
button down as well as button up... finally ;) Note
that this option will eliminate superseded button-up
commands (just like it does now for keyboard hotkeys).
For instance, if you have button up triggers for button
'A' and 'A + B', only 'A + B' will be invoked.
- Added option 'Shortcut is invoked when no other buttons
are down' to joystick button trigger for commands. This
provides an exclusive mode for your button/combo, so that
if you have a trigger for button, 'A' and any other button
is down when 'A' is pressed (or released), the command
will not be invoked.
- Added an advanced section to the, 'Run an application'
action. In addition to the, 'wait for exit' feature
that captures stdout and exit codes, there is now a
'wait for start' feature that waits until the launched
application has started (that is, ready enough to be
accepting windows messages). With the, 'wait for start'
feature, there is also the option to set the newly
launched application as the process target (Set command
to target launched application). The, 'wait for start'
and 'wait for exit' features can now have a specified
wait time before giving up. If the launched app fails
to launch properly or exit in the time specified, you
can now use the, 'Exit command immediately if launch
has failed or wait time exceeded' option to jump out
of a command. This should help out a lot of folks
having trouble with process targets.
- Added, 'Exit command immediately if window/process not
available' to the 'Perform a window function' action to
allow you to jump out of a command if the target is not
available (or the wait time is exceeded).
- Set text feature, 'replace text' now accepts tokens
in the 'replace' and 'replace with' fields. 'Replace'
will now accept spaces and 'Replace with' will now
accept a blank (empty) value.
- Increased, 'add a comment' action from 64 characters
(yikes!) to 512. Not really an improvement... not
really a bug, either ;)
- Added, 'Set command to target this window'
option to the, 'Display' feature of the, 'Perform a
Windows Function' action. This will allow you to
change the VoiceAttack process target to the indicated
window or process. This was automatic when used with,
'Active Window', but now it is not. This was a bad
design choice, so it needed to be changed. Sorry to those
that are using it... you'll need to update your actions
and check this option. The good news is that now it
changes the process target for both, 'active window' and
specified process targets for the duration of the
command.
- 'Add pause' action on command screen is now set by
flyout menu. You can choose either, 'Add pause'
or, 'Add variable pause'.
- Added ability to set a pause duration to a decimal
variable. If the variable value is Not Set, the
pause will be zero seconds. Note that decimal
variables can be set to random values ;)
- The 'wait for exit' option for launching
applications now allows you to capture the stdout
and exit codes of apps that provide them. Simply
add a text variable name for stdout and/or an
integer variable name for the exit code and those
variables will be filled. Access the values via
token or test using conditional (if) statements.
- Added new action, 'Write Text to File'. This will
allow you to specify text to write to a file that
you choose. This action accepts tokens in both
the text and file boxes. As always, use with
caution ;)
- Mouse move position can now be set by text or
token. If the value in place is evaluated as
a valid integer, the position will be used.
Otherwise, no movement will occur (info given
in log). If the evaluated coordinate is outside
of the boundaries of the area, the boundary will
still be used.
- Mouse action screen organized a little bit.
Move actions are now on one tab, click actions
are on another. Navigating to mouse actions
from the command screen is now from a flyout
menu with move and click items.
- Mouse move position can now be set as relative
from any corner. Top-left is still default.
- Added 'Move to specific location' mouse action.
This will allow you to move the mouse cursor quickly
to various parts of different screens.
- New set of tokens for state of keyboard,
mouse and joystick. What I see this being
used for mostly is to alter behavior for
commands based on the state of your devices.
For instance, if the right mouse button
is down when I say, 'fire weapons',
missiles are fired instead of photons
(lol). Also, if the 'x' button is down,
fire both photons and missiles.
There is one keyboard token:
{STATE_KEYSTATE:key}
'key' parameter can be any key you can type in
a token:
'A', 'B', 'C', '�', '�', '�', '�',
as well as keys you can't type in a token:
ENTER, TAB, LCTRL, ARROWR (see documentation
for full list).
So, if you want to test to see if F10 is
down, just use the following token:
{STATE_KEYSTATE:F10}. To test for the letter
'A', just use this token: {STATE_KEYSTATE:A}
If a keyboard key is down, the replaced value
of the token will be "1". If the key is not
down, the value will be "0".
There are five mouse tokens:
{STATE_LEFTMOUSEBUTTON}
{STATE_RIGHTMOUSEBUTTON}
{STATE_MIDDLEMOUSEBUTTON}
{STATE_FORWARDMOUSEBUTTON}
{STATE_BACKMOUSEBUTTON}
These should be pretty straight forward. If you
want to test for the right mouse button, use
token {STATE_RIGHTMOUSEBUTTON}.
If the mouse button is pressed down, the replaced
value will be "1". If the mouse button is not
pressed, the value will be "0".
Lastly, we have two joystick tokens:
{STATE_JOYSTICK1BUTTON:buttonNumber}
{STATE_JOYSTICK2BUTTON:buttonNumber}
The, 'buttonNumber' parameter is the number of the
button on the desired stick. To test if button 10
is down on joystick 2, just use this token:
{STATE_JOYSTICK2BUTTON:10}
Once again, if the button is down on the tested
stick, the replaced value will be "1". If the
button is not down, the value will be "0".
- Added token {STATE_AUDIOLEVEL} token to indicate
the currently reported audio level from the speech
engine. The replaced value will be from "0" to
"100".
- Added token {STATE_LISTENING} to test if VoiceAttack
is, 'listening'. If, 'listening' is on, the replaced
value will be "1". If, 'listening' is off, the
replaced value will be "0".
- Added token {STATE_SHORTCUTS} to test if VoiceAttack's
shortcuts are enabled. If shortcuts are enabled, the
replaced value will be "1". Otherwise, the replaced
value will be "0".
- Added token {STATE_JOYSTICKBUTTONS} to test if VoiceAttack's
joystick buttons are enabled. If joystick buttons are
enabled, the replaced value will be "1". Otherwise, the
replaced value will be "0".
- Added missing POV/hat tokens (see docs for more
complete details):
{STATE_JOYSTICK[1|2]POVENABLED}. Indicates whether
or not POV is enabled for the indicated stick.
{STATE_JOYSTICK[1|2]POV[1|2|3|4]TYPE}. Indicates
the type of POV switching mode set in joystick
options.
{STATE_JOYSTICK[1|2]POV[1|2|3|4]}. Displays the
direction the indicated stick/POV controller is
being pressed (depends on switching mode).
{STATE_JOYSTICK[1|2]POV[1|2|3|4]_NUMERIC} - Use this
token to get the numeric value of the POV (for
finer level of control if the switching mode does
not suit the need).
- Added a whole BUNCH of new joystick state tokens
to give all kinds of info about your joystick's
state. You can use these for your stuff like
command modifiers or as triggers if used with some
fancy looping. There are like 28 different
types, so, I won't list them here (they're in the
docs in the tokens section). Finally a way to handle
some of the, 'analog' controls on joysticks ;)
- Added {STATE_CPU} and {STATE_CPU:coreNumber} tokens to return
cpu usage. Per request, as I understand, this is to check if
your, 'ship' is running hot ;) {STATE_CPU} will return the
average for all cores. The value will be "0" to "100".
{STATE_CPU:coreNumber} will allow you to specify a certain
core (probably never be used, but the code to do add this
is mostly what is used in the average). Just indicate the
core number to check: {STATE_CPU:5} will get the cpu usage
for core 5.
- Added, '{STATE_RAMTOTAL}' and '{STATE_RAMAVAILABLE}' to return
the total and available ram on your system in bytes.
- '{CMDACTION}' token has a new return type of, 'Mouse'.
- Added, '{CATEGORY}' token to allow accessing category
of command. For composite commands, '{PREFIX_CATEGORY}'
will get the category of the prefix, and '{SUFFIX_CATEGORY}'
will get the category of the suffix. If, '{CATEGORY}' is
used on a composite command, the result will be the prefix
category plus the suffix category, separated by a space.
- Added, '{ISCOMPOSITE}' token to allow checking if the
called command is a composite command (a command that
uses prefixes and suffixes). The result will be "1" if
the called command is composite and "0" if it is not.
- Added, '{COMPOSITEGROUP}' token to allow accessing of
the composite group that the composite command belongs
to.
- Added '{ISLISTENINGOVERRIDE}' token to allow checking if
command was called using the listening override keyword.
This value will be "1" if called command was prefixed with
a listening override keyword and "0" if not.
- Added '{TXTPOS:txtVarOf:txtVarIn:intVarStart}' token to check
the position of text (txtVarOf) within more text (txtVarIn)
starting at a given point (intVarStart). It does use three
variables that must be set prior to using.
Notes: The text search is case-sensitive. If the text is
found, the result will be the zero-based index of the
start of the text, otherwise the result will be "-1".
If txtVarIn or txtVarOf are not set, the result will be "-1".
If intVarStart is not set, 0 is assumed (for convenience).
- Added token, '{WINDOWTITLEUNDERMOUSE}' which returns the
title of the window that is currently under the mouse.
Another item that I was using this for testing and then
just left for anyone to use.
- Added token, '{WINDOWPROCESSUNDERMOUSE}' which returns
the process name of the window that is currently under
the mouse. Used this for testing, too (lol).
- Added, '{LASTSPOKENCMD}' token to provide the last-spoken
and executed command phrase. Useful from within subcommands
where you need to know what was said to invoke the root
command, or if you need to know what was spoken prior
to the current command.
- {TXTREPLACE} is now deprecated.
{TXTREPLACEVAR:textVarSoure:textVarSearch:textVarReplace} is
what should be used going forward for reliability. This
token takes three text variables (where {TXTREPLACE} uses
a text variable and two literals). If you have something
simple, keep using {TXTREPLACE}.
- Added token, '{STATE_FILEEXISTS:variableName}' to indicate
if a file exists. The replaced value will be '1' if the
file exists or '0' if it does not. Note that this takes a
text variable. The variable should contain a fully-qualified
path. Note that the variable can also take tokens.
- Added token, '{STATE_DIRECTORYEXISTS:variableName}' to indicate
if a directory exists. The replaced value will be '1' if the
directory exists or '0' if it does not. Note that this takes a
text variable. The variable should contain a fully-qualified
path. Note that the variable can also take tokens.
- Added new global hotkey option for listening:
'Listen then stop listening after recognition
completes.' This turns on listening only
until the speech engine recognizes speech.
The command itself can be recognized or
unrecognized. This is available for hotkeys,
mouse and joystick button.
- Listening and stop command icons on main screen
now include hotkey info in tool tips. The
info provided also indicates if the hotkeys are
overridden at the profile level.
- Added, 'Select All' and 'Select None' in
command action list. 'Select all' has
always been there (CTRL + A)... just needed
some user interface to indicate that it's
there ;)
- Show latest entry only added to log as an
option.
- Windows environment variables (such as %WINDIR%,
%APPDIR%, %PROGRAMFILES%, etc.) will be parsed
out any place that takes tokens. Note that the
environment variables need to be surrounded by
percent signs (%). You already knew that,
though ;)
- Tooltip for the command count on the profile screen now shows
derived command count (count of commands as a result of
composite and dynamic commands as well as overrides).
- Number of displayed entries in log is now user-selectable.
Minimum of 20, maximum of 10000. This setting can be accessed
by right-clicking on the log.
- Grouping (by category) now hides the category column.
- Listening, keyboard shortcuts, mouse shortcuts and joystick
state are now remembered on load. So, if your listening is
off when VoiceAttack is closed, listening will be off when
VoiceAttack starts up the next time. Command line parameters
take precedence over these.
- Updated profile export to properly include referenced commands
(commands used in execute and kill actions). The onus used to be
on the user to include referenced commands. This is now automatic.
There is now an option on the export screen to exclude referenced
commands (for times when you do not want the referenced commands
included. For instance, if you are exporting to HTML).
- Added, 'Application Focus (Process Target) Guide' to the
help documentation to give a little bit of assistance
in dealing with process targets.
- Holding down the left control key while clicking on the
edit profile button on the main screen will now take you
straight to the last command that was edited in that
profile. Also, an attempt is made to highlight the last
edited action in a command (hitting enter will edit the
action). These are just for convenience... I used them
while testing and thought it would be good to leave
them exposed for everybody.
- Stopped audio now fades out quickly instead of stopping
abruptly. Makes things a little nicer, I think. This can
be overridden in options in the audio tab. Note that this
is not applicable when, 'legacy audio' is in effect.
- Highlighting a portion of text in, 'Say something with text
do speech' dialog now only previews the selected text instead
of previewing all the text. To preview all text, either
select no text or all of the text.
- Added checking for some third-party apps that may interfere
with VoiceAttack (TeamViewer, Synergy and Sonic Studio to start).
The warnings will be indicated in the log.
Also added check for Cereproc voices. A one-time warning box will
pop up to let you know that the 'Single TTS Instance' option will be
set for you (check the appropriate box at the bottom to prevent
this for whatever reason).
- Added some size checking for resizable windows that are too big
if the overall screen resolution changes.
- Added warning box for screens with overall height of less than
800 pixels.
- Added, 'Always on top' to allow VA to be the top-most
app. This is accessible through the context menu in
the top-left corner of the main screen. Also, there
are two new command line parameters: -alwaysontopon
and -alwaysontopoff.
- Added command line parameter -nospeech. This disables VoiceAttack
speech recognition initialization. This is experimental and
functionally incomplete (mostly from a user interface standpoint) and
is used primarily for testing (that is, it is not currently
supported). However, this may be a last resort for those that just
can not get their speech engine to work and need to get into the software
for whatever reason.
- Touched up main screen icons a little bit. The person's
head with a pencil sticking out of it has always been
a sore spot o_O.
- Each resizable screen now allow resizing from each corner
and side. Resize tearing has also been reduced.
- 'UNABLE TO INVOKE PLUGIN. PLUGIN NOT VALID FOR THIS VERSION
OF VOICEATTACK' message is no longer displayed if plugin
is unable to load due to an exception in the plugin or
if the plugin can not load on successive executions.
You should get a better message now that includes the
exception text.
- Added, 'Cancel blocked commands' option to allow
the user to pick what to do with commands that are
blocked by synchronous commands. In the past, the
blocked commands would simply just execute after
the blocking command finished. Now, you can choose
to completely block those commands from ever executing.
Note that this option is now on by default and is the
default behavior. To revert back to the old behavior,
just un-select this option.
- Added command line parameter, '-verifyaudio'. This will
run through all the command actions that play a sound
(including random) and check for the associated file's
existence. This was for development work, but now it's
exposed for the user. This only runs at startup and
only affects the initial running instance.
- Added, '-ignorechildwindows' command line parameter to
have VoiceAttack suppress its check for child (popup)
windows. Some software (like Sibelius) keep a toolbox
window open at all times. This will help to not
bubble-up focus to that window. If need warrants, this
will be made a profile-level option. For now, it's
exposed in case anybody needs it.
- Added, '-showloadtime' command line parameter to
give an indication of the amount of time it takes
to load your profile. Both the total time and the
speech engine time are included.
- Added, 'Stop Running Commands When Editing' option
to indicate that any running commands be stopped
when a profile is edited. Deselecting this option
allows running commands to continue while editing
occurs (use with caution).
- Added a way to indicate the default profile when
using automatic profile switching. The default
profile is the profile that is selected when there
are no other selections to be made. To indicate
the default profile, simply use a single asterisk (*)
as a selection in the 'Enable profile switching for the
following windows' box on the profile options screen.
- Slightly lessened profile thrashing when using automatic
profile switching. If the process is not different, the
profile should not switch (/facepalm).
- New installer. Hoping this one is a little
more reliable.
- Mouse screen scroll values now persist for subsequent use.
- Mouse screen click delay now persists for subsequent use.
- TTS rate now persists for subsequent use.
- Bug Fixes
- Recorder screen now resizable.
- Fixed issue where duplicating set decimal action
was not capturing both random values.
- Fixed issue where jump marker/jump located both
in a suffix was not jumping to proper location.
- Fixed issue with execute command by name not
finding dynamic commands.
- Fixed 'stop command if target window focus is lost'
not unchecking if, 'repeats continuously' was
selected.
- More DirectX mapping issues resolved.
- Updated order of event handling on
startup to see if it helps with some of
the exceptions that are cropping up
related to the speech engine.
- Fixed suffix issues when using condition actions.
- Fixed issue where grouped commands was
throwing an exception on key press when
focused and collapsed.
- Fixed issue with dynamic commands containing
tokens breaking under certain conditions.
- Fixed issue where exec command dialog would not
save if referenced command was deleted before
saving profile.
- Fixed issue where if listening was suspended,
'reject pending speech' was selected, and a
command was issued when the listening was off and
then enabled mid-command, the command would still
execute.
- Fixed POV options not saving properly on joystick
options page.
- Added some helper functionality to work with directional
keys in DirectX mode. Before, if you had numlock
on and issued a command to press a directional key,
the numpad numeric value for the same key would be
pressed. The helper code looks for certain elements
and helps produce a directional key press.
- Column positions on profile screen now persisted again.
- Saving a profile that does not involve a change to a
spoken command phrase no longer causes the speech engine
to be reset. Not really a bug... not really an improvement
either ;)
- Editing a command from the log that has been deleted
no longer results in an edit screen with a GUID for the
command name.
- Perform a Window function display will now set the
window as the active, foreground window when applicable.
- {TXTRANDOM} token no longer removes empty entries.
- Fixed issue with listening override against a composite
command not offsetting suffix properly, respecting
confidence or respecting process overrides. Basically,
this is the code that time forgot o_O.
- Fixed issue {PREFIX} and {SUFFIX} tokens not
providing values if command was overridden with,
'Override listening if my spoken command begins with'
prefix.
- Fixed, '{CMD_AFTER}' token getting too much text.
- Joystick button trigger reset to, 'Not Set' from
command screen fixed.
- Fixed issue where process target was not picking up
all processes.
- Fixed issue with command line parameters -profile and
-command not allowing proper termination of the software.
- First pass at quieting the DateTime exception some get on
the trial startup if date format is changed.
- Fixed sound file browse issue where having illegal characters
in a token would cause a crash.
- Executing a command with no defined triggers (completely disabled,
via drop down selection or by name) as a subcommand should work now.
- Fixed issue where random sounds from directory would
not change directories when tokens are used and
executed repeatedly with changing directory.
- 'Hold down' time not displaying properly when
key press type changes has been fixed.
- Profile edit screen, 'cancel' and, 'done' buttons
no longer lock up if a synchronous command is
running.
- Better handling of setting the text in the clipboard.
- Commands not executing via external or mouse when listening
not enabled has been fixed.
- Most windows will no longer be topmost
above other applications.
- Fixed delete random sound from list selecting first item in the list plus
the next item on the list.
- Fixed mouse scroll selection enables click duration box. Also fixed
persisted values getting reset.
- Additional handling during app closing.
- Fixed some painting artifacts on resizable forms with grids.
- Fixed issue with spaces not being preserved in text replace.
- Mouse click delay not enabled on add now fixed.
- Launching and capturing STDOUT on a console app using the,
'hidden' attribute now hides the console app window.
- Shortcut output on dynamic commands no longer shows a bracket.
- DirectX mode and arrow keys should work when numlock is on or off now.
- New Known Issue
- Start/stop sounds do not play when pause is active. Not even
sure when this started, but it looks like it's been around for
a while.
v1.5.8
- Improvements
- Added some dynamic ability to commands.
What this does is allow for quick, dynamic
commands that can contain potentially optional
parts. To indicate a dynamic portion of your
spoken command, simply enclose the section in
square brackets : [ ]. Each dynamic element
within the brackets must be separated with a
semicolon.
Here is an example :
[Greetings;Hello]computer
To execute the command, you can now say :
Greetings computer
Hello computer
Note that multipart commands are also still
separated with a semicolon (as demonstrated by
adding, 'Hi' to the end) :
[Greetings;Hello]computer;Hi
With this example, to execute the command,
you can say :
Greetings computer
Hello computer
Hi
The dynamic sections don't have to just be at
the beginning. They can be anywhere in the
command. Also, as a side-effect, if you put
a semicolon on at the end of the selections,
it makes the section optional :
[Greetings;Hello]computer[how are you;]
You can say the following to execute the
command :
Greetings computer how are you
Hello computer how are you
Greetings computer
Hello computer
Note that there is a semicolon after 'how are you'
to indicate that the entire section is optional.
Something to consider when using this feature is
that you can create a lot of permutations from
very few words. Use with care :)
Dynamic sections also have the ability to indicate
a numeric range. This is indicated by putting in
two numbers separated by an ellipsis (..).
eject car [1..100] will allow you to say,
'eject car 1',
'eject car 2',
'eject car 3', etc.
Using this in conjunction with the new
{TXTNUM:variableName} token (see below),
you can come up with some interesting solutions.
- First attempt at using wildcards around
full commands. That is, allowing command
phrases that will execute if they are
contained in the spoken phrase (or are
at the beginning or end of a spoken phrase).
I know I've been reluctant to include this
over the years, but I think I've found a way
to make it not very intrusive. Just put
asterisks on both ends of your spoken phrase :
'*power to shields*' to indicate, 'contains'.
Put an asterisk at the end to indicate,
'starts with' : 'power to shields*'. Put an
asterisk at the beginning to indicate, 'ends
with' : '*power to shields'. So, if you
accidentally say something like, 'Power to
shields, please', your command will be found
and executed. Use with care... lol.
I haven't worked out all the details yet on
how this will impact other screens, but I
thought I needed to get the simple stuff out
there to see if it's even going to fly.
Note that this is for full commands only, and
not for prefixes/suffixes just yet.
Command wildcards that denote, 'contains' (asterisks on
both ends of the command) will allow for multiple expressions
to be contained in one spoken phrase. So, if you
have a command named, '*rocket*' and one named '*ship*'
you can say, 'rocket ship' and both commands will be
executed (pretty much simultaneously... you can always
uncheck, 'this command allows others to run at the same
time' to process in line. There is an attempt to process
the commands in the order that they are spoken as well.
The order of processing is, 'ends with', then 'starts
with' then, 'contains'.
- I put back the ability to quickly add text to
be typed out serially. The new action is called,
'Quick Input'. This was taken out a long time
back (it was called, 'Quick Input') in favor of
the recorder feature, since more and more folks
with non-English keyboards were using VoiceAttack.
'Quick Input' should allow for the currently-
supported list of locales to use the feature.
The reason I put it back is because a lot of
folks find the recorder cumbersome for simple
stuff. Also, there are some games that do not
allow the use of the clipboard paste (which is
what I would recommend for fast text display).
The feature simply allows you to type in text
in the box and have it typed back. For the
supported locales, it also should be able to
do the right-alt/deadkey stuff. You will be
able to specify the timing of the key presses
(as always, DirectX games have a polling mechanism
and are not event-driven when it comes to keyboard
activity). You will be able to specify either
DirectX or Standard input. Note that the
text box also accepts tokens that will be
replaced out at runtime.
Non-character key indicators for Quick
Input are below. So, let's say you want to add
a tab to your Quick Input action. Just
enclose the key name (TAB) in square brackets
and the key will be pressed : [TAB]
Your text would look something like this :
Hello, there.[TAB]How are you?[ENTER]
Note: The key indicators are not case-sensitive.
The full list is below (in no particular order):
ENTER - presses the enter key
TAB - press the tab key
ESC - press the escape key
ESCAPE - works the same as esc
BACK - press the backspace button
BACKSPACE - works the same as back
SHIFTDOWN - holds the left shift key down
SHIFTUP - releases the left shift key
RSHIFTDOWN - right shift if you need it
RSHIFTUP
LSHIFTDOWN - works the same as shiftdown
LSHIFTUP - works the same as shiftup
ALTDOWN - holds down the left alt key
ALTUP - releases the leftalt key
RALTDOWN - holds down the right alt key
RALTUP - releases the right alt key
LALTDOWN - works the same as altdown
LALTUP - works the same as alt up
CTRLDOWN - holds down the left ctrl key
CTRLUP - releases the left ctrl key
RCTRLDOWN - holds down right ctrl key
RCTRLUP - releases right ctrl key
LCTRLDOWN - works the same as ctrldown
LCTRLUP - works the same as ctrlup
WINDOWN - holds down the left win key
WINUP - releases the left win key
RWINDOWN - holds down the right win key
RWINUP - releases the right win key
LWINDOWN - works the same as windown
LWINUP - works the same as winup
NUM0 - numeric pad 0-9
NUM1
NUM2
NUM3
NUM4
NUM5
NUM6
NUM7
NUM8
NUM9
NUM* - numeric pad *
NUM+ - numeric pad +
NUM- - numeric pad -
NUM. - numeric pad .
NUM/ - numeric pad /
NUMENTER - numeric pad enter
F1 - press F keys... F1-F24
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
F13
F14
F15
F16
F17
F18
F19
F20
F21
F22
F23
F24
HOME - press home key
END - press end key
DEL - press delete key
DELETE - works the same as del
INS - press insert key
INSERT - works the same as ins
PAGEUP - press page up
PAGEDOWN - press page down
ARROWR - arrow right
ARROWL - arrow left
ARROWU - arrow up
ARROWD - arrow down
CAPSLOCK - toggle capslock
NUMLOCK - toggle numlock
SCRLOCK - toggle scroll lock
SCROLLLOCK - works the same as scrlock
PRINTSCREEN - press printscreen button
PAUSE - press the pause/break button
- Removed 'Stop repeating if window focus lost'
checkbox and replaced it with, 'Stop command
if target window focus is lost' checkbox which
is available whether you are looping or not.
What this does is stop the command if you
lose focus of the window that had the focus
when the command was executed. The underlying
value that is used is carried over to the new
checkbox making it backward-compatible with
what was in place before.
This feature now also has an option, 'Resume
command if focus regained'. This attempts to
resume the command if you click back into the
originally focused window ;)
- Added 'Play a Random Sound' action.
Finally... a user interface to handle
random sound files (you can still
do random stuff with conditions if
you want to). This interface will
let you choose the same options for
each individual sound just as you
can for single sounds. Also, there
is the option for, 'suppress repeat',
which will allow for a random list
to seem a little more, 'random' by
only playing each sound once. Note
that it's, 'suppress repeat', as it
does not completely eliminate the
possibility of a repeat (a repeat
can happen once the cycle is reset,
of course).
'Play random sounds' also has the option to
play from a specified directory. Just point
to the directory that you want to play out
of and VoiceAttack creates a random pool
out of all supported sound files in that
directory. This is useful if you have a
set of responses that you constantly update.
Just put the sound files in the directory
and there is no need to add it to the
random list.
Note that you can also put shortcuts (.lnk)
to your sound files in these directories
and they will be used to locate the target
file. Useful if you want to duplicate sounds for
different reasons and not want to copy the
the whole thing.
Note that the, 'Play random sounds' interface
supports multiple file edit - change the attributes
of one or more files at once (volume, wait,
complete). You can also add more than one file
at a time as well.
- First attempt at dictation. Three new actions are now included:
Start and stop dictation and clear dictation buffer. All of these
are considered, 'advanced' since there is no other supporting
user interface, and anything in the dictation buffer must be
accessed via token. The start and stop dictation actions have
the option to clear what is in the dictation buffer. The clear
dictation action has the option to just remove the last thing that
was said. As mentioned, there is a dictation buffer that gets filled
with each phrase you speak. There is the usual pause that indicates
the end of your statement, and whatever was said will be added to the
buffer. Nothing special here... you'll have to add your own
punctuation as you normally do with the Windows speech engine.
Multiple entries in the buffer are just appended to one another when
you access the values from the {DICTATION} token. Recognized
commands will be omitted from the dictation buffer if you speak
them on their own (that is what I am testing now... the ability
to be able to keep dictation going and still say, 'power to shields'
and then resume dictation). Since they are blocks, you can incorporate
them in your own commands with whatever spoken value you want
('open quote', 'quote', 'begin dictation'... or all of those... lol).
You can incorporate your own stop and start sounds and initialize
whatever variables you want to or even call a plugin.
New users to VA will probably hate this approach, but I apologize.
The ugly side of this is now you will experience the joy of what is
the dictation ability of the Windows speech engine. It is not Dragon.
Not even close. You will say things clearly and it will miss a lot.
Try to speak like a robot and it seems to work a little better... o_O
You've been warned :) My hope is that as the Windows speech engine
improves, this will be more useful.
There is a new option in the Profile Options screen called,
'Execute a command each time a dictation phrase is recognized'.
Enabling this will invoke the specified command every time a dictation
phrase is spoken. This could be used for plugins, playing a sound or
for whatever you want (mostly for plugins).
- New replacement tokens: {DICTATION} and
{DICTATION:PERIOD:CAPITAL:LATEST:UPPERCASE:LOWERCASE:NEWLINE:SPACEX}
The {DICTATION} token is quite simple. It is replaced with a simple
dump of whatever is in the dictation buffer. So, if you said,
'This is a test of the emergency broadcast system' and then later said
'this is only a test', the result would be 'This is a test of the emergency
broadcast system this is only a test'.
The other token is an attempt to offer some touchup to whatever is in the
buffer. The speech recognition engine may do all kinds of heinous things
to your text (as you will see ;))
You can use any or all of the options listed, separated by a colon.
So, if you simply wanted to add a period to the end of each spoken dictation
phrase and ensure that the first character is always capitalized, you would
use {DICTATION:PERIOD:CAPITAL}. The above example would be rendered as :
'This is a test of the emergency broadcast system. This is only a test.'.
If you wanted to also make it so that a line feed is placed between lines,
you can use {DICTATION:PERIOD:CAPITAL:NEWLINE}. You will then get
'This is a test of the emergency broadcast system.
This is only a test.'.
The options are:
PERIOD - As said, puts a period in for you at the end of each line.
CAPITAL - Capitalizes the first character of every line.
LATEST - Only display the last thing you said. In the example, you would
get 'this is only a test'.
UPPERCASE - Converts all characters to upper case :
'THIS IS A TEST OF THE EMERGENCY BROADCAST SYSTEM THIS IS ONLY A TEST'
LOWERCASE - Converts all characters to lower case :
'this is a test of the emergency broadcast system this is only a test'
NEWLINE - Makes sure each phrase is on its own line (note that it wont
show up this way if you write to the log... the log doesn't care about
new lines).
SPACEX - Replace the, 'X' with any number, and that many extra spaces
will be placed at the end of each phrase. The default is one space.
So, if you use {DICTATION:SPACE4}, the rendered output will be
'this is a test of the emergency broadcast system this is only a test'.
You can put the options in any order.
- Added some basic automatic profile switching. You can turn this option on
and off, 'globally' in the main options screen ('Enable Automatic Profile
Switching') and enable per profile in the Profile Options screen
('Enable profile switching for the following windows'). To keep things
as simple as possible, there is a text box on the Profile Options page
that allows you to input the name of the window of the application that
you want to look for. The input for this box is semicolon-delimited so
you can associate your profile with more than one application. Since
window titles vary depending on what you are doing, you can also add
asterisks (*) as kind of a basic wildcard. If you put the asterisk
at the end of the title, the search becomes, 'starts with'. If you
put the asterisk at the beginning, the search becomes, 'ends with'.
If you put an asterisk on each end, the search becomes, 'contains'.
No asterisks means a direct comparison (of course). So, lets say
you want your profile to automatically change when you switch over
to either your desktop or Notepad. The desktop window name (oddly
enough) is Program Manager (I know that's weird... there's some help
about this down below). Notepad's window title will change depending
on the document you are editing. Your input would look like this:
'Program Manager;*Notepad*' (without the quotes). That means it will
look for a window titled, 'Program Manager' as well as any window
that has a title that contains, 'Notepad' (although, I think searching
for Notepad may only require '*Notepad' (end with)). Hope this makes
sense :)
To help with finding out window titles, a new option has been added to
the VoiceAttack Load Options screen. To get to this screen, simply
start VoiceAttack while holding down CTRL + Shift. Select the option
titled, 'Show window titles (requires 'Enable Automatic Profile Switching'
to be checked in the Options screen).' This will show the window titles
in the log so you can see what VoiceAttack sees. This will only run
for the current session of VoiceAttack.
I wrote like 75% of this back in the summer, and I just left it there
since I really couldn't see it as a higher priority than other things
on the schedule. Then my kid was asking about it. I think I understand
now... lol. Overall, it was hare-brain easy to implement, so, here
ya go :)
- Added sound and tts volume offset sliders to the
options screen. Think of these as master volume
controls for all your sounds/tts.
- Added window targets at the command and profile
level, still defaulting to the global level that
is on the main screen.
To use this, simply either drop down the
list to select a target by name, or place an
asterisk (*) at the beginning to denote, 'ends
with', at the end to denote, 'starts with' or
on both ends to denote, 'contains'. This is
for windows that have names that change.
This works with the linked profiles as well, so
you can have a profile called, 'Winamp' that
interacts only with Winamp by setting the
process target to '*winamp*'. VoiceAttack will
find the Winamp app and set it as the target,
while your other commands (key press and mouse
actions) continue to be sent to wherever you
like. Prefixes and suffixes can have window
targets as well, however, if both a prefix and
a suffix have a target set, the prefix target
will be used (may be wrong about the choice...
we'll see how this irons out... might need to
be the suffix... not thinking clearly... lol).
The dropdown list can contain window names
(or parts of window names... with asterisks)
or the entire process name (asterisks not
incorporated yet). The list will show current
window names plus any currently-used targets
from other commands to make input easier. You
also have the option to turn the target on
or off by checking or unchecking the 'enable
process target' box. If you are targeting a
particular process at a higher level, there's
also the option to override and use the active
window. Hope this makes sense... A lot of
you have been asking for this for a while ;)
- Updated 'Send commands to' functionality on the
main screen to be more in line with the process
targets at the profile and command levels.
Before, all you had as options were, 'Active
Window' or some other window title. You can
now use asterisks around the window titles.
The list also maintains the last ten most-
recently-used items. You will note that the
process list is not refreshed on every drop
down now. There is an item in the list
called, 'Refresh this list' which will update
the list with the latest open window titles
and most recently used items. There is no
user interface to set the mru max number.
You can set this value by going into the
user.config settings, though.
- Added new action, 'Set text value to Windows clipboard'.
This is a very basic implementation, and only doing text
values for now. The value can, however, contain tokens.
To clear the clipboard, just leave the box blank (no
spaces... not trimming in case literal spaces are wanted).
Note that there is no, 'paste from clipboard'. There
are API calls to paste clipboard data which require finding
active controls and such to do the work, however, it's
just as easy to do a CTRL + V key press (works in just
about every case).
- Added new token, '{CLIP}' which will be replaced
with whatever is in the clipboard (as long as the
value in the clipboard is text, otherwise, the token
will be replaced with a blank).
- Added token, '{TXTCONCAT:var1:var2}'. This
will concatenate the text in variable 2 to the
text in variable 1.
- 'Reset defaults' from the options screen
now has the option to delete registration
info.
- Updated plugin support for the new data types.
This updates the interface for plugins going
forward, however, VoiceAttack's plugin execution
remains backward-compatible, so any plugins you
are currently using should still continue to
function.
- Added new token, '{TXTTITLE:variableName}'.
Token is replaced with text variable title
cased (VoiceAttack supported locales only).
Example: 'war and peace' becomes 'War And
Peace'. Yes... I know that's not *proper* title
case (at least in English), but it's as close
as the framework will allow without linguistic
rules. Sorry, even Microsoft wont touch it ;).
- Commands executed by multiple joystick buttons
will no longer execute single-button commands.
That is, as long as the first button down does
not have a command associated with it.
Example :
A down + B down executes a command
A down only executes a command
B down only executes a command
User presses A down and then B down.
A down only will execute, since it doesn't know
that B down only is coming. This is unavoidable.
A down + B down executes.
B down only does not execute.
- Updated image buttons with accessible
names for screen readers (so they won't
be indicated as just, 'button').
- Spoken command box now expands horizontally
with the command window.
- Added option, 'Single TTS Instance' to help
with certain TTS packages (Cereproc) that have
an instance cap. Select this option if
you are using TTS and it keeps cutting out.
- Moved command screen right-click context menu
'New Action' contents up one level (there
is no longer a, 'New Action' menu item).
- Reordered, 'Other' context menus into more
logical groups.
- Added, 'Set Boolean Value' command action.
Boolean values can be set to true, false, toggle
or not set. When toggling, a false value becomes
true, a true value becomes false and a not set
value remains not set. I added this to simplify
the use and readability of macros (using 0 and 1
for true/false turns a lot of folks off).
- Added, 'Set Integer Value' command action. This
uses larger integers so you can have more space to
work. This differs slightly from the small integer
(previously called, 'conditions'), as you have the
ability to compute a value. You can add/subtract/
multiply/divide (integer division) / modulus
(remainder) against an explicit value or against
a variable or text token. If the text token is not
able to be converted to an int, the computed result
will be, 'Not Set'. When computing a value, there
is also an option to initialize the variables to zero
if they are, 'Not Set'. This will save an initialization
step (might be handy if you are incrementing, for
example).
- Added new tokens {INT:variable name} and
{INTFORMAT:variable name} to provide a way to
access the new integer variables through text
features.
- Updated text comparison in 'Begin conditional
block' to allow either a variable name or a text
token as the source of comparison. The previous
function of the token being used to get the
variable name has been replaced by this.
- Updated 'Begin Condition' screen to include
boolean comparisons. This required the layout
of the screen to change from radio button selection
to tab selection.
- IMPORTANT: To avoid confusion going forward,
Conditions are now going to be called,
'Small Integer'. The, '{COND}' token is still
available for backward-compatibility. New tokens
'{SMALL:variable name}' and
'{SMALLFORMAT:variable name}' have been added
(and refer to the same variables).
- Added Disable/Enable action to right-click menu
of command action list. This will allow you
to selectively disable items. There are no
restrictions on this yet, and I have not tested
how this will affect everything (like jumps,
condition statements, etc). I found it handy
for testing and thought you might, too ;)
- Added, 'Set Decimal Value' command action. This is
basically all the functionality of Integers above,
with some additional calculation methods thrown in
(just kept adding whatever methods I could find...
they were a no-brainer to add, so, I might as well
add them). You can also round the set decimal
value to up to 10 places.
- Added new token {DEC:variable name} to provide
access the new decimal variables through text
features.
- Added, 'clear favorites' menu item to command
screen right-click menus.
- Added, 'Clear Saved Values from Profile' action.
This will allow you to selectively remove all
values of selected data types that are saved to
the profile. This does not clear resident values
(just the saved ones).
- Added three tokens : {CAPSLOCKON}, {NUMLOCKON},
{SCROLLLOCKON}. These will have a value of "1" if
the lock is on and a value of "0" if the lock is off.
- Added new token {TXTNUM:variableName}. This will
attempt to remove all characters except numeric
(0-9, ., -). So, text that looks like, 'turn -180.2'
will be replaced with, '-180.2'. Note that the value
is still text (from a token), but can be converted
if needed.
- Added new token {TXTALPHA:variableName}. This will
attempt to remove all numeric characters from the text
variable.
- Added four new mouse position tokens : {MOUSESCREENX},
{MOUSESCREENY}, {MOUSEWINDOWX}, and {MOUSEWINDOWY}.
This is a text value representation of the position
of the mouse, either in relation to the screen or the
active window.
- Added new action, 'Stop Sounds' which will stop all
currently playing sound files.
- Added new action, 'Stop Text-To-Speech' which will
stop all text to speech that is, 'speaking'.
- Added 'm4a' and 'aac' as acceptable sound file types.
- Added, 'Trim', 'Upper Case', 'Lower Case' and 'Replace'
as options to Set a Text Variable action.
- Added, 'Execute' on right-click menu of profile list...
Might help out a little when testing. Note that it
will show the entire command string for multipart.
- Added tokens {TXTUPPER:} and {TXTLOWER:} to
return the indicated text value as all upper
case or all lower case.
- Added token {TXTTRIM:} that returns the
indicated text value without whitespace
(without needing to use {EXP:}).
- Added token {TXTREPLACE:tokenName:from:to}
to allow you to replace portions of a token value
with something else. Example:
Token, 'myToken' value set to, 'This is a test'.
{TXTREPLACE:myToken:test:monkey} resolves to
'This is a monkey'.
- Set Text Value now has a new option to set the value
to, 'not set'.
- Set Text Value now has a way to get a value
from a URI. This can either be a web address or a
file path. Right now it has a timeout of 30 seconds.
That will probably need to be soft-set, but we'll see.
- Set Text Value can now be saved and retrieved with
the profile (persisted to disk), accessible even
between sessions.
- Set Conditional Value can now be saved and retrieved
with the profile (persisted to disk), accessible even
between sessions.
- Mouse set position now accepts negative numbers for
multi-monitor setups where the main screen is not
left-most... I've been asleep at the wheel,
apparently.
- For fun, added, '-opacity' command line parameter.
-opacity 75 sets the value to 75% opacity.
- Added, 'cut' to command list. Don't know
why that's been missing all this time o_O.
- Importing commands will now display a confirmation
box if any of the actions in the commands are launch
application or kill process.
- Importing a profile will now display a confirmation
box if any of the actions in the commands are launch
application or kill process.
- Right-click menu in command action list now contains
all the actions, including favorites (also mouse...
missing for all these years... lol).
- Begin Conditional Block numeric condition
value names as well as text compare
value names can now accept tokens
to indicate the variable name.
- Added, 'undo' and 'redo' to the command
action list (CTRL + Z, CTRL + Y).
- Added support for duplicating multiple
command actions (used to be just one
at a time).
- Updated command list to not display
dialog box when there are no options to
set in the action (Start VA Listening,
Stop Processing, Condition Else, etc).
- Added token, '{DICTATIONON}' to indicate
if dictation is on or not. If on, the
value will be "1". Otherwise it will
be "0".
- Added, '{DATETICKS}' token to express
the current date as ticks.
- Added new time tokens : {TIMEHOUR},
{TIMEHOUR24}, {TIMEAMPM} (shows am/pm
designation), {TIMEMINUTE}, {TIMESECOND}.
- Added 'favorites' feature to command
action items. Up at the top of each
command action on the, 'other stuff'
screen, you'll see a little star. If
you click it, it will add the action to
favorites. The, 'Favorites' menu item
will show up at the top of the, 'Other'
menu. It will only show up if there
are actually favorites. The favorites
are ordered in the order that they are
added. If you ctrl+click the star, you
can clear all favorites.
- Adding a 'Begin a conditional block'
action will now automatically add an
'end conditional block'. Since the
end block is required, this is probably
for the best ;)
- Added some date tokens (pretty self-
explanatory) :
{DATE}, {DATEMONTH},{DATEMONTHNUMERIC},
{DATEDAYOFWEEK}, {DATEDAY}, {DATEYEAR}
- Added 'Suppress pauses between key
presses' option to recorder screen.
This gives an option to allow pauses
between the key up of one key and
the key down of the next.
- Added text compare to 'Begin Condition
Block'. So, 'Begin Condition Block'
is now called, 'Begin Conditional
Block'. In this action you now have
the option to either compare values
of conditions (numeric) or compare
values of text variables. Both types
of comparisons work the same, however,
the, 'Text' field will accept tokens.
- Added new command line parameter,
'-toggledark' as a test. Puts
the main screen in, 'dark mode'.
Calling this from the command
line always affects the running
process, so, you can have a
shortcut on your desktop that
just changes the running instance's
color mode.
- Added log status bar in compact
mode that shows the last log
entry.
- Polished up the log color icons.
'Now with more roundness!'.
Dark mode now has squares.
- Added token, '{CONDFORMAT:condition}'.
This simply formats the condition
with commas for use in TTS. This was
the default behavior of, '{COND:condition}',
but it has been made apparent that
calculating anything over 999 results in
an error.
- Added, '{ACTIVEWINDOWTITLE}' token that
returns the active window's title.
NOTE: THIS REPLACES '{WINDOWTEXT}' token.
- Added, '{ACTIVEWINDOWPROCESSNAME}' token
that returns the active window's
process name (what you would see in Task
Manager).
- Added, '{ACTIVEWINDOPROCESSID}' token
that returns the active window's process
id (most will never use this... just
included because it was nothing to do so).
- Added, '{ACTIVEWINDOWWIDTH}' token that
returns the active window's width.
- Added, '{ACTIVEWINDOWHEIGHT}' token that
returns the active window's height.
- Added, '{ACTIVEWINDOWTOP}' token that
returns the active window's top (Y-
coordinate).
- Added, '{ACTIVEWINDOWLEFT}' token that
returns the active window's left (X-
coordinate.
- Added, '{ACTIVEWINDOWRIGHT}' token that
returns the active window's right
(left + width).
- Added, '{ACTIVEWINDOWBOTTOM}' token that
returns the active window's bottom
(top + height).
- Added new action set, 'Perform a window
function'. This will allow you to target
a particular window and display
(normal, minimize, maximize, etc), close,
move, resize or change its title text.
You can specify how much time to wait for
the window before VA gives up.
Changing the title allows you to name
windows how you would like to search for
them, especially if you have multiple
instances that you want to keep track of.
- Comments can now be blank so you can add
some spaces between blocks in your
commands (aesthetics).
- Added some additional filter buttons to the
bottom of the profile edit screen to aid
with the HUGE profiles out there. There
are six filter buttons : hide commands with
disabled, 'when i say' attribute, hide
commands with disabled, 'when i press
button' attribute, hide commands with
disabled, 'when i press keys' attribute,
hide prefix commands, hide suffix commands,
hide full commands. They just toggle on
and off.
- Sending keys/mouse clicks to windows with
popup dialog boxes should be good to go now
(not sure why I didn't see this four years
ago o_O).
- Added two new tokens, '{CMD_BEFORE}' and
'{CMD_AFTER}'. When a wildcard is used in
a spoken phrase, these can be used to get
everything else in the spoken phrase.
{CMD_BEFORE} is anything before the wildcard
phrase. {CMD_AFTER} is anything after the
wildcard phrase. For example, if using,
'*rocket*' as your wildcard phrase and you
say, 'i am going for a ride in my rocket ship'
{CMD_BEFORE} will contain, 'i am going for a
ride in my' and {CMD_AFTER} will contain
'ship'.
- Added new token, '{TXTLEN:valueName}'. This
will return the length of the text variable's
value.
- Added 'Convert Text/Token' to 'Set a Condition
Value' action. If the text/token can be
converted to an int16 value, the value
will be used, otherwise, the value will be,
'Not Set'.
- Added new token, '{EXP:expression}'.
This is used for some simple math and also
as a stopgap for the text comparison user
interface.
Everything after the colon is evaluated, so
if you use '{EXP: ((5 + 5) - 2) * 10}' the
result will be '80'. The expression token
also accepts tokens. So, if you have a text
value myText1 and it is set to '100' and a
condition value myCond1 that is 200, you can
have an expression of,
'{EXP:({TXT:myText1} + {COND:myCond1}) * 2}'
that results in '600'. Might be biting off
a little bit too much here, but I'd like this
to succeed :) Note that the result values can
be decimal values when dividing.
Accepted arithmetic operators :
+, -, * (multiplication), / (division),
% (modulus).
Accepted comparison operators :
=, <, >, <= (less than or equal), >= (greater
than or equal), <> (not equal). These can
be used for numbers as well as text (text
comparisons have to do with alphabetical order
and not length).
You may also use, 'And', 'Or', 'Not':
{EXP: ('cat' = 'dog') And Not (20 = 30) }
{EXP: ('cat' = 'dog') Or (20 = 30) }
{EXP: Not ('cat' = 'dog') }
You can use, 'LIKE' as part of text comparison
expressions. The text that you are comparing to
needs to have asterisks in the places that they
need to be (wildcards). Asterisks around the text
indicate, 'contains'. Asterisks at the end
indicate, 'starts with' and asterisks at the
beginning indicate, 'ends with'. No asterisks
indicate exact match. Text comparisons are
not case sensitive.
Note that the text parts need to be between
single quotes (this includes tokens) :
{EXP: 'dump cargo' LIKE '*cargo*'} results in
'1'. If your text contains single quotes, they
need to be doubled up to use in expressions:
{EXP:'catcher''s mitt' = 'pitcher''s mitt'}
You can concatenate text by using, '+' :
{EXP: 'welcome' + ' ' + 'captain' } evaluates
to 'welcome captain'.
You can use, 'TRIM', 'SUBSTRING', 'LEN' and,
'IIF' (immediate, 'if')).
TRIM removes any blank spaces around text :
{EXP: TRIM(' my trimmed text ') } evaluates
to 'my trimmed text'
SUBSTRING(start position, length) gets just
the portion of the text you are wanting:
{EXP: SUBSTRING('let the good times roll', 9, 4) }
evaluates to, 'good'. Note that the start is
1-based (not zero-based).
LEN gives the length of the text:
{EXP: LEN('let the good times roll') } evaluates
to 23.
IIF(expression, true part, false part) allows
you to evaluate an expression and get one of
two values depending on the result:
{EXP: IIF('cat' = 'dog', 10, 20) } evaluates
to, '20'
{EXP: IIF('cat' <> 'dog', 10, 20) } evaluates
to, '10'
myCondition1 is 100 and myCondition2 is 200 :
{EXP: IIF({COND:myCondition1} > {COND:myCondition2},
'Blue', 'Green') } evaluates to, 'Green'.
If your expression results in 'True' or
'False' the result will be replaced with '1'
for true and '0' for false (for use in conditions).
{EXP:5 < 6} will result in '1'.
Note: If you try to stuff a decimal value
into a condition, the condition will be,
'Not Set'. Also, if the value goes out of range
of the condition, the condition will be, 'Not
Set'.
- Exposed -command command line argument to execute
a named command. If a VoiceAttack process is
already running, the running process will execute
the command. Note that double quotes are needed
if your command name has spaces in it. Command
names are not case-sensitive.
-command test (runs command, 'test')
-command "my test" (runs command, 'my test')
If the command does not exist in the current
profile, the log will show you the error of your
ways ;)
- Killing an individual command now kills the
playing sounds for that command.
- Killing an individual command now kills the
playing TTS for that command.
- Reworked the, 'Other' button on the command
screen. The long dropdown list has grown
too large, and since more stuff is on the
way, something needed to be done.
Now command actions for, 'Other
Stuff' can be accessed through flyout menus
rather than just through one big dropdown
list. The full dropdown list is still
available once you make your selection,
or, if you press CTRL at the same time you
click the, 'other' button, you can see the
list as it was.
- Added 'condition else' action that allows control
of your macro to jump to this point if a condition
is not met. Been needing this for a long time.
- Added command markers. This indicates a point
in the command action list that can be jumped to
with the new, 'Jump' action. Markers can be named
whatever you want, but must be uniquely named
within the command (if markers happen to be named
the same in a prefix/suffix situation, the first
marker will be jumped to).
- Added, 'Jump' action to commands. You can now
specify to jump back to the start of the command,
to the end of the command or to a jump marker.
To jump to a marker, you just specify the name
of the marker you created in the combo box.
When the command execution reaches the jump point
and a marker is indicated, the execution continues
where the marker is located (can be located anywhere
in the command). Markers can also be used in prefix/
suffix situations (for instance a jump in a suffix
should find the marker in a prefix, jumping to the start
of a command from a suffix will go to the top of the prefix,
etc). Note that when using a jump to exit the command,
this does not terminate the command. Any running subcommands
will still continue to process. Might make that an
option later.
- Added, 'Wait until the launched application
exits before continuing' option to the 'Run
an Application' action. Selecting this option
will cause the running command to pause until
the launched application closes.
- Added, 'Screen Coordinates' and, 'Application
Coordinates' to the mouse action screen. This
will allow you to choose a position of the mouse
cursor as it relates to the entire screen or
to the application that is in the foreground.
If the coordinates are out of bounds,
the cursor is moved to the boundary.
(The mouse location capture utility has been
updated to respect either screen or
application coordinates).
- Added simple, 'Category Grouping' to profile
edit screen to cut down on some clutter.
Button to enable/disable is at the bottom
of the profile screen. Clicking the group
header will expand/collapse the group. You
can also hit enter when the header is selected
to expand/collapse. If you hold down CTRL at
the same time you expand or collapse, you can
expand or collapse all. Renaming categories
is now easy to do en masse... just right click
on the category group and select, 'Rename
Category'.
- Added a list filter box at the bottom of the
profile screen to filter down commands. Pretty
straightforward. If you just start typing in
the box, the command list will be filtered where
any field contains the typed text. Of course,
this does not affect the underlying data.
- Added, 'Add a Comment to Action List' action
to, 'Other stuff'. Just add some text and
the comment will show up in italics with
a slightly lighter color in the command
action list. This action doesn't do anything
other than show you your own notes in the
command action list.
- Added option, 'Reject Pending Speech' option
to options screen. This is the UI version of
the -bypassPendingSpeech command line argument.
When you turn off, 'listening' in VoiceAttack,
you can choose how to handle what happens if
you are speaking at the same time. When this
option is not checked and you turn off,
'listening', VoiceAttack will let you finish
the phrase you already started before it stops
processing your commands. Checking this box
will stop command processing immediately,
including the phrase you are speaking.
- For fun, if you add a .wav file called,
'sys_on.wav' and/or a file called, 'sys_off.wav'
to the same directory that VoiceAttack.exe
is located, VoiceAttack will use those files
for its on/off sound effect (listening on/off,
joysticks on/off, etc). (Of course, you
noticed this must be a valid .wav file... if
an error is encountered, the sounds are
reverted back to the default sounds). This
was almost no code, so I just left it in ;)
Also, if you add a file called,
'header.png' to the VoiceAttack.exe folder,
the header bar on most windows will use that
image as the background, tiled. Not sure how
this will look for you, but I tried it with
an image with 500 pixels and and image with
5 pixels and it seems alright. Your milage
may vary, of course. Make sure your image
jives with the icon colors and header text...
or you wont be able to see them (again...
you noticed this must be a valid .png file,
however, I tried renaming a .jpg file to
header.png and it worked... lol). If an
error is encountered, it just reverts to the
original black.
- Added a mass update feature to the Edit Pause
screen. Note that its on the Edit screen. You
can mass update pauses at the command level and
at the profile level. How this works is that any
command action that has a duration that matches the
original duration will be changed to match the
updated duration. So, lets you have a bunch of pauses
that are 0.1 second in your profile that you want to
change to them to 0.2 seconds. You edit one
of them and change it to 0.2 seconds. If you choose
the mass update option to alter the profile, all the
pauses that are 0.1 second will be changed to 0.2
seconds (no other ones will be touched). Some folks
use a standard pause time for certain things. This
will help to avoid changing all pauses to a single
value.
You can undo a mass change from the command level
by pressing Cancel on the Command Edit screen.
To undo a profile-level update, you will need to
hit Cancel on the Profile Edit screen.
- Added a mass update feature to the Edit Keypress
screen. Again, note that its on the Edit screen.
You can mass update key presses at the command level
and at the profile level. When you select the,
'Mass Update' option and select the scope (either
command or profile) any keys that match the original
keys will be changed to the updated value. This
will also include the duration (if there is one)
and the input mode. Note that the mass update
option becomes disabled if you try to change the
action type (from key down to key up, for example).
You can undo a mass change from the command level
by pressing Cancel on the Command Edit screen.
To undo a profile-level update, you will need to
hit Cancel on the Profile Edit screen.
- Added ability to resize the command screen. This
required the removal of the advanced/basic view
button (+/-) in the top-right corner. Not sure
if that will even be missed. Command screen
can be resized by dragging the bottom-right corner.
Still need to work on flicker/painting, but it
seems to be ok so far.
- Added support for FLAC audio files. Make sure the
FLAC codec is installed by going here :
http://www.xiph.org/dshow/
- Added, 'Window Style' to application launch action.
Standard choices are, Normal (default), Minimized, Maximized
and Hidden. Note that these only work if your target app
supports them.
- Added new option, 'Recognition prefix exclusions'. This is a semicolon-
delimited list of values (the default is, 'if;but;the'). Sometimes
when we speak commands there are ambient noises. You might breathe or
make a, 'pop' noise. These noises are sometimes interpreted as words.
For instance, if you have a command called, 'power to shields', you
might see it come up as, 'Unrecognized: if power to shields'. This is
because the speech engine interpreted the, 'if' from some kind of noise
it picked up (mostly breathing). For a long time, VoiceAttack has filtered
out some words ('if' and 'but'). This doesn't work well with non-English
speakers and they are hard-coded (of course). This option lets you pick
what words to use. Hope this makes sense...
- Added option to check for updates on startup... if that's a real 'feature'...
lol. Only gives you a message box if there is actually an update.
- Added, 'orange' as a Write to Log icon color... just for fun.
- Added, 'Disable profile initialization commands' to
Load Options screen (ctrl + shift on VA startup).
Also added proper documentation for this screen
in help file.
- Bug Fixes
- Fixed export/import issue with profiles that
contain values in 'Execute a command each time
a phrase is unrecognized' or 'Execute a command
each time this profile is loaded'.
- First stab at quelling app exit exceptions.
- Fixed the numpad enter issue that's been around FOREVER. In DirectX mode,
you can select either the alpha keyboard enter (Enter) or the numpad enter
(Num Enter). The way you need to select the numpad enter key is through
the Extended Key Chooser screen (the icon is a small keyboard on the right
side of the 'Edit/Add a keypress screen). The reason is because normal
Windows forms do not distinguish between the two enter keys.
- Fixed some font issues on several screens.
- Fixed issue with calling command by name in a
linked profile not working properly.
- Fixed bug in kill process that would prevent some
apps from being terminated.
- Fixed issue where prefixes would sometimes end up
as full commands.
- Fixed bug with delete of commands not allowing
subsequent deletes without selecting another
command.
- Optimized composite command (prefix/suffix)
loading.
- Fixed registration screen not allowing
registration... lol. At some point I
was in the middle of creating a better
error message & never finished the
process. All better now ;)
- Fixed some issues with extended keys.
- Fixed issue with nested commands not
executing if disabled.
- Fixed issue with empty action sequences
not stopping properly when included in a
loop that repeats indefinitely.
- CTRL + V pasting in command action list
without copying anything no longer crashes
the application.
- Copy selected as text no longer crashes
app.
- Updated DirectX mapping for some keys to be the proper
mapping o_O.
- Fixed some DirectX extended key issues.
- Fixed joystick disable not working in some cases.
Well... any case other than the global listening...lol.
- Fixed circular reference issue in some cases
with execute command children that also execute
commands.
- Fixed, 'buttons' column not showing properly
in profile screen.
v1.5.7
- Improvements
- First pass at joystick integration in VoiceAttack.
You can now assign the buttons on up to two devices to
control features such as command execution and start/
stop listening. Each device can have up 128 buttons, plus
up to four POV (hat) controllers. VoiceAttack will treat
each pov as a set of switches that can have 1, 2, 4 or 8
positions (they will display as POV 1-8, and act just like
pressing buttons). For the 2 direction switches, you
can choose either up/down or left/right. There is also
two-button modifier support which can be cross-stick (eg,
press button 1 on joystick 1 plus button 5 on joystick 2
will execute a macro).
You will find this feature in pretty much every place that
you'll find keyboard shortcuts (including profile override).
To turn on joystick support, just go into the options screen
and click on the, 'joystick options' button. Full documentation
is included down in the .pdf if it's not obvious as to
what is going on. You'll notice in the command screens you
have yet another checkbox labeled, 'when i press joystick
button'. This is where you can assign your buttons to your
commands. There are two new, 'other' actions: enable/disable
joysticks.
I didn't implement a, 'stop all commands' as global
feature, since there is already a command action that
does the same thing. If this comes up as a need later,
we can work it out then :)
- Added, 'Wait until tts is finished before continuing'.
This will hold up the executing command until the
speech finishes (Useful for prompts).
- Added, 'TTS can complete other tts' feature to
complete any other executing TTS. Note that any TTS
marked, 'wait til finished' will be completed and
execution will resume in that command. Use with
caution.
Adding the, 'wait' feature has added the need to have
multiple instances of TTS (due to threading). This,
coupled with the ability to stop all processes (and
also stop any executing tts) has now made it to where multiple
TTS instances can run at the same time. This may
cause some to have to redo their profiles somewhat, but the
requests for having a, 'wait until finished' come up
a LOT. The, 'interrupt' feature was added in case that gets
annoying.
- Added, 'Wait until sound is finished before continuing'.
This will hold up the executing command until the
sound file finishes playing (Useful for prompts).
- Added, 'This sound can complete other currently-playing
sounds' feature to complete any other playing sound file
Note that any sound that is playing and is marked, 'wait
til finished' will be completed and execution will resume
in that command. Use with caution.
Adding the, 'wait' feature has added the need to have
multiple instances of sound players loaded (due to threading).
This, coupled with the ability to stop all processes (and
also stop any executing sounds) has now made it to where
multiple sound players can run at the same time. This may
cause some to have to redo their profiles somewhat, but the
requests for having a, 'wait until finished' come up a LOT.
The, 'interrupt' feature was added in case that gets
annoying.
*******Isn't copy and paste great? :)
NOTE: If you are using, 'Force Legacy Audio' or have removed
your Windows Media Player components, these features will not
be available to you (a warning will be given in the log to
indicate this when encountered).
- Updated command edit to allow for multiple
actions to be selected and manipulated at once.
Ctrl + A selects all, holding down shift allows
for multiple items to be selected, holding down
ctrl will allow for you to pick non-contiguous
items, etc (just like a normal list box... lol).
You can move groups of items (even non-contiguous
items) up and down, delete, copy and paste
(within the same command or even within another
command in another profile).
- Added, 'copy all as text' to command list. This
should help showing command actions be a little easier
than typing or exporting profiles.
- Added 'Copy Selected as Text' for sharing
just portions of your commands.
- Added option to stop a repeating macro from
executing if the active window loses focus.
- Added X,Y input boxes for mouse, 'move to'.
- Added support for .ogg. You will need to make
sure you have a codec for it in Windows Media
Player in order to actually hear the sound.
(The codec can be found here :
http://xiph.org/dshow/). Note, this will only
work in non-legacy mode (just like .mp3 and
.wma).
- Added new token {TXTURL:textValueName}. This works
just like the {TXT:textValueName} token, except what
you get back is the value URL encoded. Also, if the
value is not set, you will receive a blank value instead
of a url encoded, 'not+set' :)
- Added the ability to execute a command on profile
selection. Whenever a profile is chosen (even on
VoiceAttack startup) and this option is set, the
selected command will be executed. Some will want
to use this to play a sound (or tts). Some may
want to use this to initialize stuff. A log message
is written to remind you that this is going on :)
- Added an unrecognized command, 'catch all'
command that can be selected from the profile
overrides screen. If a command is selected and an
unrecognized phrase is encountered, this command
will be executed. The {CMD} token will be overridden
with the unrecognized value (if you want to do anything
with that value... say it back to you with TTS, pass
to a plugin, whatever). Outside of that, it works
just like any other command (including the confidence
level). Use it to play a sound (which is what I'm sure
it will be used for the most... lol).
- Added advanced feature, 'Execute Another Command by Name'.
In the, 'Execute Another Command' action screen, you can
now either pick another command from a dropdown list or
you can enter the name of a command to execute in the
provided text box. The text box can contain replacement
tokens for how ever you want to use it. This is designated
as an, 'advanced' feature since there is limited loop
checking performed. If a full command name exists, a check
will be made. If the command can not be found (with or
without tokens) there is no loop check. This can easily
freeze and/or crash VoiceAttack. You've been warned :)
Also, if you are trying to execute a multipart command by
name, you can pick any one of the commands and it will
be used (for instance, if you have a multipart command
labeled, 'test;test all;test something', you can just
put, 'test' in the box.
- Confidence levels are now exposed to the user for
selective execution of commands. When the speech
engine recognizes a phrase, a confidence score is
given based on how accurate the speech engine thinks
it was at recognizing. You can now indicate that a
minimum score must be met in order to execute commands.
This value can be set in the options page as a 'global'
minimum, at the profile level as an override and default
for all commands in that profile, or, at the command
itself (which overrides everything). If a phrase is
recognized but is rejected due to being below this
threshold, indication will be shown in the log.
If the confidence level is used in composite commands
(prefixes/suffixes), if either of the parts is using
the confidence level, the derived command will use
that level. If *both* parts are using the confidence
level, the maximum of the two will be used.
- Included support for mouse back and forward buttons
in the mouse action screen. You can now click,
double-click, hold down and release the mouse forward
and back buttons just like you could the other three.
- Added new token {TXTRANDOM:value} to allow
for the simple randomization of text within a token.
For example, TTS could be set up to say,
'I love {TXTRANDOM:food;animals;jewelry}' and the result
would be, 'I love animals' or, 'I love food' or, 'I love
jewelry'. Note that the, 'value' portion can be
another token, however, if you want to randomize
randomized tokens, I might suggest using text values
to store each part (may or may not work like you want
it to otherwise... winding down an endless permutation
trail for testing at this point).
- Bug Fixes
- Removed code to release modifier keys on kill
command to avoid any unpleasantness. I guess
this isn't technically a bug, but it's definitely
not an, 'improvement'.
- Fixed bug where -listeningoff command line parameter
would prevent startup command from executing.
- Fixed an issue where the key passthrough was not
staying set for some hotkeys.
v1.5.6
- Improvements
- First attempt at what are being called,
'conditions'. Conditions are basically numeric
variables that can be set by the user. These
values can be checked to alter the flow of command
actions. There are three new screens to support
this new feature set : Set Condition Value, Begin
Condition Block and End Condition Block.
Use the Set Condition Value to set a value to
either an explicit value, a random value, an
incremented value, a decremented value or a
value contained in another condition. There is
also an option to clear an existing value
(helpful for creating toggles or just getting
rid of a value).
To conditionally alter the flow of command actions,
you can surround the actions with Begin and End
Condition blocks. The Begin Condition block
checks the condition value, and if the condition
is met, action execution is allowed to continue.
If the condition is not met, action execution
resumes after the corresponding End block.
There is an opportunity in the End block to
exit the command if the condition is or is
not met.
A tiny bit more information is available in
the VoiceAttack help document, under, 'Other
Stuff' screen.
- First pass at plugin support for VoiceAttack.
To invoke an external plugin, you will use
the, 'Execute an External Plugin Function'
command action. Too much to explain here...
you'll have to look at the documentation or
follow along in the VoiceAttack Google group.
- If you hold down CTRL + SHIFT when VoiceAttack
starts, you will see the new load options
screen. Right now there are only two options:
disable plugins and reset all VoiceAttack
settings (works just like clicking the,
'reset settings' button on the options page).
The options on this page are considered before
VoiceAttack loads, so, disabling plugin support
from here will prevent plugins from actually
initializing. More stuff later... maybe...
- Added a button to profile screen to toggle
between expanded and consolidated view of
multipart commands.
- Added three new tokens for use in Play a Sound
and Run an application actions. The new tokens
are :
{VA_DIR} - VoiceAttack install directory.
{VA_SOUNDS} - VoiceAttack Sounds subdirectory
(contained in the VoiceAttack install directory).
{VA_APPS} - VoiceAttack Apps subdirectory
(contained in the VoiceAttack install directory).
The Sounds and Apps directories are created by
the installer.
If you have sound files that you are wanting
to share, you can keep them in relatively the
same place without having to alter your profiles.
For example, lets say you create a folder
called, 'My Sounds' in the VoiceAttack\Sounds
folder to hold your sounds. To access a sound
file in that directory, you would put
{VA_SOUNDS}\My Sounds\someSound.wav. If you
export the profile, the virtual path goes with it
This was built to help some of the users that
are building sound packs for various games.
This is an evolving thing... it may even be
user-configurable by the end of this.
NOTE: The location of the VA_APPS and VA_SOUNDS
tokens can now be set in the options screen.
- Added Set Text Value command action for use with
things like text-to-speech. Just like conditions,
you can use whatever name you want. You can
set the value explicitly (myTextValue = 'Some text')
or, you can set a text value to the same text as
another text value (just like Conditions). Also,
just like conditions, the text values are at the
application level and are available (and modifiable)
between profiles. The text values themselves can
contain other tokens that are replaced at runtime.
NOTE: When setting a value explicitly, you may
also use any available tokens and they will be
replaced at run time.
- To support the new text value, two new tokens have
been added : {TXT:valueName} and
{TXT:valueName:defaultValue}.
The valueName portion is not case-sensitive. The
defaultValue portion can be used in case the
text variable is not set. Just put whatever value
you want in the defaultValue portion and, if the text
value is not set for that variable, the default value
will be used. More often than not, you will be
using {TXT:valueName}, but there will be times when
just having a default value in place when the value
has not been set will be handy.
- Added new command action, 'Write to Event Log'
which will allow you to specify a tokenized
(or not) value, plus indicate the color of the
indicator. This will be useful for inspecting
your values. Even though it's not technically
an, 'advanced' feature, it will probably only
be used with the advanced features.
- Added token to TTS to read current profile name:
{PROFILE}.
- Added token to TTS to support conditions:
{CONDITION:theConditionName}. This will read the value
in the condition. Useful for me, at least, to
debug... left it in just in case you might want to
use it for something.
Note : The help file says something else, but it is
currently still {CONDITION:theConditionName}.
Ultimately, whatever is in the help file will be
what is used since it is shorter.
- Added {PREFIX} and {SUFFIX} tokens to be used
in composite commands. If you have a composite
command, the {PREFIX} token will be replaced
with only the prefix part of the command,
while the {SUFFIX} token will only be replaced
with the suffix part (to access the whole command,
continue to use {CMD}). The tokens can be present
in either the prefix or the suffix commands...
if that makes sense o_O.
- Execute external plugin context value now accepts
tokens (fwiw).
- Added, 'Rate' slider to TTS. Fun somehow... I don't
know why that wasn't in there.
- Stopping command processing will now attempt to
stop any text-to-speech that may be being read.
- Added, 'Duplicate' feature to command action list.
Another thing I thought had been done already.
- Changed the runtime permissions from asInvoker
to highestAvailable to see if VoiceAttack can
avoid having to be set to run as administrator
all the time. I didn't want to do this, but
it has become painfully obvious that this has to
be done for a lot of people. Hoping this doesn't
enrage everybody else due to the warning messages
(my guess is that anybody that gets the messages
will just run VA as administrator anyway).
- Browsing for sounds now looks in the folder
you had last selected a file. Added the
ability to hold down ctrl to go directly to
VA_SOUNDS (kind of a hidden feature... description
in tool tip). If the selected sound file is
within the VA_SOUNDS root, the {VA_SOUNDS} token
will be automatically replaced in the text box.
- Allow for commands indicated as disabled for
shortcuts and, 'when i say' to be executed
as subcommands.
- Touched up registration screen to be less
confusing.
- Bug Fixes
- Second pass at patching the dead/grave/deaf
key causing double marks (�� ^^) on a single
press. Sorry, my European friends... I'm
trying! There's a balance I'm trying not
to disrupt down below... lol
- Fixed issue with email registration accepting
a, '+' in the email address.
- Fixed an issue where linked profiles could not execute
subcommands if the subcommands were located in the
linked profile o_O
- Fixed issue when editing a command with no
headset plugged in may cause VoiceAttack to
crash.
- Fixed {CMD} token to work properly with multipart
commands.
- Fixed shortcuts being disabled in a command when
the spoken phrase is disabled (again).
- Fixed shortcuts not working when switching
between profiles.
- Fixed compact mode screen corruption when
starting VoiceAttack as minimized.
- Play sound preview now checks to see if the
file exists (as a better indicator for
token replacement).
- Fixed import export duplicate comparison
issue when using composite commands
(prefixes/suffixes) with groups.
- Fixed issue where profile override would
invoke on, 'when i say' even if the command
was disabled.
- Installer now checks for .net framework
v4 and warns appropriately.
- Fixed tab order in some of the, 'other stuff'
screen controls.
- Fixed some subcommand/multithreading issues.
- Fixed, 'stop listening' button from showing
incorrect status when there is pending speech.
- Fixed import export duplicate comparison
issue when using composite commands
(prefixes/suffixes) with groups... for real
this time (I think). Kill commands should
now be able to be exported and imported
properly.
- Added code to keep prefixes and suffixes
from filling up your, 'execute another command'
and, 'kill command' dropdowns.
- Tooltips on, 'other stuff' screen were an outright
mess. Took a spin at cleaning them up.
- Fixed an issue with modifiers being only available
as a toggle in the profile-level override hotkeys
feature.
- Fixed an issue with changing/importing profiles while
no audio connected.
v1.5.5
- Improvements
- Added first round of referenced profiles. In
the profile options, you can now select one
other profile to, 'include' with your profile.
Any profiles referenced by the referenced profile
will be included as well.
Some notes on this :
Exporting your profile will not maintain this
information.
All commands in the selected profile will override
what is in the reference profile. If the
referenced profile references a profile, *ITS*
commands will supersede those in the profile
it references (and so on up the line).
Keyboard shortcut combinations are NOT overridden
if they exist in commands with different names.
If you have a combo in one profile and it also
exists in the referenced profile (with different
names), BOTH will be executed on key press. This
is by design, since an overridden key combo is
not quite as evident as the spoken commands.
Executing both will show in the log and adjustments
can then be made by the user.
The override listening command in the selected
profile is the only override (the overrides in
referenced profiles are not considered).
So, if you have, 'Computer' as the listening
override in your selected profile, and, 'Sara'
in your referenced profile, all commands will
respond to, 'Computer' as the override.
When viewing/editing your profile, you will only
see the selected profile. There is no, 'merged
view'. This is by design to avoid confusion.
To view and edit the referenced profile, you
must switch to that profile. Not going to
build that interface any time soon.
You *can* have profiles that point at each
other (and not create a circular reference...
lol). This was done so that you could
jump back and forth between two profiles and,
depending on the selected profile, override
the other... hope that makes sense.
Commands disabled in the selected profile but
are not disabled in the referenced profile are
treated as not overridden. That is, if you have
a command called, 'test' in the selected profile
and it is disabled (both hotkey and voice command
are unchecked), and there is a command called,
'test' in the referenced profile that is not
disabled, the, 'test' command in the referenced
profile is then active. Since there is no way
in the UI to indicate, 'do not override', this
is the only current way to do this.
At some point, there *may* be multiple includes,
but we need to wait 'til the dust settles on
this one first.
- If you add semicolons between phrases
in the, 'Say Something With Text to Speech'
feature, VoiceAttack will randomize which
phrase to use. Kind of a hidden feature :D
- Added time tokens to TTS text. If TTS
encounters, '{TIME}' in its text, it
replaces it with the current time read
as a 24 hour clock. '{time}' (note all
lower case) will read as a 12 hour clock.
Example (with random time reading) :
The time is now {time};It is now {TIME};{time}
- Added {CMD} (upper case only) which reads
the current command name.
- Added {RANDOM:1:100}. This will generate and
say a random number between some low number and
some high number (inclusive). The example
shows rolling between 1 and 100.
- 'Other' screen now remembers the last
action you selected.
- Export to html now remembers what columns you
choose.
- If a start listening or stop listening command
is issued and a, 'play a sound' or, 'say something
with TTS' is anywhere in the action list for
that command, the start and stop listening sound
effects are muted.
- Bug Fixes
- Fixed an issue where when changing profiles with
composite commands that contain additional
actions would cause a black hole... O_o
- Disabled the ability to copy commands from
one profile to another when the source command
contains a subcommand (either execute or kill).
This would get all kinds of hairy (and the result
would never work), so it is disabled for now.
Also added a confirmation for the delete of
commands that are referenced in other commands.
- Better handling if no speech engines are installed.
This was made evident in Dutch versions of Windows
where the only speech engine available was English.
- Fixed issue with listening overrides not working at
all with prefixes and suffixes. For example, if your
command override is, 'computer' and you have a prefix
of 'fire' and a suffix of 'weapon 1', you can now say
'computer fire weapon 1' when the listening is off.
- Better validation of multipart phrases.
- Fixed issue where key press, 'hold down for x seconds'
input box was not responding to the numeric keys on the
alpha keyboard.
- Fixed issue where commands could not be disabled if both
'when i say' and 'when i press' check boxes were not
checked. Effectively, you have to have at least SOMETHING
in either the 'when i say' text box or have some key presses
selected in the, 'when i press' section. If you have nothing
in either, the command can not be saved (ok button will
not be enabled).
v1.5.4
- Improvements
- VoiceAttack now requires the .Net
Framework v4.0 to run (version 3.5
is no longer supported).
- Added optional prefix/suffix group.
This is a quick way to isolate your
prefixes and suffixes so that they will
only work with each other. You can
now have a prefix of, 'eject car'
and a suffix of '88' where the commands
can do something totally different
than if you had a prefix of, 'mute
car' and a suffix of '88'.
- Added keyboard layout option. This defaults
to auto-detect the current user's keyboard layout
if it is available (no more # sign over the 3 key
for our friends in the UK). More layouts will
be added over time. If no matching layout is found,
the US layout is used (which is what
VoiceAttack has been doing all along).
Note: To save confusion, this does not actually
change the output. It merely changes the display
within VoiceAttack to give a better idea of what is
going on in regards to key presses and log entries.
- Added, 'Do not show unrecognized items' to
log on main screen. Right-click on the
log to see this option. This will clear
any unrecognized commands currently shown
and does not add any new ones to the list.
- Added, 'New log entries at bottom' to the
log. Accessible from the right-click
menu of the log, checking this will show
new log entries at the bottom of the list
(versus at the top).
- Added, 'Numeric Enter (DirectX Only)' item
to the Extended Key Chooser screen. This is
to allow the use of the Enter key in DirectX
mode (this is a long-standing issue, mostly
because Windows does not differentiate between
the the Enter keys... which is why it is only
available in the dropdown list of Extended
Keys).
- Increased pause from 99.999 to 999.999 seconds.
- Added -stopcommands command line parameter.
This will work just like clicking the,
'stop commands' button.
- Bug Fixes
- Fixed some issues regarding looping
and multithreading.
- Fixed issue with mouse click duration not saving
when edited.
- Fixed multipart commands from accepting blanks.
- Fixed multipart commands from accepting duplicate
entries within the same command.
- Fixed issues with dropdown combo boxes
not showing values properly after
framework change.
- Separated mute status from the audio
status icon (to stop the icon blinking...
mostly).
- Fixed issue where hitting enter after
clicking the, 'clear' button on the
keypress screen would actually create
a keypress action without a key.
- Fixed issue in key press screen where
if the alt/shift keys were used in
numeric input box, VoiceAttack would
hold on to the modifier key.
- Removed unique name restriction for
prefixes and suffixes when comparing
to other command types (for example,
you can now have a full command,
'eject car' as well as a prefix (or
suffix) called, 'eject car'). Prefix
and suffix names must now be unique
only within their own subgroup.
v1.5.3
- Bug Fixes
- Fixed a very specific bug involving
prefixes/suffixes when no other commands
exist in a profile.
v1.5.1
- Bug Fixes
- Fixed bug where prefix/suffix commands were
completely hobbled o_O
- Category now copied when duplicating commands.
- Fixed problem when listening was turned back
on after editing profiles.
v1.5
- Improvements
- First-pass attempt at repeating commands. This
pass includes the ability to repeat indefinitely,
or, a certain number of times. This option
is available in the add/edit command screen
(make sure the advanced view is open by clicking
the, 'plus' sign).
Due to the nature of the messaging means in
VoiceAttack, the repeating command can only be
executed on the Active Window process. Also
as a safeguard, if the active window loses focus,
the repeating command is terminated.
- Added the option to pause a running command
while a subcommand is running, instead of
running the subcommand asynchronously and
continuing to process. This was a big oversight
in the prior releases.
This option will be on by default for new
commands (this will be off for existing commands
so it will not interfere with what is currently
expected). You can find this option on the
'Execute another command' action on the, 'Other
Stuff' screen.
- Added ability to terminate commands by name.
For now, this terminates all instances of the
indicated command. This is the means to stop
your looping commands as well as any
long-running macros. Previously, you could
only stop ALL commands. This *should*
terminate any subcommands that are called.
This command action is located in the, 'Other stuff'
screen.
- Added the ability to use delimiters in
commands to express multiple variations
of a command. For instance,
you no longer need three separate
commands to call, 'fire', 'open fire'
or, 'fire at will'. You can simply
make one command that is,
'fire;open fire;fire at will'.
VoiceAttack will treat that as three
commands, all doing the same thing.
Note that the items will be broken
up automatically when viewed in the
list.
- First pass attempt at prefix/suffix
commands. This will allow a user to
create commands that can have two parts
that can be mixed many-to-many.
For example, you can have a suffix of,
'88' and a prefix of, 'eject driver'.
When you say, 'eject driver 88', both
commands are executed. You can also
say, 'mute driver 88' or, 'flag driver
88', etc. Before, if you wanted to
account for 100 drivers, you would need
to duplicate your commands 100 times
for each set. Now, you just specify
your suffix set once (yeah... still
100 drivers), but, you only need to
do this once. I think I'm explaining
this right. Features are getting
more and more complicated :)
- Pressing, 'enter' on a command action now edits the command.
- If VoiceAttack detects a, 'Start Listening' action ANYWHERE
within an action sequence, the entire sequence will be
executed as if VoiceAttack was already, 'listening'.
- If a second instance of VoiceAttack is opened, the original
instance of VoiceAttack will now pop up as the topmost
window.
- Added various parameters to command line:
-listeningoff, -listeningon, -shortcutsoff, -shortcutson,
-minimize. Kind of self-explanatory :)
- Often when you turn on your mic and say a
command immediately, the speech engine
picks up, 'but ' plus whatever you said.
I put a filter in place so that if a
command is unrecognized and starts with,
'but ', it will trim it off and try again.
- Added, 'Duplicate' as a menu item when you right-
click on a command in the profile editor screen
(no longer a need to do a separate copy and then
paste). Selecting this automatically opens
the edit window for the new, duplicated
command. Cancelling from here also
cancels the duplication.
- Last edited command will now be selected by
default even after application restarts (may
not be helpful for anybody but me :)
- Increased the size of the pause screen input
box and made the initial text selection a
little smarter.
- Added -profile command line parameter to launch or
change VoiceAttack's active profile.
Usage : -profile "My Profile Name"
*Make sure to use double quotes if your profile
name has spaces in it.
- Command line parameters will now affect the running
instance of VoiceAttack. You can now create a
shortcut on your desktop that can, for example,
change a profile, start/stop listening, start/stop
commands, etc. that will affect the running instance.
- Added -nofocus parameter to command line to keep
VoiceAttack from popping up if there is more than
one instance (just like it used to be).
- Added, 'System Info' button to options page. This
will be established over time (there's just basic
information in there now).
_ Bug Fixes
- Fixed snap-to-edge offset for right and bottom
edges of the screen (left over from when
VoiceAttack had rounded corners :D )
- The "~ `" key on US keyboards was
displayed backwards in the, 'Add/Edit
Keypress' screen. Should display
properly now.
- Undocumented features
- Holding CTRL + Options button opens
Windows' Sound/Recording device dialog.
(Same as right-clicking on speaker icon
in system tray and selecting, 'Recording
devices'.)
- Holding ALT + Options button opens
Windows' Volume Mixer dialog.
(Same as clicking the speaker icon
in the system tray and then clicking,
'Mixer'.)
v1.4
- Improvements
- Complete rework of VoiceAttack user interface look.
This includes the new flat/icon look, as well as the
compact mode of the main form.
- Added, 'Hide/Show Advanced Options' button on the
command screen.
- Added, 'Launch with Windows Start' option.
- Added, '-bypassPendingSpeech' command line option which
reverts VoiceAttack back to a state where hitting the,
'stop listening' button will prevent pending speech from
being invoked (basically stops any running macros).
- Bug Fixes
- Fixed hotkey enable/disable by voice command not
updating main form button.
v1.3.7
- Improvements
- Text to speech now supports multiple voices. If you have more
than one voice installed on your machine, you can select a
different voice for each spoken statement.
- You can now enable/disable keyboard shortcut hotkeys with a command.
These command actions are found on the, 'Other stuff' screen.
- Also, you can enable/disable keyboard shortcuts on the main screen
with the new, 'Shortcuts On / Off' button. Toggles just like the,
'Listening' button.
- With the addition of the new button, the option screen is now
accessible thru the little wrench icon on the top bar.
- Added a few command line functions for testing.
- Changed the way the keys are labeled in the key
press screen. Previously, in DirectX mode, you
would see (for example), 'Num 7 Home' when pressing the
numeric pad, '7' key. This will now display, 'Num 7'.
This is because VoiceAttack is a Windows application,
and, is picking up key presses that are applicable
to Windows. The DirectX api only has one scan
code for 'Home', and, does not differentiate between
the numeric pad home key and the central cluster
home key. This more accurately represents what is
going on and will save some confusion going forward.
- Bug Fixes
- Work done on the keyboard shortcut enable/disable code in an
attempt to make enabling/disabling shortcuts a little more
reliable.
- Fixed issue in Windows 8 where resuming from sleep mode would
cause the speech engine to double up recognized commands.
- Removed horizontal scrollbar from log view that would occasionally
pop up.
v1.3.6
- Improvements
- Added, 'Mouse Click Duration' feature that allows you
to control the amount of time between a mouse down and
mouse up action (for both single and double-clicks).
This was created to allow a little more time for DirectX
games to detect a mouse click. The default value for
this is 0.1 second.
- Added Move mouse left/right/up/down x number of pixels
from current position.
- Removed restriction of import commands for the trial
version. The only gotcha is that there is still a
maximum of 20 commands.
- Added command line argument, '-default' that basically
does what the 'Reset to Defaults' button does on the
Options page. This is for more than rare instances where
an option has gotten corrupted (or manually tampered) and
the application will not launch.
- Bug Fixes
- Modifier keys that are down are now released when commands
are stopped.
- To be a better neighbor, VoiceAttack will attempt to key
up any modifiers that are down on application exit.
- Prevent Win + up arrow from maximizing screens.
- Fixed issue when superceding key down commands were still
executed (for example, if you have a key-up macro that is, say,
'CTRL + SHIFT + X' and another that is just, 'CTRL + X', when
you press 'CTRL + SHIFT + X', 'CTRL + X' should not execute
at the same time).
- Fixed issue of input mode not being saved on edit of key
press when key down or key up was selected.
- Fixed issue with profile overrides that required app restart
for changes to take effect.
- Removed time delay when releasing a modifier key when using a
key-up assigned macro.
v1.3.5
- Improvements
- You can now execute the macros you set up for
voice commands with keyboard shortcuts. On the command
screen, you now have two checkboxes : 'When I say...',
and, 'When I press...'. You can indicate either or both
(which also has the nice side-effect of being able to
enable/disable commands). What makes this fun is that
you can have macros with a plain, old keyboard (and, if you
have a keyboard with macro software, the ability to
assign macros to keys other than ones designated).
There is also an option to only allow for the command
to be invoked on key up. Kind of handy if you have
pairs of macros that you execute all the time (one macro
on the key down, one on the key up).
- Added, 'Command Weight' feature to the, 'Options'
screen. The higher the value, the more likely
VoiceAttack is going to make a, 'best guess' as
to what you said. This feature will make the
recognition of your commands way more reliable
overall, and, will help with certain commands that
the speech engine just_will_not_handle.
Example... if the value of Command Weight is
100, and, you say, 'flag', and you have no command
called, 'flag', but, you have a command called, 'bag',
'bag' will be executed. A high value is (probably) not
desirable if you have listening turned on all of the time,
since just about everything you say will get executed
somehow. A high value would be most helpful for
those that use, 'push-to-talk (listen)'. Default
value is 50 and can be adjusted up to 100.
***NOTE : THIS FEATURE IS *NOT* AVAILABLE IN WINDOWS XP.
- Keypress recorder now available on the, 'Command'
screen. This replaces the, 'Quick Input' screen
(since it can do everything the, 'Quick Input'
screen could do and more).
- Updated the, 'Other Stuff' screen to use a drop
down list instead of radio buttons to select the
action. The screen was getting entirely too long, and
there are more features coming :)
- Totally for fun, you can now override VoiceAttack
not listening with a command prefix. For instance, if you
have VoiceAttack's listening turned off, you have a command
called, 'Launch My Game' and a command prefix of, 'Computer',
you can say, 'Computer, Launch My Game' and the command
will execute (as if listening was turned on). Note that you
don't actually have to have listening turned off... works
just as well turned on. This is for my Trekkie friends :)
This is located in the, 'Profile Options' screen, right off
the profile.
- Setting speech delays in options no longer requires
a restart (this will make tweaking a lot quicker).
- 'Allow other commands to run at the same time'
(asynchronous commands) is now on by default for
new installs.
- Windows Game (DirectX) is now the default selected
input mode for new installs.
- Added a subtle bit of gradient to the background of all
the main forms... the previous flat color tended to make
the forms hard to distinguish when overlapped... this might
help a little :)
- Shined up the mic level indicator on the main screen. No
longer a standard progress bar (bleh).
- With keyboard shortcuts enabled, I decided it was a bad idea
to kill VoiceAttack when it starts up and there is no default
audio device (or headset/mic not plugged in). You just get a
warning box now with the option of not showing the box any more
(a log message always appears with this warning). An added benefit
is that now you can configure VoiceAttack without having to have
your headset/mic hooked up (actually, you could always do this, since
the popup message was never modal).
- Bug Fixes
- Introduced bug with working directory that stops
all shell commands from working. This has been
fixed.
- Left Shift/Alt/Ctrl keys not working in DirextX mode
fixed (doh).
- Known issues that will be fixed in the next release :
- Issue with profile overrides that requires app
restart for changes to take effect.
- Win + up arrow maximizes every window.
v1.3.4
- Improvements
- Added option to turn off adaptive recognition.
This is for those that may be experiencing trouble
in noisy environments.
NOTE - This feature is only available to Windows 7
and Vista users. XP users can change this value in
the speech configuration applet in the control panel.
- Bug Fixes
- Export profile screen no longer has a delay
when stretching the form.
- Less aggressive means of setting top window
may help with Windows Explorer issues.
- Fixed an issue with the registration crashing VoiceAttack
under certain conditions.
v1.3.2
- Bug Fixes
- Fixed introduced issue where keypress
duration only works with alpha keyboard
numbers. This is the main reason for the
release.
- 95% less squirrel in the profile screen
(position is maintained a little better
after delete or searching by typing).
v1.3.1
- Bug Fixes
Fixed introduced problem with mouse push-
to-talk when editing a profile with some
configurations.
v1.3
- Improvements
- Recognition global hotkey is no longer
just toggle. You can now also hold to
listen, or, hold to ignore. This can
be overridden at the profile level, so,
each game/app can have its own hotkey.
Hotkey is no longer limited to a
dropdown of shortcuts. Key selection works
like the keypress screen, so, if your app
can support the keys, you can select them.
- Mouse push-to-talk and global stop command
can now be overridden at the profile level.
- Stop command is no longer limited to a
dropdown selection (just like the global
recognition hotkey).
- Extended key support in the keypress screen.
Clicking on the mini keyboard shows a popup
with all of the keys you can select (in case
your keyboard does not have keys such as,
'next track', 'prev track', 'volume up', etc).
- Keypress screen no longer complains if a key
is not supported in DirectX when switching from
standard to DirectX mode.
- Added working directory to app launch command.
Should have always been there... /facepalm.
- You can now drag and drop a file name onto the
'Run application' and 'Play sound' text boxes
on the, 'Other Stuff' screen.
- Updated the keypress screen (and option screen
hotkey popups) with some new graphics. Thought
it looked a little better, so, I went with it :)
- Bug Fixes
- Fixed a bug where nested asynchronous commands
were no longer asynchronous.
- Startup issue in XP identified and fixed.
v1.2.9
- Improvements
- Added 'Unrecognized Speech Delay' option
in the options screen. This is the amount
of time VoiceAttack takes before rejecting
an ambiguous speech stream. Most will recognize
this as the amount of time you have to hold
your breath after talking before issuing an
actual command :) I'll probably
explain this more on the forums. I think
it's an important piece that I have
neglected for a long time.
- As a result of the above option,
'Recognition Delay' has been renamed to
'Recognized Speech Delay'.
- Removed read-only restriction on the Run
Application text box on the, 'Other Stuff'
screen (no longer required to browse for a
file). This is so you can take advantage
of things like shell commands.
- Added Category and Description to the
Commands. This will help with organization.
The columns for Category and Description
will only be visible if you actually
have data in at least one command. Otherwise,
the columns are hidden (might make this
a configuration later).
- Since we now have up to four columns
visible on the Profile screen, we can
now reorder the columns.
- Updated Export to HTML to also include
the new Category and Description. Column
order is now configurable, as well as sorting.
You can now choose which columns to export.
- Enabled Help from most screens. Hit, 'F1'
to be taken to online help.
- 'Include Enter' press at end of Quick Input.
- Added 'Reset Defaults' button to options
page. This reverts all settings back to,
'factory' values (things like screen
positions, column order, hotkeys, etc).
Profile data is *not* touched.
- Ultra-minor, but, worth mentioning :
Double-clicking the gear icon on the
main page closes VoiceAttack (finally).
Easter egg - Holding down control +
double-clicking on said icon changes
VoiceAttack to, 'camo' mode :) Just
for fun... my kid thinks it's cool.
- Bug Fixes
- Screen handling after disabling monitors in
a multi-monitor configuration updated.
v1.2.8
- Improvements
- Maintenance release. Some optimization. Added
better messages to various places.
- Bug Fixes
- You can now set both the, 'Recognition Global Hotkey',
and the, 'Stop Command Global Hotkey', to, 'None'.
- The 'Stop Listening' action is a little more
forgiving when invoked near the end of
issuing a voice command.
v1.2.7
- Improvements
- Press and release keys now default to .10
seconds out of the box (instead of 0).
This value is, 'sticky', so, it will stay
set to whatever you set it to last.
(If you are already on v1.2.6, this version
is not really necessary.)
- Bug Fixes
Very minor, cosmetic. Also, freshened up help
document a little bit. One day, it will not look
so much like a ransom note :)
v1.2.6
- Improvements
- Added Mouse Actions to commands.
You can now add mouse left/right/middle click
(mouse down and then up), double-click, down,
and up to your command macros.
The scroll wheel can be scrolled forward or
backward.
The mouse location can be captured in your games
by pressing a user-defined hotkey (hotkey is
defined in Options).
Current mouse position can be saved and then
recalled.
- Bug Fixes
- Fixed a bug where setting the duration of a keypress
would allow users to hit, 'OK' even though no key
was selected.
v1.2.5
- Improvements
- Added the ability to play .mp3 and .wma files
(in addition to .wav). This is system-dependant,
so, if your system does not support this,
VoiceAttack will revert to only .wav.
(Windows Media Player 10+ is required.)
- Volume level for audio files has been added.
Again, this is system-dependant. If your system
does not support this, this feature will not be
available.
- Sometimes the speech engine is a bit laggy when
loading and unloading data, so, improvements have
been made to help it along (this will have
the biggest impact on those that see a delay
when changing profiles and/or adding and updating
commands).
- Bug fixes
- A few minor bugs and some leftover test code removed.
- Some more human-readable error handling provided.
v1.2.4
- Bug fixes
- Fixed introduced bug where editing a command
that launches with a parameter does not save
the parameter.
- New Tips screen would sometimes lose its mind.
Less broken now :)
- Minor cosmetic updates.
v1.2.3
- Bug fixes
- Widened some text areas to display better in XP.
- Added 'Tips' screen that pops up on first use. Just
to help those that have never tried this before not
be completely lost.
v1.2.2
- Bug fixes
- Profile find action by keypress works a little better.
- Registration no longer cares about email letter case.
- In the Keypress window, 'Method A' is now, 'Standard'.
'Method B' is now, 'Windows Game (DirectX)'.
v1.2.1
- First pass at nested commands. This will allow for
calling other commands by name within a command. You
will find this option on the 'Other Stuff' screen.
Note that there is code in place to prevent you from
creating a loop (crossing fingers), since the final
goal is to create repeating commands.
- Optimized speech engine initializer to speed up profile
loading.
- Added copy (ctrl+c), paste (ctrl+v),
move (ctrl + up/down arrows) and delete via keyboard
to command action list (all of this is also available via
right-click menu).
v1.2
- Added 'This command allows other commands to run
at the same time' feature to the add/edit command
window. This is a first pass at 'multi-threaded'
commands that is at the top of everybody's list :)
- The 'Stop Macro' button has been replaced
with a 'Stop Commands' button. What this
does now is it is basically a panic button to
indicate to all running macros that they need to
stop.
- Added global hotkey to stop command
processing.
- Added 'stop command processing' as a command
(so you can issue voice commands to stop
command processing... and then get sucked into
a black hole). Note - this feature only works
if your commands are set up to be asynchronous
(that is, your commands can be executed at the
same time)... more on this in the help file.
- Reduced CPU usage of macros.
- Profiles can now be switched via command.
This is available on the 'Other stuff'
screen and is accessible only to registered
users (since the unregistered version only
allows one profile).
- Quick input now has an input mode for each
keypress, a 'hold down for x seconds'
and a, 'pause between each keypress'. Each
of these is 'sticky' (that is, they default
to the last value that you set each time you
come back).
- KeyPress hold key duration is now 'sticky'.
- 'Start Minimized' feature added to options
page.
- When adding a command action, the new action will appear
after where the cursor is located (not just added
to the end of the list).
- First pass at a command action quick reference list.
This list is currently only available in html format
and is generated by clicking the 'export' button and
selecting 'html' as the file type. Note that this is
only available in the registered version.
- Bug fixes
- Case-sensitivity issue between VoiceAttack
commands and the speech engine (doh!).
- Worked in a little more effort to make sure
the main screen is visible at launch.
- Typos... always with the typos.
- Screen scaling issues with large font sizes
have been fixed... fixed by preventing VoiceAttack
from scaling at all :)
- Blank commands are now omitted. Blank commands
were possible through the add command screen
for a brief period, due to introduced code.
This has caused VoiceAttack to get upset.
Also, a blank command in an imported profile
would do the same thing.
- Sometimes VoiceAttack would not have the proper
command selected when the command was double-
clicked in the command list. This has been
fixed.
v1.1.8
- Added exporting and importing of single profiles.
An exported profile can contain any or all of its
associated commands (available on the main screen).
*Registered version only.
- Added the ability to import commands from an
exported profile (in the add/edit profile screen).
*Registered version only.
- Fixed a bug where right/double clicking on log entry
would show incorrect command name in add/edit command
screen.
v1.1.7
- Added 'Input Mode' feature in the keypress add/edit
screen. This is for compatibility with more DirectX
games. Toggle this mode (between Method A and
Method B) if your game does not recognize key presses
issued by VoiceAttack.
- 'Check for Update' button in options (this is only
available in the registered version).
- Fixed a bug where if you had a 'run application' action
in a command, subsequent actions in that command would
not be processed.
- Activity log limited to 100 items before items drop off.
- When a command is recognized or unrecognized, the Activity
log on the main screen now allows for right / double click
access to add and edit commands. This is a big time saver
if you are testing out commands while building your profiles
(saves you the trouble of having to navigate all the way
to the command each time).
v1.1.6
- Added Text to speech as audible feedback.
In Commands / Other, you will find a selection that will
allow you to add text that will be converted to speech by
your built-in Windows Text to Speech Engine. There is a
preview button on there so you can type something really
weird & turn it up so your family can hear you (and
mock you... maybe not as much as they mock you for talking
to your computer... which happens here a lot).
NOTE: The prerelease did not have a volume slider. If you have
been using the prerelease, your volume may be zero for all
of your commands (sorry, guys!).
Lesser Note: Known issue - if you have multiple sound
cards, VoiceAttack only outputs to the default audio
device and ignores whatever you choose in the 'Advanced'
screen in the control panel.
- Added mouse button (left, right, middle, back, forward)
hotkey listening / not listening toggles. There are
also options for each mouse button to 'push to listen'
and 'push to not listen'.
Note : be aware of other mouse/hotkey software that you
might have set up (such as Logitech Setpoint). If you are
using other hotkey software, just continue using the
keyboard hotkeys in VoiceAttack and have your software
press those keys.
- Added 'Play Sound File' as a command action. (In
Commands / Other). .WAV files only (no immediate plans
for other file types).
- Added a 'test run' button to the 'Commands/Other' screen to
test launch an application with supplied parameters (since
getting parameters right is a pain, sometimes).
- Fixed 'keyup' order of release if a modifier was selected.
The key will be released first before the modifier. Note
that this is just the keyup (what is my deal with the key
ordering??? sheesh).
- Possibly less crashy after registration (sometimes
VoiceAttack would crash immediately after registration).
v1.1.5
- VoiceAttack now supports multiple users on a single machine.
In versions prior to 1.1.5, you needed to have admin rights
for a single user. This was a huge design flaw from the
beginning and has been corrected. This allows for each
user on a machine to have their own set of profiles.
Each user account on a machine will need to validate
separately (apologies in advance... trying to squash bugs
as fast as possible. This shouldn't affect many, tho).
If your version of VoiceAttack has a VoiceAttack.dat file
in the install directory (usually C:\Program Files\VoiceAttack),
this file will no longer be accessed. If you are backing
up VoiceAttack profiles, you will now find the
VoiceAttack.dat file (usually) in
C:\Users\UserName\AppData\Roaming\VoiceAttack
(C:\Documents and Settings\UserName\Application Data\VoiceAttack
on XP) <--- note that sometimes these folders are hidden
by Windows & you'll need to set up your folders appropriately
to see them.
If you happen to be digging around in this folder, you
will notice a backup directory where VoiceAttack now copies
the last ten profile saves. If you ever find yourself
in a situation where you need to restore a previous
profile set, just replace your VoiceAttack.dat file one
directory up with any one of the files in the backup dir.
This is kind of a hack, but, if anything, it makes me
feel better, (making good profiles takes a lot of work :)
(This process might be made automatic later)
All this should fix the issue where validation would not occur
if you did not have admin rights as well as saving profiles
(*yikes*).
v1.1.4
- Fixed a bug where if all audio input devices were disabled,
VoiceAttack would not run.
- Fixed a bug introduced in v1.1.3 in the key press add/edit
screen where the Tab key was no longer recognized.
- Quick Input added to Command Add/Edit.
This allows for creating a series of key presses quickly.
This is not for all available keys on the keyboard, but,
it makes inputting a key press series such as, "/use reigns
of the traveler's tundra mammoth" a lot faster.
- The Windows key is now a modifier in the keypress screen.
If your keyboard has this key, for example, you can issue
commands that contain Windows + D to go to the desktop.
This was available in 1.1.3 as separate key presses, however,
I wanted to also consolidate this into a single command action.
- Modifier labels (CTRL, ALT, SHIFT, WIN) in the keypress
add/edit screen are now clickable to change their status.
The pressed key label is also clickable to clear its value.
- Recognition delay is now user-adjustable.
The recognition delay is how long VoiceAttack waits to react
after recognizing a phrase and then hears silence. Kind of
hard to explain, but, set to a lower value to have VoiceAttack
react more quickly. Set to a higher value if VoiceAttack is
not allowing you to finish your phrases. Play around with
the value (I set mine all the way to zero).
This is located on the Options page and the value can be
from 0 to 10000 (the default Value is 150).