Pure-Python alternative to melo-test/ when the MeloTTS native build chain (MeCab/Rust/fugashi/mecab-python3/tokenizers) refuses to install. - edge-test/server.py: FastAPI + edge_tts.Communicate.stream() -> mp3, 9 Korean Neural voices, rate/pitch knobs. - edge-test/index.html: voice selector + rate/pitch + presets + audio. - requirements.txt: edge-tts + fastapi + uvicorn. No native deps. - README: comparison table vs MeloTTS, setup, caveat that edge-tts is an unofficial wrapper over the Edge "Read Aloud" endpoint. Default port 7861 so it coexists with melo-test/ (7860). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
94 lines
3.3 KiB
Markdown
94 lines
3.3 KiB
Markdown
# Microsoft Edge TTS — 한국어 테스트 환경
|
|
|
|
MeloTTS 의 빌드 의존성(MeCab, Rust, fugashi, mecab-python3, tokenizers)이
|
|
계속 깨질 때 사용할 수 있는 **즉시 실행 가능한 대안**.
|
|
|
|
내부적으로 Microsoft Edge 브라우저의 "소리내어 읽기" 가 쓰는 Azure Neural Voice
|
|
엔드포인트를 호출합니다(공식 SDK 가 아닌 커뮤니티 라이브러리 `edge-tts`).
|
|
|
|
## 왜 이걸 먼저 테스트해보는 게 좋은가
|
|
|
|
| 항목 | MeloTTS-Korean | Edge TTS |
|
|
| --- | --- | --- |
|
|
| 설치 시간 | 5~15분 + 모델 가중치 수백 MB | 30초, 의존성 4개 |
|
|
| 네이티브 빌드 | MeCab + Rust + PyTorch | 없음 |
|
|
| Python 버전 | 3.10/3.11 강제 | 3.9+ 어디서나 |
|
|
| 자연스러움(한국어) | 좋음 | Azure Neural 그대로, 매우 자연 |
|
|
| 비용 | 무료(MIT) | 무료(비공식 Edge 엔드포인트) |
|
|
| 지연 | 첫 호출 후 ms 단위 | 200~500ms 정도(네트워크) |
|
|
| 보이스 수 | 1 (KR) | 9 (남/여/시니어/다국어) |
|
|
| 안정성 위험 | 자가호스팅 = 본인 책임 | MS 가 정책 바꾸면 끊길 수 있음 |
|
|
|
|
테스트 우선순위로는 **Edge TTS 를 먼저 들어보고**, 마음에 들면 그대로 채택,
|
|
"오프라인/내부망/완전 자체 호스팅" 요구가 있으면 MeloTTS Docker 로 진행하는 흐름을 권합니다.
|
|
|
|
## 설치 & 실행
|
|
|
|
```bash
|
|
# 1. 가상환경
|
|
python -m venv .venv
|
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
|
|
|
# 2. 의존성 (30초)
|
|
pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
|
|
# 3. 서버
|
|
python server.py
|
|
# 포트 변경: PORT=8001 python server.py (기본 7861)
|
|
```
|
|
|
|
브라우저: `http://localhost:7861`
|
|
|
|
> MeloTTS 테스트(`melo-test/`, 포트 7860)와 동시에 띄울 수 있도록 기본 포트가 다릅니다.
|
|
|
|
## API
|
|
|
|
```http
|
|
POST /tts
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"text": "안녕하세요.",
|
|
"voice": "ko-KR-SunHiNeural",
|
|
"rate": "+0%",
|
|
"pitch": "+0Hz"
|
|
}
|
|
```
|
|
|
|
응답: `audio/mpeg` (MP3). 헤더 `X-Synth-Ms` 에 합성 ms.
|
|
|
|
```http
|
|
GET /voices
|
|
```
|
|
|
|
응답: 한국어 보이스 목록(JSON).
|
|
|
|
## 사용 가능한 한국어 보이스
|
|
|
|
- `ko-KR-SunHiNeural` — 여, 차분 (디폴트)
|
|
- `ko-KR-InJoonNeural` — 남, 표준
|
|
- `ko-KR-BongJinNeural` — 남, 중후
|
|
- `ko-KR-GookMinNeural` — 남, 친근
|
|
- `ko-KR-HyunsuMultilingualNeural` — 남, 다국어
|
|
- `ko-KR-JiMinNeural` — 여, 밝음
|
|
- `ko-KR-SeoHyeonNeural` — 여, 차분
|
|
- `ko-KR-SoonBokNeural` — 여, 시니어 여성
|
|
- `ko-KR-YuJinNeural` — 여, 표준
|
|
|
|
## 주의
|
|
|
|
- `edge-tts` 는 비공식 라이브러리입니다. Microsoft 가 엔드포인트를 바꾸면 끊깁니다(과거 수년간은 안정적이었음).
|
|
- 운영 안정성/SLA 가 필요하면 Azure Cognitive Services(유료)로 같은 보이스를 정식 사용할 수 있습니다 — 코드 거의 동일.
|
|
- 봇에 붙일 때 디스코드 메시지 전체를 다 보내면 텍스트가 외부 서비스에 흘러갑니다. 사내·민감 채널엔 부적합.
|
|
|
|
## 디스코드 봇 연동 (테스트 성공 후)
|
|
|
|
`src/utils/tts/Edge.ts` 를 추가하고 `src/classes/TTSClient.ts` 의 import 교체.
|
|
`textToSpeech(text): Promise<Buffer>` 시그니처는 `Chzzk.ts` / `Google.ts` 와 동일하게.
|
|
|
|
## 참고
|
|
|
|
- edge-tts (Python): https://github.com/rany2/edge-tts
|
|
- Azure Neural Voices 목록: https://learn.microsoft.com/azure/ai-services/speech-service/language-support
|