SSML(Speech Synthesis Markup Language) 가이드
1. SSML 소개
SSML(Speech Synthesis Markup Language)은 W3C의 Voice Browser Working Group에서 권장하는 XML 기반 마크업 언어로, 음성 합성 애플리케이션을 위해 설계되었습니다. SSML은 웹 및 기타 애플리케이션에서 합성 음성의 생성을 지원하기 위한 풍부한 XML 기반 마크업 언어를 제공합니다.
SSML의 핵심 역할은 합성 가능한 콘텐츠의 작성자에게 발음, 볼륨, 피치, 속도 등과 같은 음성 출력의 측면을 제어하는 표준 방법을 제공하는 것입니다. 이를 통해 다양한 합성 가능한 플랫폼에서 일관된 음성 출력을 제어할 수 있습니다.
2. SSML 문서 구조
2.1 기본 구조
SSML 문서는 다음과 같은 기본 구조를 가집니다:
<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ko-KR">
<!-- SSML 콘텐츠 -->
</speak>
speak
요소는 모든 SSML 문서에 필요한 루트 요소입니다.version
속성은 SSML 버전을 지정합니다.xmlns
속성은 XML 네임스페이스를 지정합니다.xml:lang
속성은 기본 언어를 지정합니다(예: "ko-KR", "en-US" 등).
2.2 메타데이터
메타데이터를 포함하여 문서에 관한 정보를 제공할 수 있습니다:
<speak xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:dc="http://purl.org/dc/elements/1.1/"
version="1.0">
<metadata>
<dc:title xml:lang="ko">음성 메뉴: 레벨 1</dc:title>
</metadata>
<!-- 콘텐츠 -->
</speak>
3. 주요 SSML 요소
3.1 <voice>
요소
특정 음성, 성별, 나이 등을 지정하여 텍스트를 읽는 방식을 제어합니다.
<voice name="철수" gender="male" age="25">
안녕하세요, 반갑습니다.
</voice>
3.2 <break>
요소
텍스트 사이에 휴식 또는 일시 중지를 삽입합니다.
지금부터 시작합니다.<break time="1s"/>시작!
시간 값은 밀리초(ms) 또는 초(s)로 지정할 수 있으며, 다음과 같은 강도 값도 사용할 수 있습니다:
none
: 휴식 없음x-weak
: 매우 약한 휴식weak
: 약한 휴식medium
: 중간 휴식 (기본값)strong
: 강한 휴식x-strong
: 매우 강한 휴식
3.3 <emphasis>
요소
특정 단어나 구를 강조합니다.
<emphasis level="strong">중요한</emphasis> 정보입니다.
강조 수준:
none
: 강조 없음reduced
: 줄어든 강조moderate
: 중간 강조strong
: 강한 강조
3.4 <say-as>
요소
텍스트를 어떻게 읽을지 해석 방법을 지정합니다.
<say-as interpret-as="digits">12345</say-as>
일반적인 interpret-as
값:
digits
: 숫자를 개별 숫자로 읽음 (예: "1, 2, 3, 4, 5")cardinal
: 숫자를 기수로 읽음 (예: "백이십삼")ordinal
: 숫자를 서수로 읽음 (예: "첫 번째", "두 번째")characters
: 문자 하나씩 읽음date
: 날짜로 읽음 (format 속성으로 형식 지정 가능)time
: 시간으로 읽음telephone
: 전화번호로 읽음
3.5 <phoneme>
요소
발음을 제어합니다.
<phoneme alphabet="ipa" ph="tɛkst">텍스트</phoneme>
alphabet
: 음성 알파벳 유형 (ipa, x-sampa 등)ph
: 발음 표기
3.6 <sub>
요소
텍스트를 다른 텍스트로 대체합니다.
<sub alias="월드 와이드 웹 컨소시엄">W3C</sub>
3.7 <p>
및 <s>
요소
단락과 문장을 정의합니다.
<p>
<s>첫 번째 문장입니다.</s>
<s>두 번째 문장입니다.</s>
</p>
3.8 <audio>
요소
합성된 음성과 함께 오디오 파일을 삽입합니다.
<audio src="https://example.com/sound.mp3">
오디오를 재생할 수 없는 경우 이 텍스트가 사용됩니다.
</audio>
3.9 <prosody>
요소
음성의 피치, 속도, 볼륨 등을 조절합니다.
<prosody rate="slow" pitch="low" volume="loud">
천천히, 낮은 음성으로, 큰 소리로 말합니다.
</prosody>
속성 값:
rate
: x-slow, slow, medium, fast, x-fast 또는 백분율(예: 50%, 200%)pitch
: x-low, low, medium, high, x-high 또는 상대적 변화(예: +10%, -5%)volume
: silent, x-soft, soft, medium, loud, x-loud 또는 상대적 변화(예: +6dB)
3.10 <mark>
요소
이벤트를 생성하는 표시를 텍스트에 삽입합니다.
시작 <mark name="point1"/> 여기서 표시됩니다.
4. 언어 처리
4.1 <lang>
요소
특정 텍스트 블록의 언어를 변경합니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ko-KR">
한국어로 말하다가 <lang xml:lang="en-US">English words</lang> 영어 단어를 섞어 말합니다.
</speak>
5. 특수 문자 처리
SSML에서는 XML 특수 문자를 이스케이프 처리해야 합니다:
&
→&
<
→<
>
→>
"
→"
'
→'
예시:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ko-KR">
녹색 & 노란색이 제 좋아하는 색상입니다.
</speak>
6. 플랫폼별 확장
각 플랫폼(Google, Amazon, Microsoft 등)은 SSML의 자체 확장을 구현할 수 있습니다. 일부 플랫폼별 태그 예시:
6.1 Amazon Alexa 확장
<amazon:emotion name="excited" intensity="high">
정말 신나는 소식입니다!
</amazon:emotion>
6.2 Google 확장
<google:effect name="whispered">
이것은 비밀입니다.
</google:effect>
7. 사용 예시
7.1 기본 예시
<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ko-KR">
<voice name="여자">
안녕하세요, <break time="300ms"/>반갑습니다.
<emphasis level="strong">SSML</emphasis>은 음성 합성을 위한 마크업 언어입니다.
</voice>
</speak>
7.2 복잡한 예시
<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="ko-KR">
<p>
<voice name="여자" gender="female" age="30">
<prosody rate="slow" pitch="+10%">
전화번호는 <say-as interpret-as="telephone">010-1234-5678</say-as>입니다.
</prosody>
<break time="500ms"/>
<s>마감일은 <say-as interpret-as="date" format="ymd">2025-05-14</say-as>입니다.</s>
</voice>
</p>
<p>
<voice name="남자" gender="male" age="40">
자세한 내용은 <sub alias="월드 와이드 웹 컨소시엄">W3C</sub> 웹사이트를 참조하세요.
</voice>
</p>
</speak>
8. 주의사항
- SSML 태그는 플랫폼마다 지원하는 범위가 다를 수 있습니다.
- 일부 고급 기능(예: 음소, 운율)은 전문 지식이 필요할 수 있습니다.
- 오디오 파일 삽입 시 파일 형식, 크기, URL 프로토콜 등에 제한이 있을 수 있습니다.
- 휴식 시간(break)이 너무 길면 일부 시스템에서 제한될 수 있습니다(보통 10초 이내).
- SSML 문서는 올바른 XML 형식을 따라야 합니다.