EchoMuse
Give your Amazon Echo Dot 2nd Generation a second life as an open source voice assistant satellite.
EchoMuse replaces the Alexa firmware with a lightweight Go server that streams audio to and from a backend controller of your choosing. The LED ring, microphone array, buttons, and speaker remain fully accessible via HTTP API. Pair it with Home Assistant, a local LLM pipeline, or any backend you like.
This is a significant fork of EchoGo by Binozo — the original SDK that made this hardware accessible. Substantial modifications have been made including client-side VAD, mute button handling, volume control, and audio fixes specific to the biscuit hardware.
Before you start
Your Echo Dot must be rooted with persistent root before EchoMuse is useful. The full rooting and setup guide — including SELinux bypass, Alexa removal, audio configuration, VAD, and wake word detection — is in SETUP.md.
The short version:
- Persistent unlock via amonet-biscuit (R0rt1z2)
- FireOS 5 (Android 5.1, API 22)
- Magisk 17.3
- Alexa voice stack disabled
Building
The Echo Dot runs FireOS 5 (API 22). A custom Docker build environment is required — standard Go cross-compilation won’t produce a compatible binary.
Prerequisites:
Build the compiler image:
docker build -t echomuse-compiler compiler/
Compile:
docker run --rm \
-e CGO_LDFLAGS="-Wl,--hash-style=both" \
-v "$(pwd)":/sdk \
-v ~/GoTinyAlsa:/GoTinyAlsa \
echomuse-compiler
Output: build/server
Audio processing pipeline
Each 32ms period of microphone audio passes through a processing chain before VAD gating and transmission:
raw 9ch S24_3LE → beamformer (mic selection) → RNNoise NS → AGC → mono S16_LE → VAD gate
Beamformer locks to the perimeter mic with the highest onset energy ratio at voice turn start. Onset ratio (fast/slow EWMA) is robust to continuous background noise — it picks the direction that just got louder, not the loudest direction overall.
RNNoise (xiph/rnnoise v0.1) suppresses background noise. Vendored C source compiled via cgo — no external library or system dependency required.
AGC normalises level for consistent wake word and STT input. Release is frozen during silence to prevent noise floor amplification past the VAD threshold.
VAD runs on pre-NS/AGC audio to keep threshold calibrated to mic sensitivity rather than processed level.
VAD configuration
Tunable via environment variables on the device (overridden by controller config push):
| Variable |
Default |
Description |
VAD_CHANNEL |
0 |
Mic channel for vad_stream endpoint (0–8) |
VAD_THRESHOLD |
0.015 |
RMS threshold 0.0–1.0 (controller pushes 0.003) |
VAD_SPEECH_MS |
80 |
Ms of speech to open the gate |
VAD_SILENCE_MS |
600 |
Ms of silence to close the gate |
Acknowledgements
License
MIT
评论