HTML의 음성 표현을 위한 명세

W3C 작업 초안

이 버전:
https://www.w3.org/TR/2021/WD-spoken-html-20210923/
최신 공개 버전:
https://www.w3.org/TR/spoken-html/
최신 편집자 초안:
https://w3c.github.io/pronunciation/technical-approach
이전 버전:
https://www.w3.org/TR/2021/WD-spoken-html-20210518/
편집자:
Irfan Ali (Educational Testing Service)
Markku Hakkinen (Educational Testing Service)
Paul Grenier (초청 전문가)
Ruoxi Ran (W3C)
참여:
GitHub w3c/pronunciation
이슈 제출
커밋 기록
풀 리퀘스트

초록

텍스트 음성 변환(TTS) 합성을 통한 정확한 발음은 매우 많은 상황에서 중요하며, 교육, 출판, 커뮤니케이션, 엔터테인먼트, 그 밖의 여러 분야에서는 필수적이다. TTS는 웹에서 디지털 콘텐츠에 대한 접근을 제공하는 중요한 기술이 되었다. 그러나 오늘날에는 일반적으로 사용되는 TTS 엔진과 운영 환경 전반에서 TTS가 생성한 출력을 올바르게 제시하도록 콘텐츠를 마크업할 방법이 없다.

이 문서에서는 콘텐츠 작성자가 사용자가 선택할 수 있는 운영 환경 또는 보조 기술과 관계없이 HTML 콘텐츠의 안정적인 발음을 제공할 수 있도록 두 가지 마크업 접근 방식을 식별한다. 각 접근 방식은 일관된 결과를 산출하는 것으로 입증되었다. 우리는 어떤 접근 방식을 W3C의 규범적 권고안 상태로 진전시켜야 하는지 결정하는 데 도움을 받기 위해 작성자와 구현자의 의견을 구한다.

각 후보 접근 방식은 Speech Synthesis Markup Language (SSML)의 하위 집합을 기반으로 한다. 우리가 선택한 하위 집합은 모든 범위의 보조 기술과 운영 환경 전반에서 음성 표현에 일관성과 예측 가능성을 제공하도록 신중하게 선택되었다. 이 문서에서 설명하는 두 기술적 접근 방식은 SSML이 네이티브 HTML 기술이 되는 것을 막아 온 교착 상태를 신중하게 피하므로, 일반적으로 적용 가능해야 한다. 여기에서 설명하는 어느 접근 방식도 보조 기술에 대한 우리의 요구 사항을 충족하며, HTML 콘텐츠를 음성 형식으로 소비하고 제시하는 음성 비서에도 유용할 것이다. 우리는 웹 콘텐츠의 음성 표현을 사용하는 모든 애플리케이션 전반에서 어떤 접근 방식이 가장 구현 가능성이 높은지에 대한 의견을 구한다.

이 문서의 상태

