다음을 통해 공유


SSML을 사용하여 발음

SSML(Speech Synthesis Markup Language)을 텍스트 음성 변환과 함께 사용하여 음성 발음 방식을 지정할 수 있습니다. 예를 들어, 음소 및 사용자 지정 어휘집과 함께 SSML을 사용하여 발음을 개선할 수 있습니다. 또한 SSML을 사용하여 단어 또는 수학 식이 발음되는 방식을 정의할 수 있습니다.

SSML 요소를 사용하여 발음을 개선하는 방법에 대한 자세한 내용은 다음 섹션을 참조하세요. SSML 구문에 대한 자세한 내용은 SSML 문서 구조 및 이벤트를 참조하세요.

phoneme 요소

phoneme 요소는 SSML 문서의 음성 발음에 사용됩니다. 항상 사람이 읽을 수 있는 음성을 대안으로 제공해야 합니다.

발음 기호는 음으로 구성되고, 음은 글자, 숫자, 문자 또는 이러한 것들의 조합으로 구성됩니다. 각 휴대폰은 고유한 음성 소리를 설명합니다. 표음 알파벳은 모든 문자가 여러 음성 소리를 나타낼 수 있는 라틴 알파벳과 대조됩니다. "candy"와 "cease"라는 단어에서 "c" 글자의 다른 발음을 고려하거나 "thing"과 "that"이라는 단어에서 "th" 글자 조합의 다른 en-US 발음을 고려합니다.

참고 항목

음소를 지원하는 로캘 목록은 언어 지원 표의 각주를 참조하세요.

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

attribute 설명 필수 또는 선택 사항
alphabet ph 특성에서 문자열의 발음을 합성하는 경우 사용할 발음 기호입니다. 이 발음 기호를 지정하는 문자열은 소문자로 지정해야 합니다. 다음 옵션은 지정할 수 있는 발음 기호입니다.
알파벳은 요소의 phoneme에만 적용됩니다.
선택 사항
ph phoneme 요소에 있는 단어의 발음을 지정하는 음을 포함하는 문자열입니다. 지정된 문자열에 인식할 수 없는 음성이 포함되는 경우 텍스트 음성 변환에서 전체 SSML 문서를 거부하고 문서에 지정된 음성 출력을 생성하지 않습니다.

ipa의 경우 이 음절 앞에 강세 기호를 배치하여 한 음절에 강세가 적용되게 하려면 해당 단어의 모든 음절을 표시해야 합니다. 그렇지 않으면 이 강세 기호 앞의 음절에 강세가 적용됩니다. sapi의 경우 한 음절에 강세가 적용되게 하려면 해당 단어의 모든 음절을 표시했는지 여부에 관계없이 이 음절 뒤에 강세 기호를 배치해야 합니다.
Required

phoneme 예

phoneme 요소의 특성에 대해 지원되는 값은 이전에 설명되었습니다. 처음 두 예에서 ph="tə.ˈmeɪ.toʊ" 또는 ph="təmeɪˈtoʊ"의 값은 음절 meɪ를 강조하도록 지정됩니다.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
     <voice name="en-US-AvaNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

사용자 지정 어휘집

phonemesub 요소를 사용하여 SSML에서 단일 항목(예: 회사, 의학 용어 또는 그림 이모티콘)을 읽는 방법을 정의할 수 있습니다. 여러 엔터티를 읽는 방법을 정의하려면 XML 구조의 사용자 지정 어휘집 파일을 만듭니다. 그런 다음 사용자 지정 어휘집 XML 파일을 업로드하고 SSML lexicon 요소로 참조하세요.

참고 항목

사용자 지정 어휘집을 지원하는 로캘 목록은 언어 지원 표의 각주를 참조하세요.

lexicon 요소는 Long Audio API에서 지원되지 않습니다. 긴 형식 텍스트 음성 변환의 경우 일괄 합성 API(미리 보기)를 대신 사용합니다.

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

attribute 설명 필수 또는 선택 사항
uri 파일 확장자가 .xml 또는 .pls인 공개적으로 액세스 가능한 사용자 지정 어휘집 XML 파일의 URI입니다. Azure Blob Storage를 사용하는 것이 좋지만 필수는 아닙니다. 사용자 지정 어휘집 파일에 대한 자세한 내용은 PLS(Pronunciation Lexicon Specification) 버전 1.0을 참조하세요. Required

사용자 지정 어휘집 예

lexicon 요소의 특성에 지원되는 값은 이전에 설명되었습니다.

