From a8cfab8a4a4422fe911375360ee2c309e2c73963 Mon Sep 17 00:00:00 2001 From: csbae Date: Mon, 7 Sep 2026 18:29:58 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=91=90=20=ED=8A=B8=EB=9E=99=EC=9D=84?= =?UTF-8?q?=20=ED=99=95=EB=B3=B4=ED=96=88=EC=9D=84=20=EB=95=8C=EB=A7=8C=20?= =?UTF-8?q?=ED=99=94=EC=9E=90=EB=A5=BC=20=EB=9D=BC=EB=B2=A8=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 대면 회의처럼 시스템 오디오가 없는 상황에서 화자 분리를 켜면, 마이크에 섞여 들어온 상대 발언까지 "나"로 기록되는 문제가 있었다. 라벨이 틀리는 것은 라벨이 없는 것보다 나쁘다. capture.mode가 'dual-stream'일 때만 speaker를 붙이고, 마이크 단독으로 폴백하면 라벨 없이 기존 형식으로 기록한다. 설정 UI에도 대면 회의에서는 동작하지 않는다는 점을 명시했다. Co-Authored-By: Claude Opus 5 --- src/components/recorder/LiveRecorder.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/recorder/LiveRecorder.tsx b/src/components/recorder/LiveRecorder.tsx index 9de8bef..b57a247 100644 --- a/src/components/recorder/LiveRecorder.tsx +++ b/src/components/recorder/LiveRecorder.tsx @@ -39,9 +39,13 @@ export function LiveRecorder({ // 화자 분리를 켜면 트랙마다 인식기를 붙인다. 트랙이 곧 화자가 되므로 // 추론 없이 화자가 갈린다. + // 두 트랙을 실제로 확보했을 때만 화자를 라벨링한다. + // 마이크만 잡힌 상태에서 라벨을 붙이면 상대 발언이 내 것으로 기록된다. + const isSeparating = capture.mode === 'dual-stream' + const local = useSpeechRecognition({ audioTrack: speakerSeparation ? capture.micTrack : null, - speaker: speakerSeparation ? LOCAL_SPEAKER : undefined, + speaker: isSeparating ? LOCAL_SPEAKER : undefined, timeOrigin: timeOriginRef.current || undefined, }) @@ -61,10 +65,10 @@ export function LiveRecorder({ const chunks = useMemo( () => - speakerSeparation + isSeparating ? mergeSpeakerChunks(local.chunks, remote.chunks) : local.chunks, - [speakerSeparation, local.chunks, remote.chunks], + [isSeparating, local.chunks, remote.chunks], ) // 캡처가 끝나 트랙이 준비되면 그때 인식기를 시작한다. @@ -252,6 +256,11 @@ export function LiveRecorder({ 정확합니다. 시작 시 화면 공유 대화상자에서 “탭 오디오 공유”를 반드시 켜주세요. + + 한 대의 노트북을 앞에 두고 마주 앉은 대면 회의에서는 동작하지 + 않습니다. 마이크 하나에 두 사람 목소리가 섞여 들어오기 때문입니다. + 이 경우 화자 라벨 없이 녹음되며, 대면 화자 분리는 준비 중입니다. +