SSML 문서 구조 및 이벤트
입력 텍스트가 있는 SSML(Speech Synthesis Markup Language)은 텍스트 음성 변환 출력의 구조, 콘텐츠 및 기타 특성을 결정합니다. 예를 들어 SSML을 사용하여 단락, 문장, 중단, 일시 중지 또는 무음을 정의할 수 있습니다. 나중에 애플리케이션에서 처리할 수 있는 책갈피 또는 viseme와 같은 이벤트 태그를 사용하여 텍스트를 래핑할 수 있습니다.
SSML 문서에서 요소를 구성하는 방법에 대한 자세한 내용은 아래 섹션을 참조하세요.
참고 항목
Azure AI Speech 신경망(비 HD) 음성 외에도 Azure AI Speech HD(고화질) 음성 및 Azure OpenAI 신경망(HD 및 비 HD) 음성을 사용할 수도 있습니다. HD 음성은 보다 다양한 시나리오에 더 높은 품질을 제공합니다.
일부 음성은 모든 SSML(Speech Synthesis Markup Language) 태그를 지원하지 않습니다. 여기에는 HD 음성을 음성으로 변환하는 신경망 텍스트, 개인 음성 및 포함된 음성이 포함됩니다.
- Azure AI Speech HD(고화질) 음성의 경우 여기에서 SSML 지원을 확인하세요.
- 개인 음성의 경우 여기에서 SSML 지원을 찾을 수 있습니다.
- 포함된 음성의 경우 여기에서 SSML 지원을 확인하세요.
문서 구조
SSML의 Speech Service 구현은 World Wide Web 컨소시엄의 Speech Synthesis Markup Language 버전 1.0을 기반으로 합니다. Speech에서 지원하는 요소는 W3C 표준과 다를 수 있습니다.
각 SSML 문서는 SSML 요소(또는 태그)를 사용하여 만들어집니다. 이러한 요소는 음성, 스타일, 음높이, 운율, 음량 등을 조정하는 데 사용됩니다.
SSML 문서의 기본 구조 및 구문의 하위 집합은 다음과 같습니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
<voice name="string" effect="string">
<audio src="string"></audio>
<bookmark mark="string"/>
<break strength="string" time="string" />
<emphasis level="value"></emphasis>
<lang xml:lang="string"></lang>
<lexicon uri="string"/>
<math xmlns="http://www.w3.org/1998/Math/MathML"></math>
<mstts:audioduration value="string"/>
<mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
<mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
<mstts:silence type="string" value="string"/>
<mstts:viseme type="string"/>
<p></p>
<phoneme alphabet="string" ph="string"></phoneme>
<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
<s></s>
<say-as interpret-as="string" format="string" detail="string"></say-as>
<sub alias="string"></sub>
</voice>
</speak>
각 요소에 허용되는 콘텐츠의 몇 가지 예는 다음 목록에서 설명하고 있습니다.
audio
:audio
요소의 본문은 오디오 파일을 사용할 수 없거나 재생할 수 없는 경우 음성으로 표시되는 일반 텍스트 또는 SSML 태그를 포함할 수 있습니다.audio
요소에는 텍스트와audio
,break
,p
,s
,phoneme
,prosody
,say-as
및sub
요소도 포함될 수 있습니다.bookmark
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.break
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.emphasis
: 이 요소는 텍스트 및audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
및sub
요소를 포함할 수 있습니다.lang
: 이 요소는mstts:backgroundaudio
,voice
및speak
를 제외한 다른 모든 요소를 포함할 수 있습니다.lexicon
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.math
: 이 요소는 텍스트 및 MathML 요소만 포함할 수 있습니다.mstts:audioduration
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.mstts:backgroundaudio
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.mstts:embedding
: 이 요소는 텍스트 및audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
및sub
요소를 포함할 수 있습니다.mstts:express-as
: 이 요소는 텍스트 및audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
및sub
요소를 포함할 수 있습니다.mstts:silence
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.mstts:viseme
: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.p
: 이 요소는 텍스트 및audio
,break
,phoneme
,prosody
,say-as
,sub
,mstts:express-as
및s
요소를 포함할 수 있습니다.phoneme
: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.prosody
: 이 요소는 텍스트 및audio
,break
,p
,phoneme
,prosody
,say-as
,sub
및s
요소를 포함할 수 있습니다.s
: 이 요소는 텍스트 및audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
및sub
요소를 포함할 수 있습니다.say-as
: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.sub
: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.speak
: SSML 문서의 루트 요소입니다. 이 요소는mstts:backgroundaudio
및voice
요소를 포함할 수 있습니다.voice
: 이 요소는mstts:backgroundaudio
및speak
를 제외한 다른 모든 요소를 포함할 수 있습니다.
Speech Service는 문장이 물음표로 끝날 때 마침표 뒤에서 잠시 쉬거나 올바른 억양을 사용하는 등 구두점을 적절하게 자동으로 처리합니다.
특수 문자
SSML 요소의 값 또는 텍스트 내에서 &
, <
및 >
문자를 사용하려면 엔터티 형식을 사용해야 합니다. 특히 &
대신 &
를 사용하고, <
대신 <
를 사용하고, >
대신 >
를 사용해야 합니다. 그렇지 않으면 SSML이 올바르게 구문 분석되지 않습니다.
예를 들어 green & yellow
대신 green & yellow
를 지정합니다. 다음 SSML은 예상대로 구문 분석됩니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
My favorite colors are green & yellow.
</voice>
</speak>
따옴표, 아포스트로피 및 대괄호와 같은 특수 문자는 이스케이프해야 합니다. 자세한 내용은 XML(Extensible Markup Language) 1.0: 부록 D를 참조하세요.
특성 값은 큰따옴표 또는 작은따옴표로 묶어야 합니다. 예를 들어 <prosody volume="90">
및 <prosody volume='90'>
은 올바른 형식의 유효한 요소이지만 <prosody volume=90>
은 인식되지 않습니다.
speak 루트 요소
speak
요소에는 버전, 언어 및 태그 어휘 정의와 같은 정보가 포함됩니다. speak
요소는 모든 SSML 문서에 필요한 루트 요소입니다. 언어가 요소 내부와 같은 다른 곳에서 조정되었는지 여부에 관계없이 lang
요소 내에서 speak
을(를) 기본 언어로 지정해야 합니다.
speak
요소의 구문은 다음과 같습니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
attribute | 설명 | 필수 또는 선택 사항 |
---|---|---|
version |
문서 태그를 해석하는 데 사용되는 SSML 사양의 버전을 나타냅니다. 현재 버전은 "1.0"입니다. | Required |
xml:lang |
루트 문서의 언어입니다. 값은 en (영어)과 같은 언어 코드 또는 en-US (영어 - 미국)와 같은 로캘을 포함할 수 있습니다. |
Required |
xmlns |
SSML 문서의 태그 어휘(요소 형식 및 특성 이름)를 정의하는 문서에 대한 URI입니다. 현재 URI는 "http://www.w3.org/2001/10/synthesis"입니다. | Required |
speak
요소는 하나 이상의 voice 요소를 포함해야 합니다.
speak 예제
speak
요소의 특성에 지원되는 값은 이전에 설명되었습니다.
단일 음성 예
이 예제에서는 en-US-AvaNeural
음성을 사용합니다. 더 많은 예제는 voice 예제를 참조하세요.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
This is the text that is spoken.
</voice>
</speak>
중단 추가
break
요소를 사용하여 단어 사이의 중단 또는 일시 중지의 기본 동작을 재정의합니다. 그렇지 않으면 Speech Service에서 일시 중지를 자동으로 삽입합니다.
break
요소의 특성 사용법은 다음 표에 설명되어 있습니다.
attribute | 설명 | 필수 또는 선택 사항 |
---|---|---|
strength |
다음 값 중 하나를 사용하는 일시 중지 상대 기간입니다.
|
선택 사항 |
time |
초(예: 2s ) 또는 밀리초(예: 500ms ) 단위의 일시 중지 절대 기간입니다. 유효한 값의 범위는 0~20,000밀리초입니다. 지원되는 최댓값보다 큰 값을 설정하면 서비스에서 20000ms 를 사용합니다. time 특성이 설정되면 strength 특성이 무시됩니다. |
선택 사항 |
strength
특성에 대한 자세한 내용은 다음과 같습니다.
강도 | 상대 기간 |
---|---|
x-weak | 250ms |
Weak | 500ms |
중간 | 750ms |
강력 | 1,000밀리초 |
x-strong | 1,250ms |
중단 예제
break
요소의 특성에 지원되는 값은 이전에 설명되었습니다. 다음 세 가지 방법은 모두 750ms 중단을 추가합니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
Welcome <break /> to text to speech.
Welcome <break strength="medium" /> to text to speech.
Welcome <break time="750ms" /> to text to speech.
</voice>
</speak>
무언 추가
mstts:silence
요소를 사용하여 일시 중지를 텍스트 앞이나 뒤에 또는 인접한 두 문장 사이에 삽입합니다.
mstts:silence
와 break
의 차이점 중 하나는 break
요소를 텍스트의 아무 곳에나 삽입할 수 있다는 것입니다. 무음은 입력 텍스트의 시작이나 끝 또는 인접한 두 문장의 경계에서만 작동합니다.
silence 설정은 바깥쪽 voice
요소 내의 모든 입력 텍스트에 적용됩니다. silence 설정을 다시 초기화하거나 변경하려면 동일한 음성 또는 다른 음성이 있는 새 voice
요소를 사용해야 합니다.
mstts:silence
요소의 특성 사용법은 다음 표에 설명되어 있습니다.
attribute | 설명 | 필수 또는 선택 사항 |
---|---|---|
type |
무음을 추가할 위치 및 방법을 지정합니다. 다음 무음 형식이 지원됩니다.
절대 무음 형식( -exact 접미사 포함)은 다른 자연 선행 또는 후행 무음을 대체합니다. 절대 무음 형식은 해당 절대 이외 형식보다 우선합니다. 예를 들어 Leading 및 Leading-exact 형식을 모두 설정하면 Leading-exact 형식이 적용됩니다. WordBoundary 이벤트는 Comma-exact , Semicolon-exact , 또는 Enumerationcomma-exact 을(를) 비롯한 문장 부호 관련 무음 설정보다 우선합니다. WordBoundary 이벤트 및 문장 부호 관련 silence 설정을 모두 사용하는 경우 문장 부호 관련 silence 설정이 적용되지 않습니다. |
Required |
Value |
초(예: 2s ) 또는 밀리초(예: 500ms ) 단위의 일시 중지 기간입니다. 유효한 값의 범위는 0~20,000밀리초입니다. 지원되는 최댓값보다 큰 값을 설정하면 서비스에서 20000ms 를 사용합니다. |
Required |
mstts silence 예제
mstts:silence
요소의 특성에 지원되는 값은 이전에 설명되었습니다.
다음 예제에서 mstts:silence
는 200밀리초의 무음을 두 문장 사이에 추가하는 데 사용됩니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:silence type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>
이 예제에서 mstts:silence
는 쉼표에서 50ms의 무음을 추가하고, 세미콜론에서 100ms의 무음을 추가하고, 열거형 쉼표에서 150ms의 무음을 추가하는 데 사용됩니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>
단락 및 문장 지정
p
및 s
요소는 각각 단락과 문장을 나타내는 데 사용됩니다. 이러한 요소가 없으면 Speech Service에서 SSML 문서의 구조를 자동으로 결정합니다.
단락 및 문장 예제
다음 예제에서는 각각 문장을 포함하는 두 개의 단락을 정의합니다. 두 번째 단락에서 문장 구조가 SSML 문서에 정의되지 않았으므로 Speech Service는 문장 구조를 자동으로 결정합니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<p>
<s>Introducing the sentence element.</s>
<s>Used to mark individual sentences.</s>
</p>
<p>
Another simple paragraph.
Sentence structure in this paragraph is not explicitly marked.
</p>
</voice>
</speak>
bookmark 요소
SSML의 bookmark
요소를 사용하여 텍스트 또는 태그 시퀀스의 특정 위치를 참조할 수 있습니다. 그런 다음, Speech SDK를 사용하고 BookmarkReached
이벤트를 구독하여 오디오 스트림에서 각 표식의 오프셋을 가져옵니다. bookmark
요소는 말하지 않습니다. 자세한 내용은 신시사이저 이벤트 구독을 참조하세요.
bookmark
요소의 특성 사용법은 다음 표에 설명되어 있습니다.
attribute | 설명 | 필수 또는 선택 사항 |
---|---|---|
mark |
bookmark 요소의 참조 텍스트입니다. |
Required |
책갈피 예제
bookmark
요소의 특성에 지원되는 값은 이전에 설명되었습니다.
예를 들어 다음 코드 조각에서 각 flower 단어의 시간 오프셋을 알려고 할 수 있습니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
</voice>
</speak>
Viseme 요소
viseme은 음성 언어로 된 음소의 시각적 설명입니다. 사람이 말하는 동안 얼굴과 입의 위치를 정의합니다. SSML의 mstts:viseme
요소를 사용하여 Viseme 출력을 요청할 수 있습니다. 자세한 내용은 Viseme으로 얼굴 위치 가져오기를 참조하세요.
viseme 설정은 바깥쪽 voice
요소 내의 모든 입력 텍스트에 적용됩니다. viseme 설정을 다시 초기화하거나 변경하려면 동일한 음성 또는 다른 음성이 있는 새 voice
요소를 사용해야 합니다.
viseme
요소의 특성 사용법은 다음 표에 설명되어 있습니다.
attribute | 설명 | 필수 또는 선택 사항 |
---|---|---|
type |
viseme 출력 형식입니다.
|
Required |
참고 항목
현재 redlips_front
는 en-US
로캘의 신경망 음성만 지원하고 FacialExpression
은 en-US
및 zh-CN
로캘의 신경망 음성을 지원합니다.
viseme 예제
viseme
요소의 특성에 지원되는 값은 이전에 설명되었습니다.
이 SSML 코드 조각은 합성된 음성으로 혼합 모양을 요청하는 방법을 보여 줍니다.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:viseme type="FacialExpression"/>
Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
</voice>
</speak>