diff --git a/src/main/services/MeetingModeService.ts b/src/main/services/MeetingModeService.ts index 1848ac1..19b5483 100644 --- a/src/main/services/MeetingModeService.ts +++ b/src/main/services/MeetingModeService.ts @@ -8,7 +8,7 @@ import fs from 'fs' import { nanoid } from 'nanoid' import { eq, desc, sql } from 'drizzle-orm' import { getLogger } from './LoggerService' -import { configGet } from './ConfigService' +import { configGet, configSet } from './ConfigService' import { getMainWindow } from '../windows/WindowManager' import { getDatabase } from '../db' import { meetingSessions, meetingMemos } from '../db/schema' @@ -151,18 +151,26 @@ class MeetingModeService extends EventEmitter { } captionService.on('segment', this._segmentHandler) - // 회의 모드는 마이크 캡처 강제 (시스템 오디오가 아닌 마이크) - const prevAudioSource = captionService.getConfig().audioSource - captionService.setConfig({ audioSource: 'mic' }) + // 회의 모드는 마이크 캡처 강제 — ConfigService 값도 임시 변경 + // (CaptionService.start()가 ConfigService에서 다시 읽기 때문) + type AppConfigKey = keyof import('@shared/types').AppConfig + const prevAudioSource = configGet('captionAudioSource' as AppConfigKey) as unknown as string + configSet('captionAudioSource' as AppConfigKey, 'mic' as never) try { await captionService.start() // 회의 모드 UI가 자체 자막 패널에 표시하므로 오버레이 숨김 const { hideCaptionOverlay } = await import('../windows/WindowManager') hideCaptionOverlay() + // ConfigService 원래 값 복원 + if (prevAudioSource) { + configSet('captionAudioSource' as AppConfigKey, prevAudioSource as never) + } } catch (err) { - // 오디오 소스 복원 - captionService.setConfig({ audioSource: prevAudioSource }) + // ConfigService 원래 값 복원 + if (prevAudioSource) { + configSet('captionAudioSource' as AppConfigKey, prevAudioSource as never) + } // 시작 실패 시 복원 captionService.off('segment', this._segmentHandler) this._segmentHandler = null