Vocola: Part 1 – The Basics

Dragon NaturallySpeaking is impressive software. It’s recognition accuracy is excellent. However, to unlock its full potential with macros and complex commands, you would have to purchase the Professional version for around $500, putting it well outside of the reach of many gamers. Thankfully, third-party software called Vocola can be used to replace — and in some cases, improve upon — the functionality missing from the Home and Premium versions of DNS.

Written by Rick Mohr, Vocola is available in two different versions: Vocola 2 works with Dragon NaturallySpeaking, while Vocola 3 was developed for Windows Speech Recognition. The syntax is slightly different between the two, but there is a primer of the differences available. (In most cases, you can use the same commands in either, but I will endeavor to point out the exceptions.)

Download and installation instructions: Vocola 2 | Vocola 3.


Simple Commands

Once you have downloaded, installed, and successfully tested Vocola (there are instructions for ensuring that it’s working on the installation pages linked above), you’re ready to start writing commands. You can edit global commands — commands which will be active in all applications at all times — by saying Edit Global Voice Commands. Of course, we’re more interested in commands that are specific to World of Warcraft. To create/access the *.vcl file whose commands will only apply in-game, launch the game (not just the Battle.net window), and say Edit Voice Commands. In my case, this opens a file titled, wow-64.vcl.

We’ll start by adding voice activation to a few interface panels, in as simple a manner as possible. (Later, I will demonstrate more modular ways of doing this.)

Go to the end of your file, and enter the following lines:

Open Inventory = {b};
Open Map = {m};
Open Spellbook = {p};
Open Character = {c};
Open Talents = {n};

Once you’ve added these commands, save your changes and switch back over to the game to test them. Assuming that your interface panels are bound to b, m, p, c, and n (the default values), you should see that these commands open (and close) the desired interface panels.

As I have mentioned before, I use Dragon NaturallySpeaking exclusively in command mode when I play. This prevents it from trying to output words I have spoken that are not commands, which causes the UI to go crazy and open a bunch of interface panels. To enable command mode, simply say switch to command mode. To return to normal mode, simply say switch to normal mode. (I have been unable to determine whether this is necessary or possible in Windows Speech Recognition, but maybe a reader can enlighten me.)

Alternative Words

Of course, saying Open Map is counter-intuitive for closing your map window. We can specify that either Open Map or Close Map can be used to press M by using the Vocola syntax for indicating alternative words:

(Open | Close) Inventory = {b};
(Open | Close) Map = {m};
(Open | Close) Spellbook = {p};
(Open | Close) Character = {c};
(Open | Close) Talents = {n};

You should now be able to use either command to interact with the specified interface panel.

A simple (read: not necessarily the best) way to access your abilities via voice command is to write a macro in-game, complete with any targeting modifiers you wish to use, drag that macro onto a key, then create a Vocola command that activates the keybind when the appropriate command is spoken. For instance, were I to create the following in-game macro:

#showtooltip
/use [@mouseover,help][@target,help][@player]Lifebloom

and then drag it onto the key whose keybinding is Ctrl+1, I could create a Vocola voice command as follows:

Lifebloom = {ctrl+1};

Consider, however that it is faster to simply say Bloom than it is to say Lifebloom. I suggest aliasing your spell names to make them quick to say, like so:

Bloom = {ctrl+1}; #Lifebloom
Rejuve = {ctrl+2}; #Rejuvenate
Grow = {ctrl+3}; #Regrowth
Heal = {ctrl+4} #Healing Touch
Wild Growth = {ctrl+5};

Rejuve isn’t a real word, of course. It’s one that I created and added to my Dragon NaturallySpeaking vocabulary (instructions for which are available here). In fact, it’s a good idea to train Dragon to recognize all of your spell names — even the ones that are actual words — as it will decrease the recognition latency. You will notice that I did not alias Wild Growth. I have not settled upon an easy to remember alias that will not sometimes get confused with Regrowth’s alias of Grow.

Optional Words

If you sometimes find that you accidentally insert additional words into a voice command when speaking, you can specify that these words are optional using Vocola’s optional word syntax. This can be handy for commands like Hearth to Dream Grove, which I repeatedly misspoke as Hearth to the Dream Grove. Rather than creating two distinct commands, I simply wrote the command as so:

hearth to [the] dream grove = "/use Dreamwalk"{Enter};

In the above command, the slash character sets focus to the chat window, enters the relevant command, then presses the Enter key to send it to the game. Many commands can be sent directly to the chat window. They work the same as if you were to have typed them in-game yourself, and they use the identical syntax of an in-game macro. However, you must remember to include the Enter command, or it will sit in your chat bar until you do so manually. Notice the square brackets that surround the word the in the above command. This is an indication to Vocola that it should recognize this command regardless of whether or not the word the is included.

Variables

The spellcasting commands written above rely upon character-specific macros which include targeting parameters (in the example above, it prioritizes the mouseover target, followed by the player’s target, followed by the player). Obviously, this works well for mouseover healing, but the disadvantage of mouseover healing is that it prevents you from using your mouse at the same time. We can write a macro which is both easier to maintain and more flexible like so:

