마지막 업데이트 2026-07-22
아동 마이크 입력이 너무 작을 때 자동으로 게인을 올려주는 Web Audio 보정. 노트북/태블릿 내장 마이크처럼 입력 레벨이 낮은 기기에서 핑퐁이가 아동 음성을 잘 인식하도록 돕는다.
createMediaStream에서 내장 마이크일 때만 적용(!audioInputDevice || isBuiltInDevice(...)). 외장 마이크는 자체 게인이 충분하다고 보고 건너뛴다. 적용 시 오디오 처리 체인(#7)보다 앞단.
analyser로 RMS를 재고, gainNode 값을 동적으로 조절한다. 실패 시 원본 stream 반환(graceful).
resetGain()(게인 1.0 복귀).adjustGainBasedOnAverage(): 평균이 -35dB 미만이면 gain = 10^((-15 - 평균)/20)로 목표(-15dB)까지 끌어올림.// 게인 계산 (adjustGainBasedOnAverage) gainAdjustment = TARGET(-15) - averageVolume gainValue = Math.pow(10, gainAdjustment / 20) // dB → 선형 배율
| 메서드 | 역할 |
|---|---|
processMediaStream | AudioContext+그래프 구성, processedStream 반환(실패 시 원본) |
startVolumeMonitoring | 세션 확립 후 모니터링 시작(#1에서 호출) |
stopVolumeMonitoring / cleanup | 인터벌·타이머 정리, AudioContext close |
getStatus / setOnStatusChange | 증폭 상태(isAmplified, gainValue) 조회/콜백 |
상태 변화는 콜백으로 통지 → 게스트 릴레이(#6)가 guest-volume-amplifier-status로 호스트에 미러링(모니터 UI 표시).
| 파일/심볼 | 역할 |
|---|---|
| use-volume-amplifier.ts (monitorVolumeAndDetectSpeech L109, adjustGainBasedOnAverage L65) | auto-gain 본체 |
| use-session-manager.ts:996–1034 | 내장 마이크 시 processMediaStream 호출 |
| lib/audio-utils.ts (isBuiltInDevice) | 내장 마이크 판정 |