Tutorials
/

Day 1 – The Essentials

Up and Running

First, make sure you have completed all the steps in installation and installing packages and commands.

Now that you have everything set up, let's restart VoiceCode just to be extra sure everything is working. To quit VoiceCode you can either switch to VoiceCode and press ⌘Q like any other application, or you can use the "restart" button in the VoiceCode UI to automatically quit and relaunch it in a single step.

‍The "restart" button is in the bottom left corner.

Basic Dictation

First, make sure the microphone is on, the microphone button should be green.

Microphone in "listening" mode.

Also, make sure Dragon is in "Dictation Mode", not "Command Mode".

Dragon should always be in "Dictation" mode when using VoiceCode.

Next open your web browser (Safari, Chrome, Firefox, etc.) and open a new tab (⌘T). The url input should be focused. Try saying something like @this is a [email protected] Whatever words you say should be typed into the address bar. If nothing happens, see troubleshooting.

Your First Command

You actually already used the most common VoiceCode command: `core:literal`. All words that you speak go through the VoiceCode parser and get broken down into a series of commands. Each command has a unique identifier like `core:literal` or `selection:current-line`. The first word of the command identifier is always the package name that the command came from, and the last half is the specific name of that command. You can see exactly how VoiceCode parses a phrase by inspecting the log window. Any words that don't match a pattern defined by more specific commands will fall back to match the `core:literal` command. In the case of @this is a [email protected] you would see the following in the log window:

The Basics

Now it’s time to start using some basic VoiceCode commands. We will naturally start with some of the commands from the package called `common`.

Finding the `common` package

Open the main VoiceCode window and click the `Commands` tab, then in the search bar, type "common". It will now display all the commands from that package.

Notice each command has its spoken name in uppercase bold letters. Below that is its identifier, i.e. `common:delete`. On the left is the toggle for whether that command is enabled or not. And underneath the command identifier is a brief description of the command's action. Notice each command also has `tags` which are a way of organizing commands into related groups that may span across multiple packages. Clicking on any tag will take you to all commands that share the same tag. Also notice the selector to the left of the search bar, which allows you to search in different ways, by "package name (the default)", "tags", "command name", or "command description". Hover the mouse over any of the UI elements to get a tooltip descriptor. The last thing to notice is the badges to the right of each command identifier. These show the different "implementations" of that command for specific Scopes. For example you can see that `common:find-next` @[email protected] has a specific implementation for the `vim:terminal` scope, as well as a "global" implementation that applies everywhere else.

Trying a Command

Let's try the command `common:find` @[email protected] Switch back to your web browser and go to any webpage. Now say @[email protected] and it should open the normal "find on page" dialogue of your browser. Now speak a search term such as @[email protected] You have just used an individual command, then followed it up with some literal text. Now clear out that search field and press escape to exit the search. This time say @marco [email protected] and notice it does the same thing as last time but all from a single phrase, it will open the search dialogue and then type the next thing you say immediately. Now try @marco this is a [email protected] Commands can be freely intermixed with literal text or other commands in any combination or series, in order to achieve highly customizable results from a single spoken phrase.

Experiment a Little Bit

Go ahead and try out some of the other commands from the `common` package. If you have any issues with commands "not being recognized" see the vocabulary section.

More Commands

Next let's move to the `format` and `symbols` packages.

The `format` package

This package contains commands related to formatting or outputting text. Find this package the same way we did before, by typing `format` into the package search bar (make sure the search selector is set to "packages")

Finding the "format" package - for text-related commands.

Make sure the commands in this package are all enabled, so they are ready to use - if you need to enable them, do it now, then click the "restart" button on the bottom left again.

To try out these commands, let's open the built-in TextEdit app. Open TextEdit and create a new blank document, then click in the document to place the cursor as if you were going to start typing.

Many of these commands will do different things depending on whether you say the command name by itself, or give it textual content after the command name. To see this in action, type the text "hello world" into the document, and then select that text. Now just say @[email protected], and it should uppercase the selected text - this works for most of the text formatting commands.

Experiment

Take some time now to scroll through the rest of the commands in the `format` package to see what is available, and try them out in your blank TextEdit document.

**Memorization Side-Note**

By now you should start to see that there are a lot of commands. There are many packages, and each one contains many commands. Your initial goal shouldn't be to memorize them all, but to start memorizing the ones that seem the most important to your specific workflows. I highly recommend taking the time to scroll through all the commands of all the packages at least once, and read each description, so you at least have a cursory understanding of where to find each command when you need to come back to it later, maybe take notes and jot down which packages seem to contain the commands you are most interested in.

The `symbols` package