Bloom <friend> = "/use [@$1] Lifebloom"{Enter};

Who is this “friend”? It’s a reference to a pre-defined variable containing an array of possible names, which are then output into the first variable parameter (represented by $1). The declaration of possible values looks like this:

<friend> := Phae = Phaelia 
| Sarkoris
| Lily = Liliya
| Morgause
| Nesbit
| Belaquo
| Cosy
| Felsworn;

In this example, each possible value is separated by the | character. I can provide a shortened form of the person’s name by using the aliasing syntax Nanners = Bananas. Now if I speak Bloom Nesbit, it will cast Lifebloom on Mr. Phae’s gnomish Mage without changing my current target. Note that I have aliased my own character’s name as the diminutive Phae but could just have easily have aliased myself as “self.” In fact, I can provide two different mappings to the same end result with no adverse effects like so:

<friend> := Phae = Phaelia | self = Phaelia;

In this case, were I to say Bloom Phae, it would have the same effect as Bloom self. However, were I to say Bloom Bob, Vocola and Dragon NaturallySpeaking would not recognize this as a command and would likely (hopefully) do nothing. You can see that the obvious downside of this approach is that it requires you to pre-define (and maintain) an array of possible values, making this approach untenable in a raid — and sometimes group — scenario. I will be making a future post that demonstrates how I overcome these issues using the [party#] and [raid#] targeting parameters as well as making my spell lists much more maintainable.

Improvements to UI Commands, Mounts

Using the techniques demonstrated above, we can now improve upon our user interface commands:

<open_synomym> := Open | View | Show | Close | Edit;
<ui_panel> := talents = n 
 | spellbook = p 
 | character = c 
 | inventory = b 
 | map = m 
 | collections = "Shift+p" 
 | mounts = "Alt+m"
 | pets = "Alt+p"
 | toys = "Alt+t"
 | heirlooms = "Alt+h"
 | achievements = "Shift+a";
<open_synomym> <ui_panel> = {$2};

Here I’ve declared two variable arrays, the first of which enumerates all the different verbs I might want to use in conjunction with a UI panel’s name. (Note that this variable isn’t used in the final input; it’s only used by Vocola to execute the appropriate command.) The second variable array contains the spoken name of each panel, along with its relevant key press. That value is what is sent to the PC when the appropriate command is given, ex. Show Pets or View Character. Notice that, whenever a portion of the declaration needs to include a space (or a +), I have surrounded the phrase with double quotes. Without these quotes, Vocola would be unable to interpret the command and would throw errors.

I’ve done something similar (and more immersive) with a few of my favorite mounts:

<named_mount> := Nariel = "Enchanted Fey Dragon" 
 | "Dust Mane" = "Dustmane Direwolf" 
 | "Shadow Mane" = "Shadowmane Charger" 
 | Shaitan = Dreadsteed
 | Krixxus = "Drake of the East Wind"
 | Emer = "Quel'dorei Steed";
call <named_mount> = "/use $1"{Enter};

I derive a great deal of pleasure by calling upon my Enchanted Fey Dragon by her given name (Call Nariel)! And here are my commands for pet summoning:

<pet> := "Phae Drassil" = "Teldrassil Sproutling" 
| "Boom Boom" = "Moonkin Hatchling" 
| "Bright Wing" = "Sprite Darter Hatchling" 
| Titania = "Nordrassil Wisp" 
| Oberon = "Spirit of Summer" 
| "Sir Pounce" = "Panther Cub" 
| Broot;
summon <pet> = "/summonpet $1"{Enter};

I hope this post gives you some ideas about how feasible it is to play without having to use your hands. In future posts, I will talk about my approach to targeting, movement, camera, communication channels, usable items, and managing multiple characters. And, of course, I will be writing about the additional peripheral devices that — in combination with Voice Dictation — make all of this possible.

3 thoughts on “Vocola: Part 1 – The Basics

  1. Hi Phaelia! Welcome back to WoW! I think I used to read your blog back in the old days. I’ve played around with Voice Attack, which is awesome for Elite:Dangerous, but this is inspiring me to try it out with WoW. I’ve recently ventured back into healing, which I haven’t done since MC was relevant. I don’t have any RSI issues, but healing feels like whack-a-mole with really small buttons unless I cover up half my screen.

    1. Wow, I’m shocked I had never heard of Voice Attack! When I first developed RSI, I felt like I did a pretty good job exploring the options for voice recognition (admittedly, there aren’t many). But I guess everything I looked at was oriented towards work. Thanks for the heads up!

    2. So I’ve been looking into Voice Attack. It looks very promising, but doesn’t yet support arrays (it is on their to do list: http://voiceattack.com/smf/index.php?topic=401.0). This means that I would either have to develop separate macros for each of my spells or call each spell by its exact name (and have it 100% recognizable). With Vocola, I can tell it “expect that I will say Bloom (which means Lifebloom), Rejuve (which means Rejuvenate) or Grow (which means Regrowth)” and then reuse that variable declaration in several commands. If VA ever adds support for this type of functionality, I will definitely be giving it another look. Thanks again for the tip!

Leave a Reply

Your email address will not be published. Required fields are marked *