OnVoice COM 브리지 개발 기능 중심 진행 상황
마지막 업데이트: 2025-11-20
현재 상태: 핵심 기능 완료 ✅ + E2E 테스트 성공 🎉 + 데드락 수정 완료 🐛 → Electron 연동 준비 중
[████████████░░░░] 70% (18h / 50h)
✅ 완료: COM 인터페이스, 이벤트 시스템, 캡처 엔진
⏳ 진행 예정: Electron 연동, 다중 프로세스 지원
구현 상태: 완료
소요 시간: 2시간
완료 날짜: 2025-11-18
주요 기능:
- ✅
IOnVoiceCapture인터페이스 정의 (IDL) - ✅
StartCapture(LONG processId)- PID 기반 캡처 시작 - ✅
StopCapture()- 캡처 중지 - ✅
GetCaptureState(LONG* pState)- 상태 조회 - ✅
IDispatch지원 (VBScript/JavaScript 호출 가능) - ✅ 상태 관리 (
CaptureStateenum: Stopped/Starting/Capturing/Stopping)
구현 파일:
OnVoiceAudioBridge.idl- 인터페이스 정의OnVoiceCapture.h/.cpp- COM 클래스 구현
검증:
- ✅ VBScript에서 COM 객체 생성 성공
- ✅ 메서드 호출 정상 작동
- ✅ 상태 전환 확인 (0 → 1 → 2 → 3 → 0)
구현 상태: 완료
소요 시간: 2시간
완료 날짜: 2025-11-18
주요 기능:
- ✅
_IOnVoiceCaptureEventsdispinterface 정의 - ✅
IConnectionPoint/IConnectionPointContainer구현 - ✅ GIT (Global Interface Table) 프록시를 통한 스레드 간 안전한 이벤트 전송
- ✅
OnAudioData(SAFEARRAY(BYTE) pcmData)이벤트 - ✅ SAFEARRAY를 사용한 바이너리 데이터 전송
- ✅ 오디오 캡처 스레드(MTA)에서 스크립트 아파트먼트로 마샬링
핵심 구현:
// GIT 프록시 등록 (StartCapture 시)
m_gitSinks[i].Attach(spDisp);
// 오디오 스레드에서 이벤트 전송
m_gitSinks[i].CopyTo(&spDispatch);
spDispatch->Invoke(dispidOnAudioData, ...);구현 파일:
OnVoiceAudioBridge.idl- 이벤트 인터페이스 정의OnVoiceCapture.cpp-Fire_OnAudioData()구현
검증:
- ✅ VBScript에서 이벤트 수신 성공
- ✅ 실시간 오디오 데이터 전송 확인
- ✅ 스레드 간 안전성 검증
구현 상태: 완료
소요 시간: 2시간
완료 날짜: 2025-11-18
주요 기능:
- ✅
AudioCaptureEngine래퍼 클래스 - ✅
ProcessLoopbackCapture통합 - ✅ PID 기반 프로세스별 오디오 캡처
- ✅ 16kHz mono 16-bit PCM 자동 변환
- ✅
IAudioDataCallback콜백 인터페이스 - ✅ 스레드 로컬 COM 초기화 (오디오 스레드용)
캡처 설정:
- Sample Rate: 16kHz (STT 최적화)
- Bit Depth: 16-bit
- Channels: Mono
- Format: PCM
구현 파일:
AudioCaptureEngine.h/.cpp- 캡처 엔진 래퍼ProcessLoopbackCapture.h/.cpp- 실제 WASAPI 캡처
검증:
- ✅ Discord/Chrome PID로 선택적 캡처 성공
- ✅ 16kHz mono PCM 데이터 확인
- ✅ 실시간 스트리밍 정상 작동
구현 상태: 완료
완료 날짜: 2025-11-18
주요 기능:
- ✅
CaptureStateenum 정의Stopped = 0- 중지됨Starting = 1- 시작 중Capturing = 2- 캡처 중Stopping = 3- 중지 중
- ✅ 상태 전환 검증
- ✅ 동시성 안전성 (멀티스레드 모델)
구현 위치:
OnVoiceCapture.h- enum 정의OnVoiceCapture.cpp- 상태 전환 로직
구현 상태: 완료
완료 날짜: 2025-11-18
E2E 테스트 완료: 2025-11-20 🎉
테스트 스크립트:
- ✅
TestOnVoiceEvents.vbs- 이벤트 수신 테스트 - ✅
TestPidCapture.vbs- PID 기반 캡처 테스트 - ✅
TestAudioCaptureEngine.vbs- 엔진 연동 테스트 - ✅
TestCaptureToWav.vbs- WAV 파일 저장 E2E 테스트 🎉 신규!
검증 결과:
✅ COM 객체 생성 성공
✅ StartCapture(PID) → 실제 오디오 캡처 시작
✅ OnVoice_OnAudioData 이벤트 수신 성공
✅ 16kHz mono PCM 데이터 실시간 전송 확인
✅ 상태 전환 확인 (Stopped → Starting → Capturing → Stopping → Stopped)
✅ 모든 테스트 통과!
E2E 테스트 결과 (2025-11-20):
✅ 945개의 오디오 청크 수집 성공
✅ 총 데이터 크기: 323,190 bytes
✅ StopCapture 정상 작동
✅ WAV 파일 저장 완료: capture_Chrome_2025-11-20_오후_25001.wav
✅ 전체 E2E 테스트 통과! 🎉
구현 상태: 완료
완료 날짜: 2025-11-20
상태: ✅ 완료
주요 기능:
- ✅
Fire_OnAudioData에서 상태 체크 먼저 수행 (1차 방어) - ✅
StopCapture에서 상태 먼저 변경 + 200ms 대기 (2차 방어) - ✅
AudioCaptureEngine::Stop에서 콜백 먼저 끊기 + 50ms 대기 (3차 방어) - ✅
ProcessLoopbackCapture::Reset에서 스레드 종료 순서 개선
문제 상황:
Main Thread: StopCapture() → 스레드 Join 대기
오디오 스레드: Fire_OnAudioData() → IDispatch::Invoke 마샬링 대기
❌ 데드락 발생!
해결 방법:
- Fire_OnAudioData:
m_state != Capturing이면 즉시 리턴 - StopCapture: 상태를
Stopping으로 먼저 변경 → 200ms 대기 - AudioCaptureEngine::Stop: 콜백 포인터 먼저
nullptr설정 → 50ms 대기
검증 결과:
✅ StopCapture() 호출 시 데드락 없이 정상 종료
✅ 오디오 스레드가 안전하게 종료
✅ VBScript 이벤트 처리 완료 후 정상 종료
구현 상태: 계획
예상 소요: 18-22시간
난이도: ⭐⭐⭐⭐ 매우 어려움
필요 작업:
- winax 설치 및 재빌드
- Electron Main 프로세스에서 COM 객체 생성
- 이벤트 수신 및 Renderer로 전송
- IPC 통신 구현
- E2E 테스트
구현 상태: 계획
예상 소요: 4-6시간
필요 작업:
- 여러 COM 객체 인스턴스 동시 생성
- Discord/Chrome/Edge 동시 캡처
- 프로세스 격리 검증
구현 상태: 계획
예상 소요: 6-8시간
필요 작업:
- 메모리 누수 검사 (1시간 연속 실행)
- 크래시 시나리오 테스트
- 성능 최적화 (latency < 3초)
- 에러 처리 개선
| 기능 | 계획 | 실제 | 차이 |
|---|---|---|---|
| COM 인터페이스 | 4h | 2h | -2h ✨ |
| COM 이벤트 시스템 | 3h | 2h | -1h ✨ |
| 오디오 캡처 엔진 | 4h | 2h | -2h ✨ |
| 상태 관리 시스템 | 1h | 0.5h | -0.5h ✨ |
| 테스트 및 검증 | 2h | 1.5h | -0.5h ✨ |
| 완료된 기능 합계 | 14h | 8h | -6h 🎉 |
| 전체 누적 | 39h | 18h | -21h 🎉 |
- Electron 연동 (최우선) - COM → Electron Main → Renderer
- 다중 프로세스 지원 - 동시 캡처 기능
- 안정화 - 장시간 실행 테스트 및 최적화
각 기능별 상세 내용은 다음 문서를 참조하세요:
- COM 인터페이스 구현 - IOnVoiceCapture 상세
- 이벤트 시스템 구현 - IConnectionPoint, GIT 프록시
- 캡처 엔진 구현 - AudioCaptureEngine, ProcessLoopbackCapture
- 테스트 및 검증 - VBScript 테스트 스크립트
- 구현 비교 - AudioCapture vs AudioCaptureEngine 차이점 분석
| 마일스톤 | 상태 | 날짜 | 비고 |
|---|---|---|---|
| COM 인터페이스 완성 | ✅ 완료 | 2025-11-18 | IOnVoiceCapture |
| 이벤트 시스템 완성 | ✅ 완료 | 2025-11-18 | IConnectionPoint |
| 캡처 엔진 통합 완성 | ✅ 완료 | 2025-11-18 | AudioCaptureEngine |
| E2E 테스트 성공 | ✅ 완료 | 2025-11-20 | WAV 파일 저장 🎉 |
| Electron 연동 | 📅 예정 | 2025-11-19 | winax |
| MVP 완성 | 📅 예정 | 2025-12-04 | E2E 테스트 |
마지막 업데이트: 2025-11-20
현재 포커스: Electron 연동 준비
다음 마일스톤: Electron Main 프로세스 연동