Another really important set of commands is the `symbols` package, which contains things like parentheses, punctuation, and common symbol combinations. Again, type "symbols" into the package search to see these commands and make sure they are enabled.

Now try a few of these commands in your TextEdit document

Notice some of the commands have multiple variations for whether they apply spaces around the symbols or not. For example @[email protected] => "+", while @[email protected] => " + ". These variations are very useful when writing code.

Different programming languages make greater use of different symbols, so look through this package and make yourself a cheat sheet of the ones that seem most important to you.

**Command Naming Slide-Note**

The names of most commands were chosen to be short and easily distinguishable by speech recognition, but it is also easy to change the name of any command if you have a preferred way you want to say it. See Commands for details on changing the spoken name of any command.

Other Important Packages

Here's some other packages that you should get familiar with right away. Some of them have their own documentation as well.

  • alphabet - commands for individual letters and spelling
  • `application` - opening apps, switching between apps, etc.
  • `clipboard` - copy, paste, and clipboard commands
  • `cursor` - cursor movement
  • `delete` - all the commands related to deleting
  • `editor` - if you are a programmer and use a text editor such as Atom or Sublime Text, you need this package
  • `homonyms` - a command for fixing homonym mistakes such as "there / they're"
  • `insert` - commands for inserting preformatted things like emails, dates, etc.
  • `launcher` - commands for opening websites or local folders
  • `modifiers` - every permutation of ⌘⌥⌃⇧  along with the other keys on the keyboard
  • mouse - commands for clicking and mouse-related things
  • `previous-text` - commands for modifying/correcting the previous phrase
  • repetition - commands for repeating other commands or phrases
  • `selection` - commands for selecting text

Word Collisions

Sometimes a command name might be similar to a regular english word that you are trying to say literally. Dragon tries extra hard to pigeonhole the very first word you say into one of the commands it is expecting. For example the `selection:previous-occurrence` command is spoken @[email protected], so if you try to insert the literal text @[email protected] as the first word in a phrase there is some chance that Dragon might think you are trying to say the command @[email protected] If this happens, there is a special command `core:delimiter` @[email protected] which essentially does "nothing", but allows your next word to be more distinguished, so in this case @shin [email protected] would help the word be recognized more easily, and it would simply type "trailer" onto the screen.

Typing Names Of Commands

Typing the Spoken Name

The command `core:pass-through` @[email protected] will allow whatever text follows it to be interpreted literally, even if it is followed by command words, so @keeper [email protected] would type "shock".

Typing the Command Identifier

The command `core:insert-command-id` @[email protected] will insert the command identifier of its argument, so @sherlock [email protected] would type "common:enter".

Patience and dedication

Like learning any new form of expression, VoiceCode takes patience and dedication to learn. It is like learning a musical instrument or a spoken language. It must be learned in small chunks that slowly start to be merged together into free-flowing phrases. Memorization comes from usage and repetition.

Here’s some tips

Start with single commands.

Don’t try to form long command chains early on.

Once you’ve mastered quite a few single commands, start using combinations of 2 commands at a time. For example:

  • @stoosh [email protected] copies the selected text and then switches to the most recent application
  • @ricky [email protected] moves the cursor to the very right edge and then presses the delete key one time
  • @duke [email protected] performs a double-click wherever the mouse is and instantly inserts the text “hello”
  • @kite sky [email protected] will delete the word just to the right of the cursor then insert a capital “A”.

Speak fluidly

For command combos, make sure to say the whole combination fluidly, without long gaps between the words. Think of it like you are saying a person’s full name. You would not put a pause between their first and last name, but would say it all together almost as one word.

Focus on your most commonly performed actions first

The 80/20 rule applies to most things in life. In this case it means 80% of what you do is most likely repetitive, and can probably be moved to voice-control with 20% learning effort. Then tackling the remaining 20% of more random edge-case actions will take the remaining 80% of your learning time. So first focus on finding actions you do repetitively throughout the day, such as opening websites, switching applications, double-clicking then capitalizing a word, etc.

Merge VoiceCode into your workflow - don't quit the keyboard cold turkey!

During the learning phase make sure to keep using the keyboard and mouse for actions that you have not learned the commands for yet. If you are trying to get actual work done while you learn, don't just go and look up a command for every action you need to do, or it will become very frustrating and slow. Instead, pick the commands you want to learn today, memorize them, and then start working - whenever you encounter the time to use one of today's commands make sure to use it, even if you have to undo what you just did using the keyboard or mouse and redo it with the voice command. The next day you will add more commands, so your repertoire will grow by 10 or 20 commands per day. Within a week you should be able to easily memorize 100 or more of the most important commands for your workflow. From there just stick to a schedule of learning new commands each day, and reinforcing the commands you already know.