이 절은 발행 시점의 문서 상태를 설명한다. 다른 문서가 이 문서를 대체할 수 있다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인(https://www.w3.org/TR/)에서 확인할 수 있다.

이 문서는 Pronunciation Task ForceAccessible Platform Architectures Working Group의 첫 공개 작업 초안으로 발행했다. 이 문서는 W3C 권고안이 되는 것을 목표로 한다.

이 문서는 텍스트 음성 변환(TTS) 합성이 HTML 콘텐츠를 적절하게 발음할 수 있도록 규범적 명세와 모범 사례 지침을 제공한다. 이 갱신 작업 초안은 Speech Synthesis Markup Language (SSML)를 사용하여 작성자가 제어하는 HTML 콘텐츠 발음을 위한 두 가지 가능한 기술적 접근 방식을 설명한다. 어느 접근 방식도 우리의 접근성 요구 사항을 충족한다. 그러나 우리는 폭넓게 적용 가능한 접근 방식을 확립하고자 한다. 따라서 Task Force는 이러한 접근 방식에 대해, 특히 여기서 설명한 저작 기법을 청각적 표현으로 변환할 콘텐츠 작성자와 구현자로부터 더 많은 의견을 구하고 있다.

의견을 제출하려면 W3C pronunciation GitHub 저장소에 이슈를 제출한다. 이것이 어렵다면 public-pronunciation@w3.org로 이메일을 보낸다 (구독, 아카이브). 의견은 2021년 10월 30일까지 요청된다. 문서의 진행 중인 업데이트는 공개적으로 볼 수 있는 편집자 초안에서 확인할 수 있다.

작업 초안으로 발행되었다고 해서 W3C 회원의 승인을 의미하지는 않는다.

이 문서는 초안 문서이며 언제든지 업데이트되거나, 대체되거나, 다른 문서에 의해 폐기될 수 있다. 진행 중인 작업 이외의 것으로 이 문서를 인용하는 것은 부적절하다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹이 작성했다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지한다. 해당 페이지에는 특허 공개 지침도 포함되어 있다. 개인이 본인이 필수 청구항을 포함한다고 믿는 특허를 실제로 알고 있는 경우, 그 개인은 W3C 특허 정책 제6절에 따라 정보를 공개해야 한다.

이 문서는 2020년 9월 15일 W3C 프로세스 문서의 적용을 받는다.

1. 소개

이 절은 비규범적이다.

이 첫 공개 작업 초안(FPWD) 발행물에서 우리는 모든 운영 환경 전반에서 사용되는 보조 기술과 관계없이 텍스트 음성 변환(TTS) 엔진을 통해 정확하고, 일관되며, 신뢰할 수 있는 발음을 달성하기 위한 두 가지 독립적인 접근 방식을 정의한다. 우리는 이 두 접근 방식 중 어느 것이 더 바람직한지, 그리고 그 이유가 무엇인지에 대해 더 넓은 커뮤니티의 의견을 얻기 위해 지금 두 접근 방식을 발행한다.

텍스트 음성 변환은 장애인에게 필요하며 모두에게 유용하다. 정확한 발음은 교육 및 교육 평가(학생 시험)와 같은 많은 상황에서 필수적이다. 오늘날 많은 컴퓨터와 모바일 기기에는 TTS 기능이 내장되어 있으며, 이는 장애가 없는 사람들도 운전 중이거나 개인 데이터 비서와 상호작용하는 경우 등 다양한 상황에서 흔히 사용한다.

W3C의 Web Content Accessibility Guidelines (WCAG)는 올바른 발음의 중요성을 강조한다.

예를 들어, 영어에서 heteronyms는 철자는 같지만 발음과 의미가 다른 단어들로, desert(버리다)와 desert(건조 지역) 같은 단어가 있다. … 또한 일부 언어에서는 특정 문자가 여러 방식으로 발음될 수 있다. 예를 들어 일본어에는 여러 발음을 가진 한자(Han characters(Kanji))와 같은 문자가 있다. … 잘못 읽히면 콘텐츠는 사용자에게 의미를 전달하지 못한다. Understanding Success Criterion 3.1.6: Pronunciation
WCAG는 올바른 발음을 표시하기 위한 수많은 우회 방법을 제공하지만, 신뢰할 수 있는 기술적 해결책을 가리킬 수 없기 때문에 Success Criterion 3.1.6을 AAA로 분류할 수밖에 없다.

W3C에는 발음 관련 성숙한 명세가 두 가지 있다.

이 명세들은 작성자가 HTML 문서에 발음(및 관련 음성 표현) 마크업을 포함할 수 있도록 오랫동안 기술적 방법을 제공해 왔지만, SSML의 접근 방식은 여러 기술적 이유로 채택되지 않았다. 또한 여러 브라우저와 보조 기술 공급업체의 피드백은 이것이 가능성이 높거나 실현 가능한 접근 방식이 아님을 나타냈다. 따라서 우리의 명세에서는 이 바퀴를 다시 만들려고 하지 않고, SSML을 HTML에서 사용하는 것을 막아 온 오랜 기술적 장벽을 연결하려 한다. 우리의 접근 방식은 두 명세에 직접 의존하며, HTML 검증에서 허용되는 속성으로 이를 감싼다.

앞서 언급했듯이 우리는 두 가지 후보 접근 방식을 식별했다.

Task Force는 구현자와 작성자가 이러한 접근 방식에 대한 의견을 제공하도록 권장한다. 피드백이 분석되면, 어떤 접근 방식이 최종 규범적 W3C 권고안이 될지 결정하는 데 도움이 된다.

다음 절에는 각 접근 방식의 예제 코드가 포함되어 있다. 기존 TTS 기술과 비교할 수 있도록, 오디오 파일이 포함된 sample content 예제를 참조한다.

편집자 주
속성 이름에 data- 접두사를 사용하는 것은 편집자의 권고나 선호가 아니다. 오히려 이는 HTML 5.x 명세에 정의된 대로 HTML에 대한 향상을 개발하는 표준적인 접근 방식이다. 이 표준 기반 개발 접근 방식은 실험적 구현을 가능하게 하며, 이는 다시 이 명세의 추가 개발에 정보를 제공할 것이다.

발음 문제 및 관련 W3C 문서에 대한 더 심층적인 소개는 Pronunciation Overview를 참조한다.

2. HTML에 SSML을 포함하기 위한 다중 속성 접근 방식

SSML 태그와 속성을 HTML 속성으로 변환함으로써, 작성자는 HTML 문서에 발음(및 관련 음성 표현)을 포함할 수 있다. 작성자는 지원되는 대부분의 태그를 서로 결합하여 여러 음성 효과를 적용할 수 있다.

SSML에 포함된 대부분의 마크업은 대다수 콘텐츠 개발자가 사용하기에 적합하다. 그러나 phonemeprosody와 같은 일부 기능은 전문 지식을 요구할 수 있다. 일본의 출판사는 SSML phoneme 요소에 대해 EPUB 3의 유사한 기법을 사용한다.

Edgar Allen Poe의 The Raven:

예제 1
<p data-ssml-prosody-rate="slow" data-ssml-prosody-pitch="low">
    Once upon a midnight 
    <span data-ssml-phoneme-alphabet="ipa" data-ssml-phoneme-ph="ˈdrɪəri">dreary</span>
    <span data-ssml-break-time="500ms"></span>,
    while I pondered, weak
    <span data-ssml-break-time="150ms"></span> and weary,<br data-ssml-break-time="500ms" />
    Over many a quaint and curious volume of forgotten
    <span data-ssml-prosody-rate="x-slow" data-ssml-prosody-pitch="low"> lore—</span><br />
    While I nodded, nearly napping, suddenly there came a tapping,
    <br data-ssml-audio-src="/soundlibrary/wood/hits/hits_11" />
    As of some one gently rapping,
    <span data-ssml-audio-src="/soundlibrary/wood/hits/hits_11"></span>
    rapping at my chamber door.
    <span data-ssml-audio-src="/soundlibrary/wood/hits/hits_11"></span>
    <br data-ssml-audio-src="/soundlibrary/wood/hits/hits_11" />
    <span data-ssml-prosody-volume="x-soft" data-ssml-prosody-rate="medium">
      "'Tis some visitor,"
    </span>
    I muttered, <span data-ssml-prosody-volume="x-soft" data-ssml-prosody-rate="x-slow">
    <span data-ssml-phoneme-alphabet="ipa" data-ssem-phoneme-ph="tæpɪŋ">"tapping</span>
    at my chamber door—</span><br data-ssml-break-time="750ms" />
    Only this <span data-ssml-break-strength="weak"></span> and nothing
    <span data-ssml-break-strength="none"></span>
    <span data-ssml-prosody-volume="soft" data-ssml-prosody-rate="75%"> more."</span>
</p>

2.1 data-ssml-* 다중 속성 집합

이러한 속성은 SSML 대응 항목과 기능적으로 동등한 기능을 제공한다. 이러한 속성은 다음 HTML 요소에서 유효하다.

2.1.1 data-ssml-say-as(-*)

작성자가 요소의 텍스트 콘텐츠를 분류할 수 있도록 한다. 속성은 SSML say-as 요소 및 관련 프로퍼티에서 파생된다.

편집자 주
interpret-as는 불필요해 보이며, 암시되어야 한다

data-ssml-say-as

값: date | time | telephone | characters | cardinal | ordinal

data-ssml-say-as-format (선택 사항)

값: W3C Note, SSML say-as 속성 값에 정의된 time/date 형식. SSML 1.0 say-as 속성

data-ssml-say-as-detail (선택 사항)

값: W3C Note, SSML say-as 속성 값에 정의된 detail. SSML 1.0 say-as 속성

편집자 주
data-ssml-say-as-detail 속성은 작성자가 구현별 TTS 엔진 기능 또는 동작을 대상으로 지정할 수 있도록 한다.
예제 2
According the 2010 US Census, the population of <span data-ssml-say-as='characters'>90274</span>
increased to 25209 from 24976 over the past 10 years.

2.1.2 data-ssml-phoneme-*

음소/음성 발음을 위한 두 필수 속성을 정의한다. phoneme 속성을 가진 요소는 텍스트만 포함할 수 있다(요소는 없음). 이 속성은 SSML phoneme 요소 및 관련 프로퍼티에서 파생된다.

data-ssml-phoneme-ph

값: phoneme 문자열.

data-ssml-phoneme-alphabet

값: 사용 중인 음성 알파벳. ipa | x-sampa

예제 3
Once upon a midnight <span data-ssml-alphabet="ipa" data-ssml-phoneme-ph="ˈdrɪəri">dreary</span>

2.1.3 data-ssml-sub-alias

발음을 위해 텍스트 콘텐츠를 대체하는 문자열 값이다. aria-label과 유사하지만, alias는 철자를 변경하지 않는다 (예: 점자 디스플레이). 또한 alias 속성은 접근성 트리에 접근하지 않는 TTS 기술에서도 사용할 수 있다. 처리기는 alias 값에 텍스트 정규화를 적용해야 한다. 이 속성은 SSML sub 요소 및 관련 프로퍼티에서 파생된다.

값: TTS에 대체되어 전달되고 표현될 텍스트 문자열.

예제 4
<span data-ssml-sub-alias="Sodium Chloride">NaCL</span>

2.1.4 data-ssml-voice-*

말하는 음성의 변경을 요청하는 생성 값을 정의하는 속성 집합이다. voice 요소에는 두 종류의 속성이 있다. 하나는 음성의 원하는 특징을 나타내는 속성이고, 다른 하나는 동작을 제어하는 속성이다. 이 속성은 SSML voice 요소 및 관련 프로퍼티에서 파생된다.

data-ssml-voice-gender (선택 사항)

값: female | male | neutral

data-ssml-voice-age (선택 사항)

값: 나이에 해당하는 integer(년 단위)

data-ssml-voice-variant (선택 사항)

값: 숫자 음성 변형을 나타내는 integer

data-ssml-voice-name (선택 사항)

값: 현재 TTS 엔진에서 요청되는 특정 음성 이름 (예: "David").

data-ssml-voice-languages (선택 사항)

값: 이 음성으로 말할 하나 이상의 언어를 공백으로 구분한 string.

편집자 주
data-ssml-voice-languages 속성은 적절한 음성을 선택하는 데 TTS 엔진을 돕기만 한다. 이는 콘텐츠의 언어를 나타내지 않는다. 언어를 지정하려면 HTML lang 속성을 사용한다.
예제 5
She said, "<span data-ssml-voice-gender="female">My name is Marie</span>".

2.1.5 data-ssml-emphasis-level

텍스트 콘텐츠가 emphasis(또는 prominence나 stress라고도 함)를 가지고 발화되도록 요청한다. 이는 단일 속성이며, SSML emphasis 요소 및 관련 프로퍼티에서 파생된다.

값: strong | moderate | none | reduced

예제 6
Please use <span data-ssml-emphasis-level="strong">extreme caution.</span>

2.1.6 data-ssml-break-*

토큰 사이의 일시 정지 또는 기타 운율 경계를 제어하기 위해 빈 요소와 관련된 타이밍을 설명한다. 토큰 쌍 사이에서 break 속성을 사용하는 것은 선택 사항이다. 요소가 토큰 사이에 없으면 합성 처리기는 언어적 문맥에 따라 자동으로 break를 결정할 것으로 기대된다. 이 속성은 SSML break 요소 및 관련 프로퍼티에서 파생된다.

data-ssml-break-strength

값: none | x-weak | weak | medium (default) | strong | x-strong

data-ssml-break-time

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

예제 7
Take a deep breath,<span data-ssml-break-time="1s"></span> and exhale.

2.1.7 data-ssml-prosody-*

음성 출력의 pitch, speaking rate 및 volume을 제어할 수 있게 한다. 이 속성은 SSML prosody 요소 및 관련 프로퍼티에서 파생된다.

data-ssml-prosody-pitch (선택 사항)

값: frequency-value"Hz" | +/- change value | "x-low" | "low" | "medium" | "high" | "x-high" | "default"

data-ssml-prosody-contour (선택 사항)

값: SSML 1.1 권고안에 정의된 contour 변경 매개변수의 string.

data-ssml-prosody-range (선택 사항)

값: SSML 1.1 권고안에 정의된 range 값의 string.

data-ssml-prosody-rate (선택 사항)

값: non-negative-percentage% | "x-slow" | "slow" | "medium" | "fast"| "x-fast" | "default"

data-ssml-prosody-duration (선택 사항)

값: 시간 지속 시간(예: "250ms", "1s" 등)을 포함하는 string.

data-ssml-prosody-volume (선택 사항)

값: +/- soundlevel>"dB" | "silent" | "x-soft" | "soft" | "medium" | "loud" | "x-loud" | "default"

예제 8
The tortoise, said (slowly) "<span data-ssml-prosody-rate="x-slow">
I am almost at the finish line</span>."

2.1.8 data-ssml-audio-*

합성된 음성 출력과 함께 녹음된 오디오 파일의 삽입을 지원한다. 요소는 비어 있을 수 있다. 요소가 비어 있지 않다면, 오디오 문서를 사용할 수 없을 때 그 내용이 발화되어야 한다. 이 속성은 SSML audio 요소 및 관련 프로퍼티에서 파생된다.

data-ssml-audio-src

값: 적절한 미디어 파일이 있는 문서의 URI.

data-ssml-audio-fetchtimeout (선택 사항)

값: 시간 지속 시간(예: "250ms", "1s" 등)을 포함하는 string.

data-ssml-audio-fetchint (선택 사항)

값: safe | prefetch

data-ssml-audio-maxage (선택 사항)

값: string

data-ssml-audio-maxstale (선택 사항)

값: string

data-ssml-audio-clipBegin (선택 사항)

값: 시간 지속 시간(예: "250ms", "1s" 등)을 포함하는 string.

data-ssml-audio-clipEnd (선택 사항)

값: 시간 지속 시간(예: "250ms", "1s" 등)을 포함하는 string.

data-ssml-audio-repeatCount (선택 사항)

값: 오디오 클립을 반복할 횟수를 나타내는 integer.

data-ssml-audio-repeatDur (선택 사항)

값: 시간 지속 시간(예: "250ms", "1s" 등)을 포함하는 string.

예제 9
You will hear a brief chime <span data-ssml-audio-src="/audio/chime.ogg"></span> 
when your time is up.

3. HTML에 SSML을 포함하기 위한 단일 속성 접근 방식

SSML 태그와 속성을 JSON 문자열 값을 가진 단일 HTML 속성으로 변환함으로써, 작성자는 HTML 문서에 발음(및 관련 음성 표현)을 포함할 수 있다. 작성자는 지원되는 대부분의 태그를 서로 결합하여 여러 음성 효과를 적용할 수 있다.

SSML에 포함된 대부분의 마크업은 대다수 콘텐츠 개발자가 사용하기에 적합하다. 그러나 phonemeprosody와 같은 일부 기능은 전문 지식을 요구할 수 있다. 이 접근 방식은 IMS Question & Test Interoperability (QTI) Specification을 준수하는 콘텐츠를 변환하기 위한 수단으로 등장했다. QTI 표준은 교육 평가에서 사용되는 TTS 도구를 위해 HTML에 SSML을 포함하는 것을 지원한다.

Edgar Allen Poe의 The Raven:

예제 1
<p data-ssml='{"prosody":{"rate":"slow","pitch":"low"}}'>
	Once upon a midnight
        <span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"ˈdrɪəri"}}'>dreary</span>
	<span data-ssml='{"break":{"time":"500ms"}'></span>,
	while I pondered, weak
	<span data-ssml='{"break":{"time":"150ms"}'></span> and weary,
        <br data-ssml='{"break":{"time":"500ms"}' />
	Over many a quaint and curious volume of forgotten 
	<span data-ssml='{"prosody":{"rate":"x-slow","pitch":"low"}}'>lore—</span><br />
	While I nodded, nearly napping, suddenly there came a tapping,
	<br data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'/>
	As of some one gently rapping,
	<span data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'></span>
	rapping at my chamber door.
	<span data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'></span>
	<br data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}' />
	<span data-ssml='{"prosody":{"volume":"x-soft","rate":"medium"}}'>
          "'Tis some visitor,"
        </span>
	I muttered, <span data-ssml='{"prosody":{"volume":"x-soft","rate":"x-slow"}}'>
	<span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"tæpɪŋ"}}'>"tapping</span>
	at my chamber door—</span><br data-ssml='{"break":{"time":"750ms"}'/>
	Only this<span data-ssml='{"break":{"strength":"weak"}'></span>
	and nothing<span data-ssml='{"break":{"strength":"none"}'> </span>
	<span data-ssml='{"prosody":{"volume":"soft","rate":"75%"}}'>more."</span>
