General TTS API Reference
General TTS API는 텍스트의 음성 변환(Text to Speech)을 지원합니다. General TTS API를 호출할 때 필요한 정보는 다음과 같습니다.
Request
General TTS API의 요청 Syntax, Header, Body는 다음과 같습니다.
Request Syntax
코드 예제 Request Syntax
curl -v
-H "x-api-key: {API Key}" \
-H "Content-Type: application/xml" \
-H "X-TTS-Engine: {Engine}" \
-H "X-TTS-Encoding: {Encoding 방식}" \
-H "X-TTS-Samplerate: {Sample Rate}" \
-d '<speak>
<voice name="Summer">신난다</voice>
</speak>' \
{API Endpoint URL}
메서드 | 요청 URL |
---|---|
POST | {API Endpoint URL} - API 호출 시 필요한 Endpoint 경로 - 카카오 i 클라우드 콘솔 > 도메인 목록 > AI API 인증정보 > API Endpoint URL에서 조회 |
Request Header
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
x-api-key | String | 필수 | {API Key} - 카카오 i 클라우드 콘솔 > 도메인 목록 > AI API 인증정보 > API Key에서 조회 |
Content-Type | String | 필수 | application/xml 로 고정 |
X-TTS-Engine | String | 필수 | {Engine} - 음성 합성 방식 - plain : 사전에 녹음한 음성 데이터를 연결하여 합성- deep : 딥러닝 방식으로 자연스러운 음성 합성 |
X-TTS-Encoding | String | 선택 | {Encoding 방식} - 출력 포맷 - mp3 (기본값), RAWPCM |
X-TTS-Samplerate | Integer | 선택 | {Sample Rate} - 샘플링 속도 (1초당 추출되는 샘플 개수) - 22050 (기본값), 44100 |
Request Body
요청 Body는 SSML 형식의 합성 요청 텍스트를 포함합니다. SSML 지원 사항에 대한 자세한 설명은 SSML 가이드를 참고하시기 바랍니다.
표 SSML 지원 태그 및 어트리뷰트 목록
태그 | 필수 여부 | 속성 | 설명 |
---|---|---|---|
<speak> | 필수 | - | SSML의 루트 요소 - 음성 변환할 전체 텍스트에 적용 |
<voice> | 선택 | name | 음색 설정 - 지정 가능한 음색은 요청의 X-TTS-Engine 값에 따라 상이함 - 지정하지 않으면 Summer(기본값)으로 합성하여 응답 |
<prosody> | 선택 | rate volume | 음성 속도와 음량 지정 |
<break> | 선택 | time | 끊어 읽기 지정 |
<kakao:effect> | 선택 | tone | 존댓말을 반말로 전환해 음성 변환 |
<say-as> | 선택 | interpret-as format | 알파벳 읽기, 고유어/한자어 숫자 발음 등 텍스트 발음법 설정 - 하위에 카카오 커스텀 태그 포함 |
<sub> | 선택 | alias | 텍스트의 발음 직접 입력 |
<audio> | 선택 | clipBegin clipEnd repeatCount repeatDur soundLevel src speed | 합성한 음성에 외부 음원 삽입 |
Sample Code
안내
아래 예제 코드는 모두 음성 합성 결과 바이너리 파일을 test.mp3
으로 저장하도록 요청합니다.
예제 코드 한 문장을 하나의 기본 목소리(Summer)로 합성: Plain Voice / 기본값 (mp3 22k)
curl -v \
-H "x-api-key: {API Key}" \
-H "Content-Type: application/xml" \
-H "X-TTS-Engine: plain" \
-d '<speak>신난다</speak>' \
{API Endpoint URL} > test.mp3
예제 코드 여러 문장을 서로 다른 목소리로 합성: Plain Voice / 기본값 (mp3 22k)
curl -v \
-H "x-api-key: {API Key}" \
-H "Content-Type: application/xml" \
-H "X-TTS-Engine: plain" \
-d '<speak>
<voice name="Summer">안녕하세요. 반가워요.</voice>
<voice name="Roman">잘 지냈어요?</voice>
</speak>' \
{API Endpoint URL} > test.mp3
예제 코드 여러 문장을 서로 다른 목소리로 합성: Deep Voice / 기본값 (mp3 22k)
curl -v \
-H "x-api-key: {API Key}" \
-H "Content-Type: application/xml" \
-H "X-TTS-Engine: deep" \
-d '<speak>
<voice name="Summer">안녕하세요. 반가워요.</voice>
<voice name="Roman">잘 지냈어요?</voice>
</speak>' \
{API Endpoint URL} > test.mp3
Response
General TTS의 응답 Syntax, Header, Body는 다음과 같습니다.
Response Syntax
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 28 Apr 2022 12:27:20 GMT
Content-Type: audio/mpeg
Transfer-Encoding: chunked
Connection: keep-alive
X-Request-Id: {request-id}
X-Tts-Length: {int}
X-Tts-Session-Id: {session-id}
X-Tts-Text: {합성 텍스트의 url 인코딩 결과}
X-Metering-Count: {int}
X-kic-product-id: {int}
Response Header
필드 | 타입 | 설명 |
---|---|---|
Content-Type | String | audio/mpeg 으로 고정 |
X-Request-Id | String | 클라이언트와 공유하는 Request ID |
X-Tts-Length | Integer | 합성한 텍스트의 길이 (글자 수, 공백 및 구두점 포함) |
X-Tts-Session-Id | String | TTS 서버에 의해 부여된 세션 ID |
X-Tts-Text | String | 합성 텍스트의 URL 인코딩 결과 |
X-Metering-Count | Integer | 변환 요청한 텍스트의 글자 수 (공백 및 구두점 포함) 및 요청한 X-TTS-Engine 에 따른 카카오 i 클라우드 상품 ID- 미터링 기준치로 활용 |
X-kic-product-id | String | 카카오 i 클라우드 상품 ID - 요청의 X-TTS-Engine 값에 따라 반환 |
Response Body
요청한 X-TTS-Encoding
형식의 오디오 바이너리 데이터로 응답합니다.
Status Code
응답 코드 | 응답 내용 | 설명 |
---|---|---|
200 | - | API 호출 성공 |
400 | BAD_REQUEST | 요청 Method가 표준이 아닐 경우 |
400 | INVALID_AUDIO_FORMAT | 지원하지 않는 오디오 포맷으로 요청한 경우 |
400 | INVALID_SIGNATURE | 요청 Endpoint 주소의 signature가 잘못된 경우 |
400 | INVALID_SSML | 요청한 SSML이 잘못되었을 경우 |
400 | INVALID_SPEAKER | Plain Voice 에서 지원하지 않는 목소리로 요청한 경우 |
400 | INVALID_TTS_ENGINE | 지원하지 않는 TTS 엔진 유형으로 요청한 경우 |
400 | NO_CONTENT | 비어 있는 요청을 보냈거나, 외부 음원 다운로드에 실패한 경우 |
400 | NOT_MATCHED | 가이드에 존재하지 않는 음성으로 요청한 경우 -ex. voice name="kakao" |
400 | TTS_TEXT_ERROR | 합성 요청 텍스트에 문제가 있는 경우 |
401 | Authentication failed | x-api-key 값이 잘못된 경우 |
403 | Forbidden | x-api-key 헤더가 없는 경우 |
404 | NOT_FOUND | - API가 지원하지 않는 Method로 요청한 경우 - API Endpoint URL이 올바르지 않은 경우 |
405 | Method Not Allowed | 카카오 i 클라우드가 지원하지 않는 Method로 요청한 경우 |
413 | Request Entity Too Large | 요청의 크기가 제한보다 큰 경우 |
415 | Unsupported content type | Content Type 헤더가 없거나 규격에 맞지 않는 경우 |
425 | DOMAIN_NOT_FOUND | 요청한 도메인이 삭제되어 없을 경우 |
425 | DOMAIN_NOT_DEPLOYED | 요청한 도메인이 아직 배포되지 않은 경우 |
429 | Too many Requests | 설정한 한도를 초과해서 요청한 경우 |
503 | INTERNAL_SERVER_ERROR | 예상하지 못한 서버 오류가 발생한 경우 |