VoiceGem

Saying an open square bracket out loud while you write code

Say “open bracket” or “left bracket” to produce [. The character attaches on both sides, so “items open bracket zero close bracket” assembles as items[zero] with the subscript flush against the array name — the shape an index needs in JavaScript, Python, Rust, Go and every other bracket-indexed language.

A six-word subscript costs about 6.9 seconds typed and about 2.2 seconds spoken at conversational pace. (sources: Dhakal, Feit, Kristensson & Oulasvirta, “Observations on Typing from 136 Million Keystrokes”, CHI 2018, 168,000 participants, 136 million keystrokes; Yuan, Liberman & Cieri, “Towards an Integrated Understanding of Speaking Rate in Conversation”, Interspeech 2006, 2,438 American English telephone conversations (Switchboard corpus). The speech figure is conversational rate, not a measured dictation rate — no such measurement exists.)

What lands in your editor
items[zero]

This tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.

Step by step

  1. 1

    Name the collection first

    Say the variable, then “open bracket”. Because the bracket attaches on both sides, nothing separates the name from the subscript and you get items[ rather than items [.

  2. 2

    Say the index as words or digits

    Speak the index straight after. Digits work as digits — “5” arrives as 5 — but the word “zero” arrives as the word zero, because VoiceGem's table maps symbols and casing, not number words.

  3. 3

    Close and continue

    Say “close bracket”. For a two-dimensional access, say the whole second subscript immediately; the two pairs sit flush against each other with no space in between.

  4. 4

    The keyboard route

    Press the [ key directly — it is unmodified on a US layout, which makes it one of the cheapest characters to type and one of the least worthwhile to dictate on its own.

Number words stay words, and the open square bracket is where people notice

VoiceGem converts spoken symbols and casing commands. Number words are neither, so “zero” arrives as the five-letter word zero and “5” arrives as the digit 5. Subscripts are where this surfaces first, because an index is the most common place a developer says a small number out loud.

The behaviour is a consequence of the design rather than an oversight. Adding number-word conversion would mean deciding whether “one” in “one more thing” is a digit, which is exactly the kind of judgement the Deterministic Pass refuses to make. Say the digit and you get the digit.

Where the manual path breaks

A single subscript is a two-key affair and dictation adds nothing. The bracket is unmodified on a US keyboard, so items[0] is genuinely quick to type and no honest page should claim otherwise.

Long chained access is a different shape of problem. grid[y][x] typed with auto-pairing means stepping over two closers in the right order, and a whole line of destructuring or matrix work becomes a sequence of small cursor decisions. Dictating it as one sentence removes the cursor from the loop entirely, and VoiceGem emits the brackets in exactly the order you spoke them.

Doing this somewhere else? the speech-to-code converter on this site, the same thing for the closing curly brace, the closing square bracket specifically, or the closing parenthesis specifically.

Common questions

It gives [. The curly brace has its own phrases — “open brace”, “left brace” and “open curly” — so the two never collide in VoiceGem's table.

Say “open bracket”, then each element separated by “comma”, then “close bracket”. The comma attaches left, so the elements come out spaced the way a formatter would leave them.

No. Number words pass through unchanged because VoiceGem's table covers symbols and casing only. Say the digit itself if you want a digit.

Try a matrix access and see every bracket land in order.

Open the tool