</p>

3.1 data-ssml 속성, 프로퍼티 및 값

다음 프로퍼티는 정의되어 있으며 해당 SSML 대응 항목과 기능적으로 동등한 기능을 제공한다.

data-ssml은 SSML과 기능적으로 동등한 기능을 제공한다. 이 속성은 다음 HTML 요소에서 유효하다.

data-ssml 속성의 값은 작은따옴표(')로 감싼 JSON 문자열이며, 특정 SSML 기능을 하나 이상의 프로퍼티/값 쌍으로 표현하는 단일 JSON 객체를 포함한다. 유효한 객체, 프로퍼티 및 관련 값은 다음 절에서 정의된다. JSON 스키마는 부록 A에 제시되어 있다.

3.1.1 say-as

작성자가 요소의 텍스트 콘텐츠를 분류할 수 있도록 한다. JSON 정의는 SSML say-as 요소 및 관련 프로퍼티에서 파생된다.

interpret-as

값: date | time | telephone | characters | cardinal | ordinal

format (선택 사항)

값: W3C Note SSML say-as 속성 값에 정의된 time/date 형식.

detail (선택 사항)

값: W3C Note SSML say-as 속성 값에 정의된 detail.

편집자 주
detail 프로퍼티는 작성자가 구현별 TTS 엔진 기능 또는 동작을 대상으로 지정할 수 있도록 한다.
예제 2
According the 2010 US Census, the population of 
<span data-ssml='{"say-as":{"interpret-as":"characters"}}'>90274</span>
increased to 25209 from 24976 over the past 10 years.

3.1.2 phoneme

음소/음성 발음을 위한 두 필수 속성을 정의한다. phoneme 속성을 가진 요소는 텍스트만 포함할 수 있다(요소는 없음). JSON 정의는 SSML phoneme 요소 및 관련 프로퍼티에서 파생된다.

ph

값: 발화될 콘텐츠에 해당하는 음성 문자를 포함하는 string

data-ssml-phoneme-alphabet

값: ph 문자열에 사용되는 음성 알파벳을 정의하는 ipa | x-sampa

예제 3
Once upon a midnight 
<span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"ˈdrɪəri"}}'>dreary</span>

