Beta time. Just one more... hopefully. This one has the fixes reported for this round. If things are cool by the end of the coming week, this could be v1.5.8 (release) :)
Link should work this time, lol.
Full update notes are below. Have a good evening, all :)
VoiceAttack Change Log - Beta Versions
v1.5.7.77
- Improvements
- 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.
- Bug Fixes
- Fixed DirectX mapping issues for UK layout.
- Fixed random sound actions from duplicated
commands playing each other's sounds.
- Command list now disregards square brackets
when sorting.
- Fixed random sounds from a directory only
picking up .wav files.
- Fixed, 'buttons' column not showing properly
in profile screen.
v1.5.7.76
- Improvements
- 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.
- Changed verbiage relating to, 'Free Text Type'
to, 'Quick Input'. It's what it used to be
called and I doubt anybody will be confused by
it, so, I put the name back.
- Added non-character key indicators to Quick
Input. 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 dowwn 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
- Bug Fixes
- Fixed circular reference issue in some cases
with execute command children that also execute
commands.
v1.5.7.75
- Improvements
- 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.
- Bug Fixes
- Fixed pause timing issue introduced in
1.5.7.74.
- Fixed command validation issues with dynamic
commands introduced in 1.5.7.74.
- Fixed {CMD_AFTER} parsing issue.
v1.5.7.74
- Improvements
- Updated image buttons with accessible
names for screen readers (so they won't
be indicated as just, '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 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 intersting solutions.
- Spoken command box now expands horizontally
with the command window.
- 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 diplay).
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.
NOTE : This is a first pass. There will be
tokens available later for {ENTER},
{SHIFTDOWN}. {SHIFTUP}, etc.
- 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).
*******Plugin update will come later.
- 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
(previoulsy 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).
*******Plugin update will come later.
- Added new tokens {INT:variable name} and
{INTFORMAT:variable name} to provide a way to
access the new integer varibles 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.
*******Plugin update will come later.
- Added new token {DEC:variable name} to provide
access the new decimal varibles 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).
- Some time a while back (v1.5.7.70), I added three
tokens and did not document them : {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
- Updated documentation to explain tokens a little
better.
- Bug Fixes
- 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 previous beta issue of dictation events not firing
when default speech engine is not selected. Doh!
v1.5.7.73
- Bug Fixes
- Fixed import/export issue introduced in
1.5.7.72.
v1.5.7.72
- Improvements
- 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 an experimental get value
from 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.
Again... experimental.
- 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.
v1.5.7.71
- Improvements
- Added, 'cut' to command list. Don't know
why that's been mising all this time o_O.
- Play random sounds interface now 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.
- 'Play random sounds' now 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.
- 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.
- Bug Fixes
- CTRL + V pasting in command action list
without copying anything no longer crashes
the application.
- Copy selected as text no longer crashes
app.
v1.5.7.70
- Improvements
- 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}.
- Bug Fixes
- Fixed issue with empty action sequences
not stopping properly when included in a
loop that repeats indefinitely.
v1.5.7.69
- Improvements
- 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 ;)
- Bug Fixes
- Betas have been released as 'any cpu' and
not, 'x86'. This has been fixed.
v1.5.7.68
- Improvements
- 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, howevever,
the, 'Text' field will accept tokens.
v1.5.7.67
- Bug Fixes
- Fixed some issues with extended keys.
- Fixed issue with nested commands not
executing if disabled.
v1.5.7.66
- Improvements
- 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.
- Bug Fixes
- Fixed some issues with extended keys.
v1.5.7.65
- Bug Fixes
- 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 ;)
v1.5.7.64
- Improvements
- 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).
- 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.
- Increased the size of the 'Set text value
to Windows clipboard' text box (now
multi-line and can contain more than 64
characters (doh!)).
- 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).
- Bug Fixes
- Removed formatting from '{COND:condition}'
token (see above).
- Fixed process target problem introduced
in last beta.
v1.5.7.63
- Improvements
- 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'.
- Experimental... 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.
- Bug fixes
- Optimized composite command (prefix/suffix)
loading.
- Fixed processor pegging with jumps.
- Fixed type-to-find not working with
grouped commands in profile edit screen.
- Fixed various wildcard-introduced issues.
- Fixed disposed speech object exception.
v1.5.7.62
- Improvements
- 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. Pretty straightforward...
need feedback on this one, really.
- 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.
- 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'.
- Bug Fixes
- Right-click on open area of profile list when
in grouped mode no longer crashes.
- Spoken commands containing wildcards will now
be constrained as unique in both the command
and in the profile.
- Fixed bug with delete of commands not allowing
subsequent deletes without selecting another
command.
- Fixed a threading issue when using the clipboard
feature.
- Fixed issue where prefixes would sometimes end up
as full commands.
v1.5.7.6
- Improvements
- Experimenting with putting 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.
- 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 slight delay to list filter on profile
screen.
v1.5.7.5
- Improvements
- 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, '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 verion 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.
- Bug Fixes
- Fixed some font issues on several screens.
- Fixed, 'ends with' and 'starts with' criteria for
auto profile switching.
- 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 dictation recovery issue.
- Fixed command action list font color when items
are selected (yay... no more dark fonts on dark
backgrounds).
v1.5.7.4
- Improvements
- 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.
v1.5.7.3
- Improvements
- 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 :
- 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, '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.
- Deep beta testing dictation. This feature may or may not
be included. 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 supportin
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 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 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, 'orange' as a Write to Log icon color... just for fun.
- Bug fixes
- 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.
v1.5.7.2
- Improvements
- Added sound and tts volume offset sliders to the
options screen. Think of these as master volume
controls for all your sounds/tts.
v1.5.7.1
- Improvements
- 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'.