다음을 통해 공유


SSML 문서 구조 및 이벤트

입력 텍스트가 있는 SSML(Speech Synthesis Markup Language)은 텍스트 음성 변환 출력의 구조, 콘텐츠 및 기타 특성을 결정합니다. 예를 들어 SSML을 사용하여 단락, 문장, 중단, 일시 중지 또는 무음을 정의할 수 있습니다. 나중에 애플리케이션에서 처리할 수 있는 책갈피 또는 viseme와 같은 이벤트 태그를 사용하여 텍스트를 래핑할 수 있습니다.

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-assub 요소도 포함될 수 있습니다.
  • bookmark: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • break: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • emphasis: 이 요소는 텍스트 및 audio, break, emphasis, lang, phoneme, prosody, say-assub 요소를 포함할 수 있습니다.
  • lang: 이 요소는 mstts:backgroundaudio, voicespeak를 제외한 다른 모든 요소를 포함할 수 있습니다.
  • lexicon: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • math: 이 요소는 텍스트 및 MathML 요소만 포함할 수 있습니다.
  • mstts:audioduration: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • mstts:backgroundaudio: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • mstts:embedding: 이 요소는 텍스트 및 audio, break, emphasis, lang, phoneme, prosody, say-assub 요소를 포함할 수 있습니다.
  • mstts:express-as: 이 요소는 텍스트 및 audio, break, emphasis, lang, phoneme, prosody, say-assub 요소를 포함할 수 있습니다.
  • mstts:silence: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • mstts:viseme: 이 요소는 텍스트 또는 다른 요소를 포함할 수 없습니다.
  • p: 이 요소는 텍스트 및 audio, break, phoneme, prosody, say-as, sub, mstts:express-ass 요소를 포함할 수 있습니다.
  • phoneme: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.
  • prosody: 이 요소는 텍스트 및 audio, break, p, phoneme, prosody, say-as, subs 요소를 포함할 수 있습니다.
  • s: 이 요소는 텍스트 및 audio, break, phoneme, prosody, say-as, mstts:express-assub 요소를 포함할 수 있습니다.
  • say-as: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.
  • sub: 이 요소는 텍스트만 포함할 수 있고 다른 요소는 포함할 수 없습니다.
  • speak: SSML 문서의 루트 요소입니다. 이 요소는 mstts:backgroundaudiovoice 요소를 포함할 수 있습니다.
  • voice: 이 요소는 mstts:backgroundaudiospeak를 제외한 다른 모든 요소를 포함할 수 있습니다.

Speech Service는 문장이 물음표로 끝날 때 마침표 뒤에서 잠시 쉬거나 올바른 억양을 사용하는 등 구두점을 적절하게 자동으로 처리합니다.

특수 문자

SSML 요소의 값 또는 텍스트 내에서 &, <> 문자를 사용하려면 엔터티 형식을 사용해야 합니다. 특히 & 대신 &amp;를 사용하고, < 대신 &lt;를 사용하고, > 대신 &gt;를 사용해야 합니다. 그렇지 않으면 SSML이 올바르게 구문 분석되지 않습니다.

예를 들어 green & yellow 대신 green &amp; 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 &amp; 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 요소의 특성에 지원되는 값은 이전에 설명되었습니다.

단일 voice 예제

이 예제에서는 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 다음 값 중 하나를 사용하는 일시 중지 상대 기간입니다.
  • x-weak
  • weak
  • medium(기본값)
  • strong
  • x-strong
선택 사항
time 초(예: 2s) 또는 밀리초(예: 500ms) 단위의 일시 중지 절대 기간입니다. 유효한 값의 범위는 0~5,000밀리초입니다. 지원되는 최댓값보다 큰 값을 설정하면 서비스에서 5000ms를 사용합니다. 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:silencebreak의 차이점 중 하나는 break 요소를 텍스트의 아무 곳에나 삽입할 수 있다는 것입니다. 무음은 입력 텍스트의 시작이나 끝 또는 인접한 두 문장의 경계에서만 작동합니다.

silence 설정은 바깥쪽 voice 요소 내의 모든 입력 텍스트에 적용됩니다. silence 설정을 다시 초기화하거나 변경하려면 동일한 음성 또는 다른 음성이 있는 새 voice 요소를 사용해야 합니다.

mstts:silence 요소의 특성 사용법은 다음 표에 설명되어 있습니다.

attribute 설명 필수 또는 선택 사항
type 무음을 추가할 위치 및 방법을 지정합니다. 다음 무음 형식이 지원됩니다.
  • Leading – 텍스트의 시작 부분에 있는 추가적인 무음입니다. 설정한 값은 텍스트의 시작 부분 앞의 자연 무음에 추가됩니다.
  • Leading-exact – 텍스트의 시작 부분에 있는 무음입니다. 값은 절대 무음 길이입니다.
  • Tailing – 텍스트의 끝 부분에 있는 추가적인 무음입니다. 설정한 값은 마지막 단어 뒤의 자연 무음에 추가됩니다.
  • Tailing-exact – 텍스트의 끝 부분에 있는 무음입니다. 값은 절대 무음 길이입니다.
  • Sentenceboundary – 인접한 문장 사이의 무음입니다. 이 형식의 실제 무음 길이에는 이전 문장에서 마지막 단어 뒤의 자연 무음, 이 형식에 대해 설정한 값 및 다음 문장에서 시작 단어 앞의 자연 무음이 포함됩니다.
  • Sentenceboundary-exact – 인접한 문장 사이의 무음입니다. 값은 절대 무음 길이입니다.
  • Comma-exact – 반자 또는 전자 형식의 쉼표에서 무음입니다. 값은 절대 무음 길이입니다.
  • Semicolon-exact – 반자 또는 전자 형식의 세미콜론에서 무음입니다. 값은 절대 무음 길이입니다.
  • Enumerationcomma-exact – 전자 형식의 열거형 쉼표에서 무음입니다. 값은 절대 무음 길이입니다.

절대 무음 형식(-exact 접미사 포함)은 다른 자연 선행 또는 후행 무음을 대체합니다. 절대 무음 형식은 해당 절대 이외 형식보다 우선합니다. 예를 들어 LeadingLeading-exact 형식을 모두 설정하면 Leading-exact 형식이 적용됩니다. WordBoundary 이벤트Comma-exact, Semicolon-exact, 또는 Enumerationcomma-exact을(를) 비롯한 문장 부호 관련 무음 설정보다 우선합니다. WordBoundary 이벤트 및 문장 부호 관련 silence 설정을 모두 사용하는 경우 문장 부호 관련 silence 설정이 적용되지 않습니다.
Required
Value 초(예: 2s) 또는 밀리초(예: 500ms) 단위의 일시 중지 기간입니다. 유효한 값의 범위는 0~5,000밀리초입니다. 지원되는 최댓값보다 큰 값을 설정하면 서비스에서 5000ms를 사용합니다. 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>

단락 및 문장 지정

ps 요소는 각각 단락과 문장을 나타내는 데 사용됩니다. 이러한 요소가 없으면 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 출력 형식입니다.
  • redlips_front – Viseme ID 및 오디오 오프셋 출력이 있는 립싱크
  • FacialExpression – 혼합 모양 출력
Required

참고 항목

현재 redlips_fronten-US 로캘의 신경망 음성만 지원하고 FacialExpressionen-USzh-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>

다음 단계