# mavwaked — always-on listening, on workpc where the microphone is. # # User unit, beside mavgpud.service and maven-voice-tunnel.service. It is a # user unit because it needs his ALSA session and his ssh agent, and because # it should stop when he logs out. # # THERE IS NO WAKE WORD YET (V-487 stage two). Anything spoken near the fifine # becomes a turn. What makes that safe rather than expensive is voiceSender: # it sends Surface=SurfaceVoice, which caps every command at L0, so no # accidental trigger runs a destructive act. It does not stop her answering # out loud, so this unit is his to stop when the room is not his alone. # # -vad-model is passed on purpose. Silero answers "is this frame speech" where # the energy floor answers "is this frame loud". It declines white noise at # the same RMS 0 frames to 68-99, and still hears all four spoken fixtures # (docs/evals/2026-08-09-silero-vad.md). It costs 509us a frame, 1.7% of one # core, and never touches the GPU. Drop the flag and the energy floor is back. # # -barge-in is NOT passed. The threshold is room-specific and this room has no # number yet. Turn it on only after reading the "suppressed while speaking" # means out of this unit's own journal, never by guessing. # # install: cp to ~/.config/systemd/user/ on workpc # systemctl --user enable --now mavwaked.service [Unit] Description=Maven always-on listening (VAD, no wake word yet) # The tunnel is the only path to mavend and the only thing authenticating it. Requires=maven-voice-tunnel.service After=maven-voice-tunnel.service [Service] # card 0 is the fifine USB microphone. Named, and not "default", because the # default device follows whatever pipewire last decided and this daemon should # not change ears when he plugs in a headset. # # plughw and not hw. mavwaked asks arecord for 16kHz mono, which is what the # whole pipeline is canonical in. The fifine offers 2 channels at 44100 or # 48000 and nothing else, so bare hw:0,0 dies on "Channels count non # available" before a frame is read. plughw puts ALSA's downmix and resampler # in front. Any replacement microphone wants the same treatment. Environment=LD_LIBRARY_PATH=%h/.local/lib ExecStart=%h/.local/bin/mavwaked \ -device plughw:0,0 \ -addr 127.0.0.1:9100 \ -lang ru \ -vad-model %h/.local/share/maven/models/silero_vad.onnx \ -onnx-lib %h/.local/lib/libonnxruntime.so Restart=on-failure RestartSec=5 [Install] WantedBy=default.target