wav/mp3/opus · 제로샷 클론https://ai3.aiinplanet.com/v1/audio/speech)Authorization: Bearer <API_KEY> (키는 별도 안내)wav/mp3/opus (response_format) · 스트리밍 시 chunkedYOUR_API_KEY 자리에 발급받은 키(sk-aiin-…)를 넣어 사용하세요.
model 값으로 백엔드 분기)| model | 엔진 | 언어/보이스 |
|---|---|---|
kokoro (별칭 tts-1, tts-1-hd) | Kokoro | 영어 — af_*, am_* (예: af_bella, am_adam) |
styletts2 (별칭 aiin-korean) | 아나운서16 (StyleTTS2, 16음성 파인튜닝) | 한국어 16 보이스 — aiin_* (예: aiin_lee_jiwoo) |
vocos-lowadv | 제로샷 (StyleTTS2 + Vocos 디코더) | 한국어 16 보이스(동일) — 깔끔한 음질, timestamps·참조음성 clone 지원 |
보이스 전체 목록: GET /v1/audio/voices?model=kokoro 또는 ?model=styletts2
| 메서드 | 경로 | 설명 | 인증 |
|---|---|---|---|
| POST | /v1/audio/speech | 텍스트 → 음성 (메인 · 스트리밍 · wav/mp3/opus) | Bearer 필수 |
| POST | /v1/audio/clone NEW | 제로샷 클론 — 참조음성(multipart)으로 임의 목소리 합성 (wav/mp3/opus) | 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 NEW | wav(기본, 무손실) · mp3(128k, ~1/3 용량) · opus(64k, ~1/6 용량). stream과 자유 조합 — 아래 출력 형식 참조 |
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) 모드를 쓰세요.
response_format(형식)과 stream(전송)을 자유롭게 조합해 요청하세요. 재생 목적이면 스트리밍, 저장·대역폭 절약이면 mp3/opus를 권장합니다.
| response_format | 용량(3분36초 기준) | content-type | 용도 |
|---|---|---|---|
wav (기본) | ~10.4 MB | audio/wav | 무손실 · 후처리 · 호환성 |
mp3 | ~3.5 MB (1/3) | audio/mpeg | 다운로드 · 저장 (권장) |
opus | ~1.8 MB (1/6) | audio/ogg | 대역폭 최소 |
| 고객 용도 | 요청 본문 | 결과 |
|---|---|---|
| 파일 저장(작게) | {"response_format":"mp3"} | 완성된 mp3 한 번에 |
| 즉시 재생(작게) | {"stream":true,"response_format":"mp3"} | mp3 청크 스트리밍 · 첫음성 ~30ms |
| 즉시 재생(무손실) | {"stream":true} | wav 청크 스트리밍 · 첫음성 ~50ms |
| 정확한 길이 파일 | {"response_format":"wav"} | 완성 wav (정확한 길이 헤더) |
# 스트리밍 + mp3 — 재생하며 받기(첫음성 즉시 + 작은 용량)
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_kim_seoyeon","language":"ko","stream":true,"response_format":"mp3"}' --output out.mp3
# 파일 저장 + opus — 최소 용량
curl https://ai3.aiinplanet.com/v1/audio/speech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"vocos-lowadv","input":"제로샷 음성입니다.","voice":"aiin_yoon_minseo","language":"ko","response_format":"opus"}' --output out.opus
스트리밍에서도 response_format이 그대로 적용됩니다(mp3/opus 청크 실시간 인코딩). 4개 서버(ai1~ai4) 모두 동일하게 동작합니다.
참조 음성(reference_audio)을 업로드하면 그 목소리로 임의 텍스트를 합성합니다(제로샷). multipart/form-data 요청, response_format(wav/mp3/opus) 지원, 한국어 자동 전처리 적용.
| 필드 | 설명 |
|---|---|
input | 합성할 텍스트 (필수) |
reference_audio | 참조 음성 파일 (필수, wav 등) — 이 목소리로 복제 |
model | vocos-lowadv(기본, 제로샷) 또는 styletts2 |
emotion | none(기본) · happy · sad · angry |
speed | 0.5~2.0, 기본 0.95 |
response_format | wav(기본) · mp3 · opus |
# 제로샷 클론 → mp3
curl https://ai3.aiinplanet.com/v1/audio/clone \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "input=복제할 목소리로 이 문장을 읽습니다." \
-F "reference_audio=@myvoice.wav" \
-F "model=vocos-lowadv" \
-F "response_format=mp3" --output cloned.mp3
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 제외).