SSML 활용
카카오 i 플랫폼에서 Bot 시나리오를 작성하면 기본적으로 Text to Speech(TTS) 규칙이 적용됩니다. 하지만 Speech Synthesis Markup Language(이하 SSML)를 사용하면 발음, 속도, 볼륨 등과 같은 언어 처리를 직접 수정하여 자연스럽고 명확한 음성 출력으로 변환할 수 있습니다.
SSML은 사전에 정의된 Tag 집합을 사용하여 합성기로 전달되는 일반 텍스트를 보완하는 방식으로 작동하며, 다음의 기능을 수행할 수 있습니다.
표SSML 활용 기능구분 | 설명 |
---|---|
제공 기능 | - 볼륨, 속도, 음성(목소리) 변경 - 조사 변경 처리 - 상황별로 특이하게 발음되는 언어 처리(영화명, 성경 등) - 효과음 합성 |
TTS 일반 규칙
일반적인 TTS의 규칙은 다음과 같습니다.
- 한글 낱자(ㄱ, ㄴ, ㅏ, ㅑ, …)가 입력되는 경우 발음하지 않음
- 한자는 발음하지 않음
- 영어는 한글 독음으로 읽음. ex) ride → 라이드
- 괄호(
( )
,【 】
,[ ]
) 내부의 내용은 제거되어 발음하지 않음- 7/18, 2017/07/05, 2017/7/5, 2017.07.05, 2017.7.5 과 같이 날짜로 판단되는 경우 날짜로 읽음
- 23:34:56 과 같이 시간으로 판단되는 경우 “이십삼시 삼십사분 오십육초”의 형태로 읽음
- 영어 뒤의 숫자는 영어로 읽고, 한글 뒤의 숫자는 한글로 읽음
- 숫자 사이의
-
는 “다시”로 읽음
본 문서에서 설명하는 SSML은 W3C에서 제공하는 SSML 표준을 준수합니다. 해당 표준에 정의되지 않았지만 반드시 필요한 필수 요소의 경우에는 카카오 Custom Tag와 Attribute로 제공하고 있습니다.
주의
해당 Tag들을 사용할 때는 Attribute 주위에 큰따옴표(“
,”
)를 사용해야 합니다. 예를 들어<voice name="Ryan"/>
은 잘 구성된 유효한 요소이지만,<voice name=Ryan/>
과 같이 SSML에서 큰따옴표로 묶지 않을 시에는 인식하지 못할 수 있습니다.
SSML Tag 종류
표SSML Tag 종류Tag | 설명 |
---|---|
Speak | 모든 음성에 적용되는 기본 Tag |
Voice | 음성 목소리 변경 |
Prosody | 음성의 속도와 볼륨 변경 |
Break | 의도적으로 음성을 잠시 멈추기 위해 사용 |
Kakao:Effect | 카카오 Custom Tag로 음성의 말투를 변경할 수 있음 |
Say-as | 날짜/시간 등 축약형 표현이나 전화번호, 스펠링과 같이 자주 사용하는 특수 표현을 해석하여 상황에 맞게 읽어줌 |
Sub | 일반적인 발음이 아닌 특별한 발음을 지정해야 할 때 사용 |
Audio | 외부 음원을 음성처럼 제공 |
SSML Tag 사용 시 주의사항
Escape 처리
답변에 포함된 특수 문자를 SSML Tag와 같이 사용할 경우, 답변에 Escape 처리를 해야 합니다. 예시는 다음과 같습니다.
코드예제Escape 처리 예시
<speak>
이전에 듣던, <say-as interpret-as="kakao:none">송은이&김숙 비밀보장</say-as>, 이어서 들려줄까요?
</speak>
공백 처리
태그 안의 글자 공백은 유지되지만, 두 개 태그 사이에 공백 문자만 있는 경우 해당 공백은 무시됩니다.
코드예제공백 처리 예시
1. 두 개 태그 사이의 공백 무시
<speak>
<say-as interpret-as=\"kakao:none\">내일</say-as> <say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>
2. 공백 유지
<speak>
<say-as interpret-as=\"kakao:none\">내일 </say-as><say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>
3.'은' 뒤의 공백 유지
<speak>
<say-as interpret-as=\"kakao:none\">내일</say-as>은 <say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>
문단 처리
아래의 문단 처리 예시와 같이, 한 문장 안에서 문단을 변경하지 않아야 합니다.
코드예제문단 처리 예시
<speak>
<say-as interpret-as=\"kakao:none\">내일</say-as>
은
<say-as interpret-as=\"kakao:none\">제주특별자치도</say-as>
</speak>
관련 문서
개발 프로세스(Voice) Kakao i Skill Skill API 레퍼런스 Kakao i Skill 음성 답변 가이드 Kakao i Skill SSML 활용 가이드 Kakao i Skill