https://ai3.aiinplanet.com/v1/audio/speech)Authorization: Bearer <API_KEY> (키는 별도 안내)wav 등) · 스트리밍 시 chunkedYOUR_API_KEY 자리에 발급받은 키(sk-aiin-…)를 넣어 사용하세요.
model 값으로 백엔드 분기)| model | 엔진 | 언어/보이스 |
|---|---|---|
kokoro (별칭 tts-1, tts-1-hd) | Kokoro | 영어 — af_*, am_* (예: af_bella, am_adam) |
styletts2 (별칭 aiin-korean) | StyleTTS2 (Aiin Korean) | 한국어 16 보이스 — aiin_* (예: aiin_lee_jiwoo) |
vocos-lowadv | StyleTTS2 + Vocos 디코더 | 한국어 16 보이스(동일) — 더 깔끔한 음질, timestamps 지원 |
보이스 전체 목록: GET /v1/audio/voices?model=kokoro 또는 ?model=styletts2
| 메서드 | 경로 | 설명 | 인증 |
|---|---|---|---|
| POST | /v1/audio/speech | 텍스트 → 음성 (메인, 스트리밍 지원) | Bearer 필수 |
| POST | /v1/audio/transcriptions | 음성 → 텍스트 (ASR, multipart) | Bearer 필수 |
| GET | /v1/audio/voices?model= | 보이스 목록 | Bearer 필수 |
| GET | /v1/models | 모델 목록 | 공개 |
# 영어 (Kokoro) → speech.wav
curl https://ai3.aiinplanet.com/v1/audio/speech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro",
"input": "Hello, this is a test.",
"voice": "af_bella",
"response_format": "wav"
}' --output speech.wav
from openai import OpenAI
client = OpenAI(
base_url="https://ai3.aiinplanet.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.audio.speech.create(
model="kokoro",
voice="af_bella",
input="Hello, this is a test.",
)
resp.stream_to_file("speech.wav")
# 한국어 (StyleTTS2) — model=styletts2, 한국어 보이스
curl https://ai3.aiinplanet.com/v1/audio/speech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "styletts2",
"input": "안녕하세요. 음성 합성 테스트입니다.",
"voice": "aiin_lee_jiwoo",
"language": "ko"
}' --output korean.wav
# 스트리밍 — stream:true, 받는 즉시 재생 (첫 소리 ~0.1초)
curl -N https://ai3.aiinplanet.com/v1/audio/speech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "styletts2",
"input": "첫 문장입니다. 두 번째 문장이 이어서 재생됩니다.",
"voice": "aiin_yoon_minseo",
"stream": true
}' | ffplay -nodisp -autoexit -
| 필드 | 설명 |
|---|---|
model | kokoro/tts-1/tts-1-hd(영어) · styletts2/aiin-korean · vocos-lowadv(한국어) |
input | 합성할 텍스트 (필수). 한국어 엔진은 자동 전처리됨(아래 참조) |
voice | 보이스 ID (/v1/audio/voices 참조). 한국어 기본 aiin_lee_jiwoo |
language | 한국어: ko |
response_format | wav(기본) |
speed | 말하기 속도 0.5~2.0, 기본 1.0 (vocos-lowadv) |
stream NEW | true 시 청크 스트리밍(Transfer-Encoding: chunked) — 문장이 완성되는 대로 전송해 즉시 재생. 생략 시 완성본 WAV 한 번에. 한국어 엔진 전용 |
timestamps | true 시 오디오 대신 JSON(base64 오디오 + 단어/음절 타임스탬프). vocos-lowadv 전용 (stream과 병용 불가) |
한국어 엔진(styletts2·vocos-lowadv) 호출 시 입력 텍스트가 발음 정규화를 자동으로 거칩니다(설정 불필요). 응답 헤더 X-Aiin-Preprocess: 1로 확인됩니다.
| 대상 | 처리 | 예 |
|---|---|---|
| 영문 | 낱자 한글 발음 | JTBC→제이티비씨, MBC→엠비씨 |
| 소수·퍼센트 | 풀어 읽기 | 4.6%→사 점 육 퍼센트, 14.2%→십사 점 이 퍼센트 |
| 숫자·단위 | 한글수 변환 | 90도→구십 도, 2024년→이천이십사 년, $100→백 달러 |
| 한자 | 한글 독음(두음법칙) | 故 최진영→고 최진영, 未來→미래 |
괄호 ( ) | 내용 삭제(안 읽음) | 박해강(지성 분)이→박해강이 |
| 따옴표·기호 | 제거/정리 | '제목'→제목, 가운뎃점 ·→쉼표 |
긴 본문은 문장 단위로 나눠 합성 후 이어붙여 반환합니다(엔진 최적 길이 유지). 시·살·시간만 고유어로 읽습니다(두 시·쉰 살). kokoro(영어)는 전처리 대상이 아닙니다.
용도에 따라 두 가지로 받습니다. 파일로 저장·후처리하려면 기본(whole), 대기 없이 바로 재생하려면 스트리밍을 쓰세요.
| 모드 | 요청 | 응답 | 용도 |
|---|---|---|---|
| 기본(whole) | stream 생략 | 완성된 WAV 한 번에 (정확한 길이 헤더) | 파일 저장·다운로드·후처리 |
| 스트리밍 | stream:true | chunked로 문장 완성 즉시 WAV 청크 전송 | 실시간 재생 (첫 소리 ~0.1초) |
스트리밍은 문장별로 즉시 전송돼 첫 오디오가 ~0.1초에 도착합니다(전체 완성 대기 없음). 응답 헤더 X-Aiin-Stream: 1. 스트리밍 응답을 파일로 저장하면 재생은 되지만 헤더의 총 길이가 미확정이라, 정확한 길이의 파일이 필요하면 기본(whole) 모드를 쓰세요.
model 값에 따라 백엔드가 자동 분기됩니다 — kokoro/tts-1/tts-1-hd → Kokoro(영어), styletts2/vocos-lowadv → StyleTTS2(한국어).stream:true — 위 스트리밍 재생 참조.timestamps:true 제외). --output 또는 SDK 의 stream_to_file 로 저장하세요.aiin_* 보이스는 StyleTTS2/vocos 에서만 동작합니다.401 Unauthorized 가 반환됩니다 (/v1/models 제외).