사용자 지정 어휘집을 게시한 후 SSML에서 참조할 수 있습니다. 다음 SSML 예는 https://www.example.com/customlexicon.xml에 업로드된 사용자 지정 어휘집을 참조하세요. Azure Blob Storage, AMS(Advanced Media Services) 스토리지 및 GitHub의 어휘집 URL을 지원합니다. 그러나 다른 공용 URL은 호환되지 않을 수 있습니다.

<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">
        <lexicon uri="https://www.example.com/customlexicon.xml"/>
        BTW, we will be there probably at 8:00 tomorrow morning.
        Could you help leave a message to Robert Benigni for me?
    </voice>
</speak>

사용자 지정 어휘집 파일

여러 엔터티를 읽는 방법을 정의하려면 파일 확장자가 .xml 또는 .pls인 사용자 지정 어휘집 XML 파일에 엔터티를 정의할 수 있습니다.

참고 항목

사용자 지정 어휘집 파일은 유효한 XML 문서이지만 SSML 문서로 사용할 수 없습니다.

다음은 사용자 지정 어휘집 파일의 몇 가지 제한 사항입니다.

  • 파일 크기: 사용자 지정 어휘집 파일 크기는 최대 100KB로 제한됩니다. 파일 크기가 100KB 제한을 초과하면 합성 요청이 실패합니다. 파일 크기가 100KB를 초과하는 경우 어휘집을 여러 어휘집으로 분할하고 SSML에 포함할 수 있습니다.
  • 어휘집 캐시 새로 고침: 사용자 지정 어휘집은 처음 로드될 때 URI를 텍스트 음성 변환의 키로 사용하여 캐시됩니다. 동일한 URI를 사용하는 어휘집은 15분 이내에 다시 로드되지 않으므로 사용자 지정 어휘집의 변경 내용이 적용되려면 최대 15분을 기다려야 합니다.

사용자 지정 어휘집 XML 파일의 지원되는 요소 및 특성은 PLS(발음 어휘집 사양) 버전 1.0에 설명되어 있습니다. 다음은 지원되는 요소 및 특성의 몇 가지 예입니다.

  • lexicon 요소에는 하나 이상의 lexeme 요소가 포함됩니다. 어휘집에는 적용해야 하는 로캘을 나타내는 데 필요한 xml:lang 특성이 포함됩니다. 하나의 사용자 지정 어휘집은 설계상 하나의 로캘로 제한되므로 다른 로캘에 적용하면 작동하지 않습니다. lexicon 요소에는 어휘집에서 사용되는 알파벳을 나타내는 alphabet 특성도 있습니다. 가능한 값은 ipax-microsoft-sapi입니다.
  • lexeme 요소에는 하나 이상의 grapheme 요소와 하나 이상의 grapheme, aliasphoneme 요소가 포함됩니다. lexeme 요소는 사용자 지정 어휘집에서 대/소문자를 구분합니다. 예를 들어, lexeme "Hello"에 대한 음소만 제공하는 경우 lexeme "hello"에는 작동하지 않습니다.
  • grapheme 요소는 철자법을 설명하는 텍스트를 포함합니다.
  • alias 요소는 머리글자어 또는 축약된 용어의 발음을 나타내는 데 사용됩니다.
  • phoneme 요소는 lexeme를 발음하는 방법을 설명하는 텍스트를 제공합니다. IPA 알파벳에서 음절 경계는 '.'입니다. phoneme 요소는 IPA 알파벳을 사용할 때 공백을 포함할 수 없습니다.
  • aliasphoneme 요소가 동일한 grapheme에 제공되면 alias가 더 높은 우선 순위를 갖습니다.

Microsoft는 사용자 지정 어휘집 파일에서 오류(자세한 오류 메시지 포함)를 찾는 데 도움이 되는 사용자 지정 어휘집에 대한 유효성 검사 도구를 제공합니다. Speech Services와 함께 프로덕션에서 사용자 지정 어휘집 XML 파일을 사용하기 전에 도구를 사용하는 것이 좋습니다.

사용자 지정 어휘집 파일 예

다음 XML 예(SSML 아님)는 사용자 지정 어휘집 .xml 파일에 포함됩니다. 이 사용자 지정 어휘집을 사용하는 경우 "BTW"는 "By the way"로 읽습니다. "Benigni"는 제공된 IPA "bɛˈniːnji"로 읽습니다.

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>BTW</grapheme>
        <alias>By the way</alias>
    </lexeme>
    <lexeme>
        <grapheme>Benigni</grapheme>
        <phoneme>bɛˈniːnji</phoneme>
    </lexeme>
    <lexeme>
        <grapheme>😀</grapheme>
        <alias>test emoji</alias>
    </lexeme>
</lexicon>

