# BIMEC 페르소나 음성 PoC - 2026-06-27 ## 목적 BIMEC/Vignette 상담 시뮬레이션에서 내담자 페르소나가 텍스트만이 아니라 목소리의 정서 변화까지 표현하도록 한다. 1차 목표는 P1 서연 음성을 우울·무기력 상태에서 경계/불안, 라포 형성, 조심스러운 회복감까지 한 목소리 계열로 샘플링하는 것이다. ## 로컬 모델 조사 결과 - 채택 후보: 로컬 ComfyUI `Higgs Audio v3 TTS` 서버. - 위치: `C:\Users\encep\Tools\ComfyUI_windows_portable\ComfyUI\custom_nodes\Higgs_v3-TTS-ComfyUI`. - 사용: 서버 래퍼(`higgs_server.py`)는 기존 reference voice를 내장하므로 BIMEC 페르소나 제작에는 쓰지 않는다. 스크립트가 Higgs 런타임을 직접 로드해 무참조 synthetic seed voice를 먼저 만든다. - 장점: 한국어 zero-shot voice cloning, inline emotion/style/prosody/SFX 태그, 속도·피치·pause 제어. - 제약: 약 9~11GB VRAM 단독 여유. SUPIR/Qwen 등 GPU 작업과 동시 실행 금지. - 라이선스/권리: Higgs Audio v3는 연구·비상업 라이선스 계열로 확인됨. 상업 서비스 탑재 전 라이선스 확정이 필요하다. ## 금지 원칙 - 실존 인물·성우·강의 음성 reference로 BIMEC 서비스 페르소나를 만들지 않는다. - 기존 로컬 `clean_ref_seg1.wav`, `kangsujin_*`, GPT-SoVITS ref 등은 이 작업에서 금지한다. - "그 급의 표현력"은 목표로 삼되, 음색은 무참조 synthetic seed 또는 명시 동의·라이선스가 확보된 음성만 사용한다. ## P1 서연 음성 방향 - 기본 음색: 청소년 여성으로 들리되 과도하게 아동화하지 않는다. - 초기 상태: 떨림, 낮은 에너지, 말끝 흐림, 긴 pause. - 경계 상태: 비밀 보장 걱정 때문에 말이 빨라지고 톤높이가 올라간다. - 라포 이후: 속도가 조금 안정되고 숨이 덜 막힌다. - 회복감: 밝아져도 과장 금지. "씩씩함"이 아니라 "조금 괜찮아짐" 수준. ## 산출물 - 생성 스크립트: `docs/voice-art/scripts/generate_p1_seoyeon_higgs_samples.py` - 샘플 폴더: `docs/voice-art/p1-seoyeon-higgs-v3-20260627/` - 생성 방식: Higgs 무참조 생성으로 `_synthetic_seed_no_external_reference`를 만들고, 그 synthetic seed만 재참조한다. ## 서비스 연결 현황 - 연결 방식: `VoiceService.synthesize_stream`에 개발용 P1 sample TTS provider를 추가했다. - 활성화: `ENVIRONMENT=dev`에서만 `VIGNETTE_VOICE_POC_SAMPLE_TTS=true`로 켠다. - 대상: P1 `soft-young-fem` preset만 샘플 provider를 사용한다. P2/P3와 일반 preset은 기존 OpenAI TTS 경로를 유지한다. - 동작: AI가 생성한 내담자 응답 텍스트를 보고 우울·피로·불안·라포·회복 샘플 중 가장 가까운 MP3를 `/voice/ws` binary TTS chunk로 재생한다. - 범위: 이 provider는 TTS 출력만 바꾼다. 실제 마이크 입력/STT 캐스케이드는 여전히 `OPENAI_API_KEY`가 있어야 가용하다. - 한계: 현재 PoC는 답변 문장을 그대로 새 합성하지 않고 정서 샘플을 재생한다. 상업 라이선스·권리정책이 닫히기 전에는 프로덕션 배포 금지. ## 검증 - 단위/계약: `python -m unittest app.test_voice_service app.test_voice_ws app.test_session_turn_persistence app.test_runtime_policy` 42 tests OK. - 실제 자산 스트림: P1 회복감 문장 기준 provider `p1-sample-poc`, 20 chunks, 78,573 bytes. - 서비스 smoke: dev-login → P1 session → `/voice/ws` `text_turn` → reply/state/tts_end + binary 20 chunks 수신 확인. ## 서비스 연결 전 게이트 - 소유자 결정: Higgs 상업 라이선스 확보 또는 배포 가능한 대체 모델 선정. - 음원 권리: 실제 reference voice를 쓰는 경우 P1/P2/P3 각 페르소나용 동의 받은 reference voice만 허용. - 임상 검수: 감정 표현이 상담 훈련을 방해할 정도로 과장하지 않는지 확인. - 기술 검수: 샘플 음성 duration, loudness, silence, style token drift, browser playback 확인.