Skip to content

fix(audiotap): drop misfiring silent-death watchdog#2

Merged
m5d215 merged 1 commit into
mainfrom
fix/audiotap-silent-death-misfire
Jun 18, 2026
Merged

fix(audiotap): drop misfiring silent-death watchdog#2
m5d215 merged 1 commit into
mainfrom
fix/audiotap-silent-death-misfire

Conversation

@m5d215

@m5d215 m5d215 commented Jun 18, 2026

Copy link
Copy Markdown
Owner

症状

system 音声(通話相手側)がほとんど文字起こしされない。実機ログで ~/.config/steno/transcripts の system 発話が 1 日 1 件まで落ちていた。

原因

silent-death watchdog (2b) の誤爆。発火条件は「silent 15s 経過 + backoff 45s 経過 + 出力中アプリが存在」だが、その「出力中」の根拠が kAudioProcessPropertyIsRunningOutput。これは出力ストリームを開いているだけで真になり、Teams やブラウザは無音でもストリームを握り続ける。結果として currentOutputAppNames() が常時非空になり、何も鳴っていなくても 45s おきに tap を recreate していた。

実機 1 日のログ:

recreate 理由 回数
silent ... 679
output device format changed 10
default output device changed 1

うち 661 回は内蔵スピーカー上で発生。Bluetooth プロファイル切り替えとは無関係の純粋な誤爆だった。

recreate のたびに tap を teardown→rebuild するため、相手が喋った瞬間がその窓に当たると取りこぼす。churn 自体が「拾えない」の正体。

修正

silent-death (2b) を削除。これが独自に救う失敗モードは既に他経路でカバー済み:

  • 完全死(frames が来ない) → frames-stall (1)
  • BT プロファイル / sample rate 変化 → format listener + device-rate reconciliation

合わせて、2b を養うためだけに存在した state(lastLoudAt / lastRecreateAt / silentThreshold / recreateBackoff)と、handleIO hot-path のピーク走査を除去した。

検証

修正版を install して再起動後、約 30 秒で silent recreate 0 / tap は起動 1 回のまま安定を実機で確認。

🤖 Generated with Claude Code

silent-death watchdog (2b) が「鳴っているはずなのに tap が無音」を
IsRunningOutput で判定していたが、IsRunningOutput は出力ストリームを
開いているだけで真になる。Teams やブラウザは無音でもストリームを握り
続けるため currentOutputAppNames() が常時非空になり、silent 15s +
backoff 45s ごとに延々と tap を recreate していた(実機 1 日で 679 回、
うち 661 回は内蔵スピーカー上 — BT は無関係)。

recreate のたびに tap を teardown/rebuild するため、その窓で相手の発話を
取りこぼし、結果として system 音声がほぼ拾えなくなっていた。

silent-death が独自に救う失敗モードは既に他の経路でカバーされている:
- 完全死 → frames-stall (1)
- BT プロファイル/レート変化 → format listener + device-rate reconciliation

このため 2b を削除し、養うためだけにあった state(lastLoudAt /
lastRecreateAt / silentThreshold / recreateBackoff)と handleIO の
hot-path ピーク走査も除去する。

実機で再起動後 0 recreate / tap 安定を確認。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@m5d215
m5d215 merged commit e111e7b into main Jun 18, 2026
2 checks passed
@m5d215
m5d215 deleted the fix/audiotap-silent-death-misfire branch June 18, 2026 02:54
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