From 34fac14b20015cd06f6e63826f0ee0d9581e7a23 Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 10 Jul 2026 00:42:16 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9D=8C=EC=84=B1=ED=86=B5=ED=99=94=20T?= =?UTF-8?q?TS=20=EA=B4=84=ED=98=B8=20=EB=AC=B8=EC=9E=90=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20+=20error=20=EC=9D=91=EB=8B=B5=20=EC=8B=9C=20?= =?UTF-8?q?=ED=81=90=20=EB=A9=88=EC=B6=A4=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OmniVoice가 "(" 문자(특히 한글에 바로 붙은 경우, 예: 영웅(Heroic))를 합성하다 멈춰버리는 문제가 있어 sanitizeForSpeech에서 괄호를 제거하도록 변경. 또한 TTS 엔진이 합성 실패 시 보내는 error 메시지를 클라이언트가 로그만 찍고 ttsBusy를 리셋하지 않아, 이후 통화 내내 TTS가 먹통이 되는 버그를 tts_end와 동일하게 큐를 복구하도록 수정. Co-Authored-By: Claude Sonnet 5 --- web-ui/voice-call.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/web-ui/voice-call.js b/web-ui/voice-call.js index 75a56fb..0415588 100644 --- a/web-ui/voice-call.js +++ b/web-ui/voice-call.js @@ -239,6 +239,18 @@ case 'error': console.warn('[voice-call] engine error:', msg.message); + // The failed request may have been the one holding ttsBusy — without + // resetting it here, pumpTtsQueue() early-returns forever and the + // call goes silent for the rest of the session. + if (!msg.id || msg.id === currentTtsId) { + ttsBusy = false; + currentTtsId = null; + pumpTtsQueue(); + if (ttsQueue.length === 0) { + state = 'listening'; + setStatus('듣는 중…'); + } + } break; } } @@ -269,6 +281,10 @@ // remaining table rows: "| a | b |" -> "a, b" so cells read as a list .replace(/^\s*\|(.+)\|\s*$/gm, (_m, row) => row.split('|').map((c) => c.trim()).filter(Boolean).join(', ')) .replace(/https?:\/\/\S+/g, ' ') + // OmniVoice chokes on a bare "(" — especially Hangul-adjacent, e.g. + // "영웅(Heroic)" — and stops generating audio entirely instead of just + // mispronouncing it. Drop the parens but keep their contents. + .replace(/[()()]/g, ' ') .replace(/^\s{0,3}#{1,6}\s+/gm, '') .replace(/^\s*[-*+]\s+/gm, '') .replace(/^\s*>\s?/gm, '')