3.1.3 sub

alias 속성 값의 텍스트가 발음을 위해 텍스트 콘텐츠를 대체함을 나타낸다. 필수 alias 프로퍼티는 텍스트 콘텐츠 대신 발화될 문자열을 지정한다. 처리기는 alias 값에 텍스트 정규화를 적용해야 한다. JSON 정의는 SSML sub 요소 및 관련 프로퍼티에서 파생된다.

alias

값: sub가 적용되는 요소의 텍스트 콘텐츠를 대신하여 발화될 텍스트를 포함하는 string.

예제 4
<span data-ssml='{"sub":{"alias":"Sodium Chloride"}}'>NaCL</span>

3.1.4 voice

말하는 음성의 변경을 요청한다. voice에는 두 종류의 속성이 있다. 하나는 음성의 원하는 특징을 나타내는 속성이고, 다른 하나는 동작을 제어하는 속성이다. JSON 정의는 SSML voice 요소 및 관련 프로퍼티에서 파생된다.

gender (선택 사항)

값: female | male | neutral

age (선택 사항)

값: 나이에 해당하는 integer(년 단위)

variant (선택 사항)

값: 숫자 음성 변형을 나타내는 integer

name (선택 사항)

값: 현재 TTS 엔진에서 요청되는 특정 음성 이름을 정의하는 string, 예: "Microsoft David (English)"