사용자 지정 어휘집을 사용하여 구의 발음을 직접 설정할 수 없습니다. 머리글자어 또는 약어에 대한 발음을 설정해야 하는 경우 먼저 alias를 제공한 다음, phoneme을 해당 alias에 연결합니다. 예시:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>Scotland MV</grapheme>
        <alias>ScotlandMV</alias>
    </lexeme>
    <lexeme>
        <grapheme>ScotlandMV</grapheme>
        <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
    </lexeme>
</lexicon>

머리글자어 축약된 용어의 예상 alias를 직접 제공할 수도 있습니다. 예시:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

앞의 사용자 지정 어휘집 XML 파일 예는 IPA 음성 집합이라고도 하는 IPA 알파벳을 사용합니다. IPA는 국제 표준이므로 사용하는 것이 좋습니다. 일부 IPA 문자의 경우 유니코드로 표시될 때 이러한 문자는 '미리 구성된' 버전 및 '분해된' 버전입니다. 사용자 지정 어휘집은 분해된 유니코드만 지원합니다.

Speech Service는 en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CN, zh-HK, zh-TW 등의 로캘에 대한 음성 세트를 정의합니다. Speech Service 발음 기호에 대한 자세한 내용은 Speech Service 음성 세트를 참조하세요.

다음과 같이 사용자 지정 어휘집이 있는 x-microsoft-sapialphabet 특성의 값으로 사용할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="x-microsoft-sapi" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias> By the way </alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> b eh 1 - n iy - n y iy </phoneme>
  </lexeme>
</lexicon>

say-as 요소

say-as 요소는 요소 텍스트의 콘텐츠 형식(예: 숫자 또는 날짜)을 나타냅니다. 이 요소는 텍스트를 발음하는 방법에 대한 지침을 음성 합성 엔진에 제공합니다.

say-as 요소의 특성 사용법은 다음 표에 설명되어 있습니다.

attribute 설명 필수 또는 선택 사항
interpret-as 요소 텍스트의 콘텐츠 형식을 나타냅니다. 형식 목록은 다음 표를 참조하세요. Required
format 형식이 모호할 수 있는 콘텐츠 형식에 대한 요소 텍스트의 정확한 서식 지정 정보를 제공합니다. SSML은 이러한 형식을 사용하는 콘텐츠 형식의 형식을 정의합니다. 다음 데이블을 참조하세요. 선택 사항
detail 읽어야 하는 세부 수준을 나타냅니다. 예를 들어 이 특성은 음성 합성 엔진이 문장 부호를 발음하도록 요청할 수 있습니다. detail에 대해 정의된 표준 값은 없습니다. 선택 사항

interpret-asformat 특성에 대해 지원되는 콘텐츠 형식은 다음과 같습니다. 이 표에서 format 열이 비어 있지 않은 경우에만 format 특성을 포함합니다.

참고 항목

interpret-as 특성의 charactersspell-out 값은 모든 텍스트 음성 변환 로캘에서 지원됩니다. 기타 interpret-as 특성 값은 다음 언어의 모든 로캘에 대해 지원됩니다. 아랍어, 카탈로니아어, 중국어, 덴마크어, 네덜란드어, 영어, 프랑스어, 핀란드어, 독일어, 힌디어, 이탈리아어, 일본어, 한국어, 노르웨이어, 폴란드어, 포르투갈어, 러시아어, 스페인어, 스웨덴어.

interpret-as format 해석
characters, spell-out 텍스트를 개별 문자(철자)로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="characters">test</say-as>

"T E S T"로 읽습니다.
cardinal, number 없음 텍스트를 기수로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

There are <say-as interpret-as="cardinal">10</say-as> options

“10개 옵션이 있음”으로.
ordinal 없음 텍스트를 서수로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

Select the <say-as interpret-as="ordinal">3rd</say-as> option

"Select the third option"으로 발음합니다.
number_digit 없음 텍스트를 개별 숫자 순서대로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="number_digit">123456789</say-as>

"1 2 3 4 5 6 7 8 9"로 읽습니다.
fraction 없음 텍스트를 분수로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="fraction">3/8</say-as> of an inch

"three eighths of an inch"로 읽습니다.
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y 텍스트를 날짜로 읽습니다. format 특성은 날짜의 형식(d=일, m=월, y=연)을 지정합니다. 음성 합성 엔진이 다음과 같이 읽습니다.

Today is <say-as interpret-as="date">10-12-2016</say-as>

"오늘은 10월 12일 2016년입니다."
대명사:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>

"오늘은 12월 10일 2016년입니다."
time hms12, hms24 텍스트를 시간으로 읽습니다. format 특성은 시간을 지정할 때 12시간제(hms12) 또는 24시간제(hms24)를 사용하여 시간이 지정되는지 여부를 지정합니다. 콜론을 사용하여 시간, 분, 초를 나타내는 숫자를 구분합니다. 몇 가지 유효한 시간 예는 12:35, 1:14:32, 08:15 및 02:50:45입니다. 음성 합성 엔진이 다음과 같이 읽습니다.

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

