음성 합성 마크업 언어(SSML) 참조(베타)

Text-to-Speech는 Text-to-Speech 표준 SSML 요소 외에도 많은 SSML 베타 기능을 지원합니다. SSML을 사용하여 합성 음성을 맞춤설정하는 방법은 Text-to-Speech SSML 가이드SSML 참조 문서를 참조하세요.

지원되는 베타 SSML 기능 요약:

  • <phoneme>: 특정 단어의 발음을 맞춤설정합니다.
  • <say-as interpret-as="duration">: 기간을 지정합니다.
  • <voice>: 동일한 요청에서 각 음성으로 전환합니다.
  • <lang>: 동일한 요청에서 여러 언어를 사용합니다.
  • 타임포인트: <mark> 태그를 사용하여 스크립트에서 지정된 지점의 타임포인트를 반환합니다.

<phoneme>

<phoneme> 태그를 사용하여 단어의 커스텀 발음을 인라인으로 생성할 수 있습니다. Text-to-Speech에는 IPAX-SAMPA 음성 기호가 사용됩니다. 지원되는 언어 및 음소 목록은 음소 페이지를 참조하세요.

<phoneme> 태그를 한 번씩 적용하여 단일 단어의 음성을 지정합니다.

  <phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme>
  <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>

강세 표시

스크립트에는 최대 3개의 강세를 표시할 수 있습니다.

  1. 주 강세: IPA의 경우 /ˈ/, X-SAMPA의 경우에는 /"/로 표시됩니다.
  2. 부 강세: IPA의 경우 /ˌ/, X-SAMPA의 경우에는 /%/로 표시됩니다.
  3. 강세 없음: 기호 또는 특정 표기법으로 표시되지 않습니다.

일부 언어는 강세가 3개 미만이거나 강세 표시가 전혀 사용되지 않을 수 있습니다. 해당 언어에 사용 가능한 강세를 보려면 음소 페이지를 참조하세요. 강세 표시는 강세가 있는 각 음절의 시작 부분에 배치됩니다. 예를 들어 미국 영어에서는 다음과 같습니다.

예시 단어 IPA X-SAMPA
water ˈwɑːtɚ "wA:t@`
underwater ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

포괄적 표기와 협소적 표기

일반적으로 표기는 포괄적이고 자연적인 음성으로 표현하는 것이 좋습니다. 예를 들어 미국 영어에서는 탄설음을 사용하는 대신 모음 사이에 오는 /t/를 표기합니다.

