fix(plip): handset mic capture — ES8388 DLL + STT high-pass #164

Merged
electron merged 7 commits from fix/plip-mic-stt-highpass into main 2026-06-17 07:24:35 +00:00
Owner

Deux bugs résolus dans la chaîne micro PLIP

1. ES8388 : registres DLL non documentés (sous-module ESP32_ZACUS)

Sans les registres 0x35/0x37/0x39, la DLL interne du codec ES8388 est instable à 16 kHz : l'ADC sort une valeur DC figée (capture muette, max=0). Le DAC tolère l'instabilité (lecture OK, micro mort). Ces registres sont repris du driver A252 prouvé (Es8388Driver.cpp). Avec eux, boot sanity passe de max=0 à max=178.

2. Gateway : passe-haut STT pour supprimer le rumble SLIC

Le combiné injecte du drift basse fréquence via le SLIC qui submerge la parole et fait sortir Kyutai STT à vide. _normalize_wav_for_stt applique une soustraction de moyenne glissante (~110 Hz) avant normalisation. Gain max x40, target_peak 0.7.

Validation bout en bout

Même capture : STT vide SANS passe-haut, français propre AVEC. Vérifié au banc sur SLIC réel.

## Deux bugs résolus dans la chaîne micro PLIP ### 1. ES8388 : registres DLL non documentés (sous-module ESP32_ZACUS) Sans les registres 0x35/0x37/0x39, la DLL interne du codec ES8388 est instable à 16 kHz : l'ADC sort une valeur DC figée (capture muette, max=0). Le DAC tolère l'instabilité (lecture OK, micro mort). Ces registres sont repris du driver A252 prouvé (Es8388Driver.cpp). Avec eux, boot sanity passe de max=0 à max=178. ### 2. Gateway : passe-haut STT pour supprimer le rumble SLIC Le combiné injecte du drift basse fréquence via le SLIC qui submerge la parole et fait sortir Kyutai STT à vide. _normalize_wav_for_stt applique une soustraction de moyenne glissante (~110 Hz) avant normalisation. Gain max x40, target_peak 0.7. ### Validation bout en bout Même capture : STT vide SANS passe-haut, français propre AVEC. Vérifié au banc sur SLIC réel.
electron added 2 commits 2026-06-16 07:37:10 +00:00
SLIC handset injects low-frequency rumble/DC drift that swamps speech
and causes Kyutai STT to output nothing. Apply a box moving-average
high-pass (~110 Hz) before peak-normalisation. Also raise gain cap to
x40 and target_peak to 0.7 (mic is still very quiet post-ES8388 fix).
Verified: same capture transcribes empty without HP, clean French with.
chore: bump ESP32_ZACUS — ES8388 DLL ADC fix
Repo State / repo-state (pull_request) Failing after 10m56s
Repo State / repo-state (push) Failing after 12m4s
1e15bba258
electron added 2 commits 2026-06-16 08:33:18 +00:00
- keep-warm interval 600s -> 240s (avoids ~47s cold-start fallback)
- local backend timeout 60s -> 70s (tolerates cold reload under 90s)
chore: bump ESP32_ZACUS — incoming mode + volume
Repo State / repo-state (pull_request) Failing after 10m51s
Repo State / repo-state (push) Failing after 12m5s
Validate Zacus refactor / validate (pull_request) Failing after 18m38s
f8e576ba5a
electron added 1 commit 2026-06-16 17:20:32 +00:00
chore: bump ESP32_ZACUS — status + capture fix
Repo State / repo-state (push) Failing after 2m3s
Repo State / repo-state (pull_request) Failing after 10m11s
Validate Zacus refactor / validate (pull_request) Failing after 15m3s
f703611388
electron added 1 commit 2026-06-17 06:26:53 +00:00
fix(stt): reset LM KV-cache per request
Repo State / repo-state (push) Failing after 10m58s
Repo State / repo-state (pull_request) Failing after 11m34s
Validate Zacus refactor / validate (pull_request) Failing after 11m39s
fb71e9ceeb
The Lm holds a persistent rotating transformer_cache shared by every
LmGen. LmGen only resets its own gen_sequence/step_idx, so across
requests the cache kept accumulating stream positions until it
saturated and the model emitted only padding tokens, returning empty
transcriptions ('') for every request. Reset transformer_cache (and
depformer_cache) per request, mirroring Lm.warmup(). Validated: 40
consecutive requests of a known-good sample, 0 empty.
electron added 1 commit 2026-06-17 07:06:37 +00:00
chore: bump ESP32_ZACUS (no hook forcing)
Repo State / repo-state (pull_request) Failing after 1m6s
Repo State / repo-state (push) Failing after 11m16s
Validate Zacus refactor / validate (pull_request) Failing after 19m7s
af7c02d1a7
Pull in ESP32_ZACUS fix(plip) 8c076d8: gate audio playback on the real
SHK line and remove all hook forcing (s_hook_override,
phone_force_offhook, /debug/offhook). Fixes the silent incoming-call
greeting caused by the two off-hook flags desyncing during ring.
electron merged commit 27ab75fded into main 2026-06-17 07:24:35 +00:00
Sign in to join this conversation.