# Task: Edge TTS 2인 대화 합성 모듈 개발

## Task ID: task-350
## Project: ThreadAuto (`/home/jay/projects/ThreadAuto/`)
## Priority: HIGH

---

## 배경
NotebookLM으로 보험 팟캐스트 오디오를 생성할 수 있으나, 서버에서 오디오 파일 다운로드가 불가능 (Google lh3 보안). 대신 Edge TTS(무료)로 2인 대화체 오디오를 자동 합성하는 모듈을 만든다.

## 목표
ThreadAuto 프로젝트에 Edge TTS 기반 2인 대화 합성 모듈을 추가한다.

## 상세 요구사항

### 1. 모듈 위치
- `/home/jay/projects/ThreadAuto/audio/edge_tts_dialogue.py`

### 2. 핵심 기능
- 2인 대화 대본(텍스트)을 입력받아 → 2명 음성으로 합성된 하나의 MP3/WAV 파일 출력
- 대본 포맷: 화자별로 구분된 텍스트
  ```
  호스트: 안녕하세요, 오늘은 실손보험 개정안에 대해 알아보겠습니다.
  게스트: 네, 2025년부터 정말 큰 변화가 예정되어 있죠.
  호스트: 맞습니다. 특히 비급여 항목 관리가...
  ```

### 3. 음성 설정
- 호스트(여성): `ko-KR-SunHiNeural`
- 게스트(남성): `ko-KR-InJoonNeural`
- 음성 속도/피치 조절 가능하도록 파라미터화

### 4. 오디오 후처리
- 화자 간 자연스러운 간격 (0.3~0.5초 pause)
- 각 화자별 TTS 생성 → pydub 등으로 하나의 파일로 병합
- 최종 출력: MP3 형식 (Threads 업로드용)
- pydub 사용 시 `pip install pydub` 필요하면 설치

### 5. 인터페이스
```python
async def synthesize_dialogue(
    script: list[dict],  # [{"speaker": "호스트", "text": "..."}, ...]
    output_path: str,
    host_voice: str = "ko-KR-SunHiNeural",
    guest_voice: str = "ko-KR-InJoonNeural",
    host_rate: str = "+0%",
    guest_rate: str = "+0%",
    pause_ms: int = 400,
) -> str:  # returns output file path
```

### 6. CLI 진입점
- `python -m audio.edge_tts_dialogue --script <json_file> --output <output.mp3>`
- script JSON 포맷: `[{"speaker": "호스트", "text": "..."}, ...]`

### 7. 테스트
- `audio/tests/test_edge_tts_dialogue.py`
- 기본 대화 합성 테스트 (짧은 3턴 대화)
- 빈 스크립트 예외 처리
- 음성 속도 파라미터 테스트

## 기술 스택
- `edge-tts` 7.2.7 (이미 설치됨)
- `pydub` (필요 시 설치)
- `ffmpeg` (pydub 의존, 서버에 설치되어 있는지 확인 필요)
- 비동기(async) 기반

## 의존성 확인
- edge-tts: ✅ 설치됨
- ffmpeg: 확인 필요 → `which ffmpeg` 먼저 실행
- pydub: 필요 시 `pip install pydub`

## 품질 기준
- pyright 타입 체크 에러 0건
- 테스트 전체 PASS
- 모듈 200줄 이하 유지 (모듈화 원칙)

## 완료 조건
1. `audio/edge_tts_dialogue.py` 모듈 완성
2. CLI로 실행 가능
3. 테스트 코드 작성 + PASS
4. 간단한 보험 대화 샘플로 실제 MP3 생성 확인
5. 생성된 샘플 MP3를 `/home/jay/projects/ThreadAuto/output/` 에 저장