예시 단어 IPA X-SAMPA
butter ˈbʌɾɚ 대신 ˈbʌtɚ "bV4@` 대신 "bVt@`

일부 경우에는 음성 표현을 사용함으로써 TTS 결과가 부자연스럽게 들릴 수 있습니다(예: 일련의 음소가 해부학적으로 발음하기 어려운 경우).

이에 대한 한 가지 예로 영어에서 /s/의 동화현상이 있습니다. 이러한 경우에는 그러한 동화현상을 표기에 반영해야 합니다.

예시 단어 IPA X-SAMPA
cats ˈkæts "k{ts
dogs ˈdɑːgs 대신 ˈdɑːgz "dA:gs 대신 "dA:gz

약화

모든 음절은 하나(그리고 단 하나)의 모음을 포함해야 합니다. 즉 음절 자음 사용을 피하고 대신 이를 약화된 모음으로 표기해야 합니다. 예를 들면 다음과 같습니다.

예시 단어 IPA X-SAMPA
kitten ˈkɪtn 대신 ˈkɪtən "kitn 대신 "kIt@n
kettle ˈkɛtl 대신 ˈkɛtəl "kEtl 대신 "kEt@l

음절 구분

선택적으로 /./를 사용하여 음절 경계를 지정할 수 있습니다. 각 음절은 하나(그리고 단 하나)의 모음을 포함해야 합니다. 예를 들면 다음과 같습니다.

예시 단어 IPA X-SAMPA
가독성 ˌɹiː.də.ˈbɪ.lə.tiː %r\i:.d@."bI.l@.ti:

기간

Text-to-Speech는 <say-as interpret-as="duration">을 지원하여 기간을 올바르게 인식할 수 있습니다. 예를 들어 다음 예시는 "five hours and thirty minutes"로 음성 변환됩니다.

<say-as interpret-as="duration" format="h:m">5:30</say-as>

형식 문자열에는 다음 값이 지원됩니다.

축약어
h hours
m minutes
s seconds
ms milliseconds

<voice>

<voice> 태그를 사용하면 단일 SSML 요청에 음성을 두 가지 이상 사용할 수 있습니다. 다음 예시에서 기본 음성은 남자 영어 음성입니다. 이 음성에서는 여자 음성으로 프랑스어로 발음되는 "qu'est-ce qui t'amène ici"를 제외하고 모든 단어가 기본 언어(영어) 및 성별(남성)로 합성됩니다.

<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui
t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>

또는 language 또는 gender를 지정하는 대신 <voice> 태그를 사용하여 개별 음성(지원되는 음성 페이지음성 이름)을 지정할 수 있습니다.

<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est
mignon</voice><break time="250ms"/> said a pet shop
owner</speak>

<voice> 태그를 사용할 때 Text-to-Speech는 name(사용하려는 음성 이름) 또는 다음 속성의 조합이 입력되기를 예상합니다. 세 가지 속성 모두 선택사항이지만 name을 제공하지 않을 경우 최소한 셋 중 하나를 제공해야 합니다.

  • gender: "male", "female", "neutral" 중 하나입니다.
  • variant: 구성에 따라 사용할 수 있는 음성이 여러 개인 경우 결정자로 사용됩니다.
  • language: 원하는 언어입니다. 제공된 <voice> 태그에 언어를 하나만 지정할 수 있습니다. 언어는 BCP-47 형식으로 지정합니다. 지원되는 음성 및 언어 페이지언어 코드 열에서 해당 언어의 BCP-47 코드를 찾을 수 있습니다.

또한 두 가지 추가 태그인 requiredordering을 사용하여 gender, variant, language 속성의 상대적 우선순위를 제어할 수 있습니다.

  • required: 속성이 required로 지정되었고 올바르게 구성되지 않았으면 요청이 실패합니다.
  • ordering: ordering 태그가 필수가 아닌 선호 속성으로 간주된 다음에 나열되는 모든 속성입니다. 선호 속성에 대해 Text-to-Speech API는 ordering 태그 다음에 나열된 순서로 가능한 부분까지 최대한 선호 속성을 적용합니다. 선호 속성이 잘못 구성되었으면 Text-to-Speech가 잘못된 음성을 반환할 수 있더라도, 잘못된 구성이 삭제됩니다.

requiredordering 태그를 사용하는 구성 예시:

<speak>And there it was <voice language="en-GB" gender="male" required="gender"
ordering="gender language">a flying bird </voice>roaring in the skies for the
first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female"
ordering="language gender">Sunday Funday.</voice></speak>

<lang>

<lang>을 사용하면 동일한 SSML 요청 내에서 여러 언어로 텍스트를 포함할 수 있습니다. <voice> 태그를 사용하여 음성을 명시적으로 변경하지 않는 한 모든 언어가 동일한 음성을 합성됩니다. xml:lang 문자열에는 도착어가 BCP-47 형식(이 값은 지원되는 음성 테이블에서 "언어 코드"로 나열됨)으로 포함되어야 합니다. 다음 예시에서 "chat"는 기본 언어(영어) 대신 프랑스어로 음성 변환됩니다.

<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>

Text-to-Speech는 가능한 부분까지 최대한으로 <lang> 태그를 지원합니다. 동일한 SSML 요청에 지정되었더라도 모든 언어 조합이 동일한 품질 결과를 생성하지는 않습니다. 일부 경우에는 언어 조합으로 인해 감지할 수 있지만 미묘하거나 부정적으로 인식되는 효과를 발생시킬 수 있습니다. 알려진 문제:

  • 간지 문자를 사용하는 일본어는 <lang> 태그가 지원되지 않습니다. 입력은 한자로 음역되고 읽혀집니다.
  • 아랍어, 히브리어, 페르시아어와 같은 셈족 어군의 언어는 <lang> 태그가 지원되지 않으며 무음 처리됩니다. 이러한 언어를 사용하고 싶으면 <voice> 태그를 사용해서 원하는 언어로 발음되는(가능한 경우) 음성으로 전환하는 것이 좋습니다.

SSML 타임포인트

Text-to-Speech API는 생성된 오디오 데이터에서 타임포인트 사용을 지원합니다. 타임포인트는 스크립트의 지정된 지점에 해당하는 타임스탬프입니다. 생성된 오디오의 시작 부분부터 초 단위로 측정됩니다. <mark> 태그를 사용하여 스크립트에 타임포인트를 설정할 수 있습니다. 오디오가 생성되면 API는 오디오 시작 부분과 타임포인트 간의 타임스탬프를 반환합니다.

타임포인트를 설정하려면 두 단계를 수행해야 합니다.

  1. 스크립트에서 타임스탬프를 설정하려는 시점에 <mark> SSML 태그를 추가합니다.
  2. TimepointTypeSSML_MARK로 설정합니다. 이 필드가 설정되지 않으면 기본적으로 타임포인트가 반환되지 않습니다.

다음 예시는 두 가지 타임포인트를 반환합니다.

  • timepoint_1: "Mark" 단어가 생성된 오디오에 나타나는 시간(초)을 나타냅니다.
  • timepoint_2: "see" 단어가 생성된 오디오에 나타나는 시간(초)을 나타냅니다.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark
name="timepoint_2"/> see you.</speak>