languages (선택 사항)

값: 이 음성으로 말할 하나 이상의 언어를 공백으로 구분한 string.

편집자 주
voice > languages 프로퍼티는 적절한 음성을 선택하는 데 TTS 엔진을 돕기만 한다. 이는 콘텐츠의 언어를 나타내지 않는다. 언어를 지정하려면 HTML lang 속성을 사용한다.
예제 5
She said, "<span data-ssml='{"voice":{"gender":"female"}}'>My name is Marie</span>".

3.1.5 emphasis

emphasis가 적용되는 요소의 텍스트 콘텐츠가 emphasis(또는 prominence나 stress라고도 함)를 가지고 발화되도록 요청한다. JSON 정의는 SSML emphasis 요소 및 관련 프로퍼티에서 파생된다.

level

값: strong | moderate | none | reduced

예제 6
Please use <span data-ssml='{"emphasis":{"level":"strong"}}'>extreme caution.</span>

3.1.6 break

토큰 사이의 일시 정지 또는 기타 운율 경계를 제어하기 위해 빈 요소와 관련된 타이밍을 설명한다. 토큰 쌍 사이에서 break를 사용하는 것은 선택 사항이다. 요소가 토큰 사이에 없으면 합성 처리기는 언어적 문맥에 따라 break를 자동으로 결정할 것으로 기대된다. JSON 정의는 SSML break 요소 및 관련 프로퍼티에서 파생된다.

