Skip to content

Bambu duck: wake word (microWakeWord 'ducky') — no-button-press conversations #35

Description

@dderuntz

Replace push-to-talk with hands-free wake word. Speak "ducky" → conversation opens automatically. Same code path as physical button currently triggers.

Approach

microWakeWord (esphome, MIT, used by Home Assistant Voice). Custom "ducky" model trained in Google Colab from ~50 recordings. ~80KB TFLite, real-time inference on ESP32-S3 Xtensa DSP at ~5% CPU.

Alternatives:

  • Espressif esp-sr / WakeNet (paid for custom training)
  • Picovoice Porcupine (best accuracy, commercial license, ~$1–5/device for distribution)

microWakeWord is the right choice for v1: free, open, proven on this chip class.

Architecture

```
mic_task (I2S read) ─→ s_mic_stream ─→ ws_send_task
└─→ wake_word_task (gated by !s_agent_speaking)
on detect ─→ start_session() // same as button press
```

The wake word detector reads from the same I2S RX channel. Crucially gated by `!s_agent_speaking` so the agent saying "ducky" or anything similar doesn't self-trigger.

Training

User records ~50 takes of "ducky" in their voice + room. Negative samples should include:

  • Agent's voice saying "ducky" and similar phonemes
  • Quiet ambient
  • Music / TV / conversation

Train once, embed the .tflite in firmware EMBED_FILES, ship.

Power

Always-on wake-word detection on USB power is fine. For battery-powered v2, would need to power-gate or use ULP coprocessor — out of scope for v1.

Tied to

  • #27 firmware tracker
  • #34 spoken onboarding can announce wake word at end of setup

Metadata

Metadata

Assignees

No one assigned

    Labels

    bambuBambu duck (standalone variant)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions