Skip to content
Version v0.35 ยท supported
[WIP] Pending copyedit and approval.

Push-to-talk

Push-to-talk gates listening behind a held key. While the key is down, Amri listens for the commands in that scope. When you let go, it stops. It keeps Amri from acting on stray speech, and it is what lets a free-dictation command know when you have finished talking.

A push-to-talk binding is a named key defined once, then referenced by name.

Where it is set, and how it inherits

Push-to-talk resolves through three levels. The most specific one wins:

Set on Effect
Command This command uses this binding.
Category Every command in the category uses it, unless the command overrides.
Profile The default for the whole profile, unless a category or command overrides.

A command with no push-to-talk of its own inherits its category's; a category with none inherits the profile default. To turn gating off for one command or category that would otherwise inherit it, set an explicit always-on.

Free dictation needs a push-to-talk

A command that begins with a free-dictation capture has to be held behind a push-to-talk, because otherwise Amri cannot tell when the dictation starts and ends. If such a command has no push-to-talk resolved (none of its own, none inherited), the profile will not load. Inherit one from a category, or set one on the command.

Example

Define a binding, then gate a category with it:

[[push_to_talk]]        # in engine.toml, defined once
name = "uhf"
key  = "left_alt"

[category.comms]        # in the profile
push_to_talk = "uhf"    # every comms command listens only while UHF is held

Exclusive categories

A category can be marked exclusive, so that while its push-to-talk is held, only that category's commands can fire and everything else is held back. Useful for a radio menu where you do not want other commands slipping in.