strength

값: none | x-weak | weak | medium (default) | strong | x-strong

time

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string (s=초, ms=밀리초)

예제 7
Take a deep breath,<span data-ssml='{"break":{"time":"1s"}}'></span> and exhale.

3.1.7 prosody

음성 출력의 pitch, speaking rate 및 volume을 제어할 수 있게 한다. 객체에는 여섯 개의 프로퍼티가 있다. JSON 정의는 SSML prosody 요소 및 관련 프로퍼티에서 파생된다.

pitch

값: frequency-value"Hz" | +/- change value | "x-low" | "low" | "medium" | "high" | "x-high" | "default"

contour

값: SSML 1.1 권고안에 정의된 contour 변경 매개변수의 string

range

값: SSML 1.1 권고안에 정의된 range 값의 string

rate

값: non-negative-percentage% | "x-slow" | "slow" | "medium" | "fast"| "x-fast" | "default"

duration

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

volume

값: +/- soundlevel>"dB" | "silent" | "x-soft" | "soft" | "medium" | "loud" | "x-loud" | "default"

예제 8
The tortoise, said (slowly) "
<span data-ssml='{"prosody":{"rate":"x-slow"}}'>I am almost at the finish line</span>."

3.1.8 audio

합성된 음성 출력과 함께 녹음된 오디오 파일의 삽입을 지원한다. 요소는 비어 있을 수 있다. 요소가 비어 있지 않다면, 오디오 문서를 사용할 수 없을 때 그 내용은 발화될 텍스트여야 한다. JSON 정의는 SSML audio 요소 및 관련 프로퍼티에서 파생된다.

