-
-
Notifications
You must be signed in to change notification settings - Fork 20
Chorus Wake
Chorus Wake (一呼百应) is Ava's multi-device wake-word arbitration system. When multiple Ava devices in the same home hear the same wake word, Chorus Wake ensures only one device responds — the one that heard it best. The others yield gracefully.
Available since 0.7.3.
When any Ava device detects a wake word, it broadcasts a claim packet over the local network. All devices collect claims for a fixed window, then compare scores. The device with the highest score wins and opens the assistant. Losers fade out with a yield glow.
Device A hears "Hey Jarvis" (score 1200)
Device B hears "Hey Jarvis" (score 850)
↓
Both broadcast AVA_WAKE claims on UDP 19851
↓
180 ms collect window
↓
Device A has the higher score → wins, opens assistant
Device B yields → fade glow, stays silent
↓
Device A finishes → broadcasts AVA_WAKE_END
Device B un-yields
Chorus Wake uses UDP broadcast on port 19851 — dedicated to chorus wake, not shared with Bluetooth presence (19847) or AvaVoice (19848/19849).
| Packet | Purpose |
|---|---|
AVA_WAKE |
Wake claim: device ID, wake key, score, timestamp |
AVA_WAKE_END |
Session end: winner finished talking or run aborted |
END packet is sent 3 times to survive unacknowledged Wi-Fi broadcast (DTIM-buffered delivery can drop one packet).
The winner is who heard the wake word louder (pre-gain RMS + confidence), not who finished voiceprint first or whose wall clock is behind.
| Behavior | Description |
|---|---|
| Collect window | Every device collects claims for the same fixed window before deciding |
| Tie handling | Scores within a small margin are treated as a tie — a slightly hotter mic cannot lock the seat just by being a few points ahead |
| Clear lead yield | A device yields immediately only when a prior claim is clearly louder, not merely earlier |
| Late claim revocation | If a clearly-louder claim arrives shortly after a local win, the local device revokes its seat instead of double-answering — handles devices that detected late but out-heard the current winner |
| Claim repeats | Each claim packet is sent multiple times to survive Wi-Fi broadcast drops (DTIM-buffered delivery can drop one packet) |
Chorus normalizes naming differences between microWakeWord and OpenWakeWord by stripping engine suffixes from model IDs. okay_nabu (microWakeWord) and ok_nabu (OpenWakeWord) map to the same wake identity, so devices using different engines can still arbitrate the same wake phrase.
| Event | Behavior |
|---|---|
| Local wake detected | Broadcast AVA_WAKE claim, start collect window |
| Collect window ends | Compare scores; win or yield |
| Win | Open assistant; on finish, broadcast AVA_WAKE_END
|
| Yield | Fade glow; wait for AVA_WAKE_END from winner |
AVA_WAKE_END received |
Un-yield; return to normal wake detection |
| Session timeout | Peer session expires; un-yield regardless |
| Seat revoked | Local win dethroned by louder late claim; yield instead |
Rewake handoff: If a new wake arrives while the current session is still active, the winner must not announce chorus end for the session that just started. The handoff is tracked to prevent premature end announcements.
When a device yields, it shows a subtle glow effect (ChorusYieldGlowView) so you can see it heard you but deferred to another device. The glow fades smoothly — no jarring visual transition.
- Go to Settings → Voice Config
- Turn on Chorus Wake
- All Ava devices on the same LAN with Chorus Wake enabled will arbitrate
No manual configuration of device priorities or rooms is needed. The device that hears you best responds.
- Multiple Ava devices on the same LAN
- Chorus Wake enabled on each participating device
- UDP broadcast enabled on your network (most home networks support this by default)
- Same wake word configured on participating devices (or cross-engine mapped, e.g.,
okay_nabu↔ok_nabu)
Back to Home
- Quick-Start
- System-Requirements
- Voice-Control
- Chorus-Wake
- ESPHome-Encryption
- HA-Direct-Connection
- Browser
- Screensaver
- Floating-Windows
- Home-Launcher
- Home-Screen-Widgets
- Notification-Scenes
- Quick-Entity
- Sensors
- Backup
- Sendspin
- Bluetooth
- Voice-Messages-Calls
- Music-Playback
- Camera
- Screen-Control
- Intent-Launcher
- ADB-Commands
- Mod-Store
- Ava-Fleet