"The train departs at four A M"으로 읽습니다.
duration hms, hm, ms 텍스트를 기간으로 읽습니다. format 특성은 기간의 형식(h=시간, m=분 및 s=초)을 지정합니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="duration">01:18:30</say-as>

"1시간 18분 30초".
대명사:

<say-as interpret-as="duration" format="ms">01:18</say-as>

"1분 18초".
이 태그는 영어와 스페인어에서만 지원됩니다.
telephone 없음 텍스트를 전화 번호로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>

"My number is area code eight eight eight five five five one two one two"로 읽습니다.
currency 없음 텍스트를 통화로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="currency">99.9 USD</say-as>

“99 미국 달러와 90센트”로
address 없음 텍스트를 주소로 읽습니다. 음성 합성 엔진이 다음과 같이 읽습니다.

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

"I'm at 150th Court Northeast Redmond Washington"으로 발음합니다.
name 없음 텍스트를 사람의 이름으로 말합니다. 음성 합성 엔진이 다음과 같이 읽습니다.

<say-as interpret-as="name">ED</say-as>

[æd]로 발음합니다.
중국어 이름에서는 일부 문자가 성에 나타날 때 다르게 발음됩니다. 예를 들어 음성 합성 엔진은 仇를 다음과 같이 읽습니다.

<say-as interpret-as="name">仇先生</say-as>

[chóu] 대신 [qiú]로 말합니다.

say-as 예

say-as 요소의 특성에 대해 지원되는 값은 이전에 설명되었습니다.

음성 합성 엔진은 다음 예제를 "Your first request was for one room on October nineteenth twenty ten with early arrival at twelve thirty five PM"으로 읽습니다.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <p>
        Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
        on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
        </p>
    </voice>
</speak>

sub 요소

sub 요소를 사용하여 요소의 묶인 텍스트 대신 별칭 특성의 텍스트 값을 발음해야 함을 나타냅니다. 이러한 방식으로 SSML에는 음성 및 서면 형식이 모두 포함됩니다.

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

attribute 설명 필수 또는 선택 사항
alias 요소의 둘러싸인 텍스트 대신 발음해야 하는 텍스트 값입니다. Required

sub 예

sub 요소의 특성에 대해 지원되는 값은 이전에 설명되었습니다.

음성 합성 엔진은 다음 예를 "World Wide Web 컨소시엄"이라고 말합니다.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <sub alias="World Wide Web Consortium">W3C</sub>
    </voice>
</speak>

MathML을 사용하여 발음

MathML(수학적 태그 언어)은 수학적 콘텐츠와 구조를 설명하는 XML 호환 태그 언어입니다. Speech Services는 MathML을 입력 텍스트로 사용하여 출력 오디오에서 수학적 표기법을 올바르게 발음할 수 있습니다.

참고 항목

MathML 요소(태그)는 현재 다음 로캘에서 지원됩니다. de-DE, en-AU, en-GB, en-US, es-ES, es-MX, fr-CA, fr-FR, it-IT, ja-JP, ko-KR, pt-BRzh-CN.

MathML 3.0 기본 수학 요소를 제외하고 MathML 2.0MathML 3.0 사양의 모든 요소가 지원됩니다.

다음 MathML 요소 및 특성을 기록해 두세요.

  • <math xmlns="http://www.w3.org/1998/Math/MathML">xmlns 특성은 선택 사항입니다.
  • semantics, annotationannotation-xml 요소는 음성을 출력하지 않으므로 무시됩니다.
  • 요소가 인식되지 않으면 무시되고 그 안의 자식 요소는 계속 처리됩니다.

XML 구문은 MathML 엔터티를 지원하지 않으므로 엔터티를 나타내려면 해당 유니코드 문자를 사용해야 합니다. 예를 들어, 엔터티 &copy;는 유니코드 문자 &#x00A9;로 나타내야 합니다. 그렇지 않으면 오류가 발생합니다.

MathML 예

이 예의 텍스트 음성 변환 출력은 "a squared plus b squared equals c squared"입니다.

<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-JennyNeural'>
        <math xmlns='http://www.w3.org/1998/Math/MathML'>
            <msup>
                <mi>a</mi>
                <mn>2</mn>
            </msup>
            <mo>+</mo>
            <msup>
                <mi>b</mi>
                <mn>2</mn>
            </msup>
            <mo>=</mo>
            <msup>
                <mi>c</mi>
                <mn>2</mn>
            </msup>
        </math>
    </voice>
</speak>

다음 단계