src

값: 적절한 미디어 파일이 있는 문서의 URI.

fetchtimeout

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

fetchint

값: safe | prefetch

maxage

값: string

maxstale

값: string

clipBegin

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

clipEnd

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

repeatCount

값: 오디오 클립을 반복할 횟수를 나타내는 integer.

repeatDur

값: "250ms", "1s" 등처럼 숫자 형식으로 표현된 시간 지속 시간을 포함하는 string.

예제 9
You will hear a brief chime 
<span data-ssml='{"audio":{"src":"/audio/chime.ogg"}}'></span> when your time is up.

4. 기술적 고려 사항

각 접근 방식에서 구현자는 data-ssml- 속성, 값 및 관련 텍스트 콘텐츠를 소비하여 대상 TTS 기술에 필요한 유효한 형식을 생성해야 한다. 예를 들어 Web Speech API를 대상으로 하는 경우, 구현은 유효한 SSML을 생성해야 한다. 각 발음 기능의 텍스트 콘텐츠를 결정하는 방법은 어느 접근 방식의 구현자에게도 과제가 될 것이다.

다중 속성 접근 방식을 따르는 경우, 구현자는 관련된 모든 속성을 찾아 적절한 SSML 표현으로 수집해야 한다. 구현자는 필수 속성 누락, 충돌하는 기능, 또는 잘못된 값과 같은 작성 오류를 처리하는 방법을 결정해야 한다.

단일 속성 접근 방식을 따르는 경우, 구현자는 JSON 문자열 값을 파싱해야 한다. 기존 W3C 권고안 중 HTML에서 JSON 문자열을 속성 값으로 사용하는 것은 없지만, data- 속성을 사용하는 사용자 지정 애플리케이션에서 그 사용 증거가 있다.

JSON에는 잠재적인 보안 우려가 있으며, 작성 오류로 인해 발생하는 잘못 구성된 JSON 문자열의 영향은 더 넓은 검토가 필요한 문제 중 하나이다. 구현자는 잘못 구성된 JSON뿐만 아니라 잘못된 프로퍼티 및 값 조합을 처리하는 방법을 결정해야 한다. JSON 스키마의 사용은 단일 속성 접근 방식의 작성자와 구현자에게 도움이 될 수 있다.

JSON 스키마가 제안되어 있지만, 개발 중인 SpeakableSpecification과 같은 잠재적으로 관련된 표준이 있다. SSML을 적절한 JSON 스키마로 변환하는 것은 구현자와 작성자에게 혼란을 일으킬 수 있다. 이러한 변환은 종종 "...not exactly 1:1 transformation, but very very close"이다. 작성 도구는 작성자가 직접 JSON을 작성할 필요를 제거함으로써 이러한 우려를 해결할 것으로 가정된다.

A. SSML JSON 스키마

여기의 JSON 스키마 예제를 참조한다.

B. 감사의 말

이 절은 비규범적이다.

다음 사람들은 이 문서의 개발에 기여했다.

B.1 발행 시점에 Pronunciation TF에서 활동 중이던 참가자