fix: 회의 모드 마이크 캡처 강제 — ConfigService 레벨에서 오디오 소스 변경

CaptionService.start()가 ConfigService에서 captionAudioSource를 다시 읽어
setConfig 호출이 무시되는 문제 수정. ConfigService 값을 임시 변경 후 복원.
This commit is contained in:
Yun Chan 2026-04-08 08:59:56 +09:00
parent 43a2acb89d
commit 2a465f22e9

View file

@ -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