Skip to content

fix(asr): эхо мессенджера не становится вторым собеседником (0.13.7) - #58

Merged
bglglzd merged 1 commit into
mainfrom
claude/sleepy-wright-nl7ay2
Oct 2, 2026
Merged

bglglzd merged 1 commit into
mainfrom
claude/sleepy-wright-nl7ay2

Conversation

@bglglzd

@bglglzd bglglzd commented Oct 2, 2026

Copy link
Copy Markdown
Owner

Пользователь: при записи разговора в мессенджере сильное эхо распознаётся как второй собеседник.

Воспроизведено на стенде --example echo_eval (pyannote sample, голоса A/B по RTTM, эхо как в звонке):

  • ваш голос, вернувшийся в звук звонка (у собеседника не работает эхоподавление, 0.45 с), — в системной дорожке 2 голоса, ваша фраза записана вторым собеседником;
  • собеседник из колонок в микрофоне — «Я» говорит его словами.

Исправление

  • core/src/echo.rs: поиск копии дорожки по быстрой части огибающих (очерёдность реплик маскирует эхо) + спектральное подавление (медиана доли утечки по частотам минус та же оценка на «чужой» задержке, глушение кадров, где копия — почти весь звук), блоками по 30 с. Применяется к микрофону (clean_mic_file → mic_echo.wav).
  • Эхо в системной дорожке звуком не подавляется — на стенде это портило речь собеседника; его убирает сверка реплик transcript::drop_cross_echo (реплика звонка, повторяющая вашу через 0.15–2.5 с) и drop_self_echo (повтор в одной дорожке через 0.1–3 с). Только ≥ 3 слов — «Алло»/«Да» не трогаются.

Замер (стенд): звонок 2 голоса → 1; «Я» без слов собеседника; без эха (наушники) — ничего не найдено, ничего не меняется.

Проверено: cargo test -p uxo-core 157, vitest 144, cargo check (без фич / whisper,diarize,parakeet).

🤖 Generated with Claude Code

https://claude.ai/code/session_01FGrZHurdegVoBPFCPkzJrt


Generated by Claude Code

- Собеседник из колонок в микрофоне: echo::clean_mic_file находит копию
  системного звука в микрофоне (огибающие, задержка ≤ 0.3 с) и подавляет её
  спектрально (медиана доли утечки по частотам + глушение кадров, где копия —
  почти весь звук) → mic_echo.wav для распознавания и голосов.
- Ваш голос, вернувшийся в звук звонка, и повторы в одной дорожке —
  transcript::drop_cross_echo / drop_self_echo (≥ 3 слов, совпадение по
  словам, окно по времени); в лог — сколько убрано.
- Стенд --example echo_eval (pyannote sample + эхо как в звонке): звонок
  2 голоса → 1, «Я» без слов собеседника; без эха ничего не меняется.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGrZHurdegVoBPFCPkzJrt
@bglglzd
bglglzd merged commit d058137 into main Oct 2, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant