CSS 음성 모듈 레벨 1

W3C 후보 권고안 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2023/CRD-css-speech-1-20230214/
최신 공개 버전:
https://www.w3.org/TR/css-speech-1/
에디터스 드래프트:
https://drafts.csswg.org/css-speech-1/
이전 버전:
히스토리:
https://www.w3.org/standards/history/css-speech-1
구현 보고서:
https://wpt.fyi/results/css/css-speech
테스트 수트:
http://test.csswg.org/suites/css-speech-1_dev/nightly-unstable/
피드백:
CSSWG 이슈 저장소
에디터:
(Tetralogical)
Elika J. Etemad / fantasai (Invited Expert)
이전 에디터:
(DAISY Consortium)
Claudio Santambrogio (Opera Software)
(W3C / Canon)
이 명세에 제안 사항 제출:
GitHub 에디터

요약

Speech 모듈은 작성자가 음성 합성 및 선택적 오디오 신호를 사용하여 문서의 렌더링을 선언적으로 제어할 수 있도록 하는 오럴(aural) CSS 속성을 정의합니다. 이 표준은 Voice Browser Activity와 협력하여 개발되었습니다.

CSS는 구조화된 문서(예: HTML, XML 등)의 화면, 인쇄물 등에서의 렌더링을 기술하는 언어입니다.

이 문서의 상태

이 섹션은 문서가 발행된 시점에서의 상태를 설명합니다. 현재 W3C 발행 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인 https://www.w3.org/TR/에서 확인할 수 있습니다.

이 문서는 CSS 작업 그룹에서 후보 권고안 초안으로 권고안 트랙을 통해 발행되었습니다. 후보 권고안으로서의 발행은 W3C 및 그 회원의 공식적인 승인(endorsement)을 의미하지 않습니다. 후보 권고안 초안에는 작업 그룹이 이후 후보 권고안 스냅샷에 포함할 의도가 있는, 이전 후보 권고안에서 변경된 내용이 통합되어 있습니다.

이 문서는 초안이므로 언제든지 업데이트, 대체 또는 폐기될 수 있습니다. 진행 중인 작업 외의 용도로 이 문서를 인용하는 것은 적절하지 않습니다.

피드백은 GitHub 이슈 등록(권장) 시, 제목에 “css-speech”를 포함하여 “[css-speech] …의견 요약…” 형식으로 제출해 주시기 바랍니다. 모든 이슈와 의견은 아카이브됩니다. 또는 (아카이브) 공개 메일링 리스트 www-style@w3.org로 피드백을 보낼 수도 있습니다.

이 문서는 2021년 11월 2일 W3C 프로세스 문서에 따라 관리됩니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 특정 특허에 대해 알고 있으며 해당 특허가 필수 청구항(Essential Claim)을 포함한다고 믿는 개인은 W3C 특허 정책 제6절에 따라 정보를 공개해야 합니다.

다음 기능들은 위험(at-risk) 항목이며, CR 기간 동안 삭제될 수 있습니다:

“위험(at-risk)”은 W3C 프로세스의 용어일 뿐이며, 해당 기능이 실제로 삭제되거나 지연될 위험이 있다는 것을 반드시 의미하지는 않습니다. 이는 해당 기능이 시기적절하게 상호운용성 있게 구현되는 데 어려움이 있을 수 있다고 워킹 그룹이 판단했음을 의미하며, 이러한 표기를 통해 이후 제안 권고(Rec) 단계로 전환 시 필요하다면 해당 기능을 별도의 후보 권고(Rec) 발행 없이도 삭제할 수 있도록 합니다.

1. 소개 및 설계 목표

이 절은 비규범적입니다.

음성으로 정보를 제공하는 방식은 시각장애인, 저시력자, 또는 인쇄물 접근에 제약이 있는 사람들이 흔히 사용하는 방법입니다. 예를 들어, "스크린 리더"는 사용자가 평소에는 접근할 수 없는 시각적 인터페이스와 상호작용할 수 있게 해줍니다. 또한 듣는 것이 (읽는 것과 달리) 선호되거나, 때로는 반드시 요구되는 상황도 있습니다. 이는 정보 접근 능력과 관계없이 마찬가지입니다. 예시: 운전 중 전자책을 재생할 때, 산업·의료 장비 조작을 학습할 때, 가정용 엔터테인먼트 시스템과 상호작용할 때, 어린 아이들에게 읽기를 가르칠 때 등입니다.

이 Speech 모듈에서 정의한 CSS 속성들은 작성자가 문서의 음성 표현을 선언적으로 제어할 수 있게 해줍니다. 문서의 오럴 렌더링에는 음성 합성 ("TTS", 즉 "Text to Speech"의 약어로도 불림) 과 오디오 아이콘 (이 명세에서는 "오디오 신호"라고 함)이 결합됩니다. CSS Speech 속성을 통해 음성의 높낮이와 속도, 볼륨, TTS 음성 등 다양한 요소를 제어할 수 있습니다. 이러한 스타일 시트 속성들은 시각적 속성과 함께(혼합 미디어로) 사용할 수도 있고, 시각적 표현의 완전한 오럴 대안으로도 사용할 수 있습니다.

2. 배경 정보, CSS 2.1

이 절은 비규범적입니다.

CSS Speech 모듈은 설명용 CSS2.1 오럴 부록을 재구성한 것입니다. 이 부록에서는 aural 미디어 타입이 설명되어 있었지만, (현재는 speech 미디어 타입이 권장됨에 따라) 폐기되었습니다. 다만 [CSS2] 명세에서 speech 미디어 타입을 예약해두었으나 실제로 해당 속성들은 정의하지 않았습니다. Speech 모듈은 음성 출력에 적용되는 CSS 속성을 설명하며, 오럴 차원을 위한 새로운 “박스” 모델도 정의합니다.

콘텐츠 제작자는 텍스트 음성 변환 기능이 있는 사용자 에이전트를 위해 어떤 미디어 타입에든 CSS 속성을 포함시킬 수 있습니다. 하지만 일반적으로 allscreen에만 의미가 있습니다. Speech 모듈을 지원하지 않는 사용자 에이전트는 이러한 스타일을 무시합니다.

3. SSML과의 관계

이 절은 비규범적입니다.

이 명세의 일부 기능은 Speech Synthesis Markup Language (SSML) Version 1.1 [SSML]에서 설명된 기능과 개념적으로 유사합니다. 하지만 CSS 모델의 특성상 구문 및/또는 의미론적 측면에서 SSML과의 호환성은 부분적으로만 달성할 수 있습니다. Speech 모듈의 각 속성 정의에는 필요할 경우 SSML의 유사 기능과의 관계를 명확히 하기 위한 설명이 포함되어 있습니다.

3.1. 값 정의

이 명세는 CSS 속성 정의 관례를 따르며, [CSS2]값 정의 문법[CSS-VALUES-3]에서 가져옵니다. 이 명세에서 정의하지 않은 값 타입은 CSS Values & Units [CSS-VALUES-3]에서 정의됩니다. 다른 CSS 모듈과의 결합을 통해 이러한 값 타입의 정의가 확장될 수 있습니다.

각 속성 정의에 명시된 속성별 값 외에도, 이 명세에서 정의한 모든 속성은 CSS-전체 키워드도 속성 값으로 허용합니다. 가독성을 위해 명시적으로 반복하지 않았습니다.

4. 예시

이 예시는 작성자가 "paul"이라는 목소리로 HTML 제목을 읽도록 음성 합성기에 지시하고, "적당한(moderate)" 강세(보통보다 더 강조)를 사용하며, 각 제목(TTS 렌더링 시작 전)에 오디오 신호(지정된 URL의 사전 녹음된 오디오 클립)를 삽입하는 방법을 보여줍니다. 스테레오가 가능한 사운드 시스템에서는, CSS 클래스 heidi가 지정된 단락은 왼쪽 오디오 채널(여성 음성 등)에서 출력되며, peter 클래스는 오른쪽 채널(남성 음성 등)과 대응됩니다. special 클래스를 가진 텍스트 영역의 볼륨은 보통보다 낮으며, 해당 부분이 읽힌 후 강한 일시정지를 추가함으로써 운율 경계가 생성됩니다 (참고: span은 부모 단락에서 voice-family를 상속받습니다).
h1, h2, h3, h4, h5, h6 {
  voice-family: paul;
  voice-stress: moderate;
  cue-before: url(../audio/ping.wav);
  voice-volume: medium 6dB;
}
p.heidi {
  voice-family: female;
  voice-balance: left;
  voice-pitch: high;
  voice-volume: -6dB;
}
p.peter {
  voice-family: male;
  voice-balance: right;
  voice-rate: fast;
}
span.special {
  voice-volume: soft;
  pause-after: strong;
}

...

<h1>I am Paul, and I speak headings.</h1>
<p class="heidi">Hello, I am Heidi.</p>
<p class="peter">
  <span class="special">Can you hear me ?</span>
  I am Peter.
</p>

5. 오럴 포맷팅 모델

오럴 미디어를 위한 CSS 포맷팅 모델은 시각적 박스 모델과 유사한 중첩 맥락 안에서 일어나는 일련의 소리와 정적(침묵) 시퀀스를 기반으로 합니다. 이를 오럴 “박스” 모델이라고 부릅니다. 오럴 “캔버스”는 2채널(스테레오) 공간과 시간적 차원으로 구성되며, 이 안에서 합성 음성과 오디오 신호가 함께 존재합니다. 선택된 요소는 rest, cue, pause 속성(가장 안쪽부터 바깥쪽 순서)으로 둘러싸여 있습니다. 이는 각각 padding, border, margin의 오럴 대응물로 볼 수 있습니다. ::before::after 의사 요소([CSS2])는 요소의 콘텐츠와 rest 사이에 삽입됩니다.

다음 다이어그램은 선택된 <element>에 적용되는 시각적 박스 모델과 오럴 박스 모델의 속성 간의 대응 관계를 보여줍니다:

오럴 '박스' 모델: 선택된 요소가 중앙에 위치하며, 왼쪽(안쪽→바깥쪽 순)에는 rest-before, cue-before, pause-before, 오른쪽에는 rest-after, cue-after, pause-after가 위치. rest는 padding, cue는 border, pause는 margin에 각각 대응.

6. 믹싱 속성

6.1. voice-volume 속성

이름: voice-volume
값: silent | [[x-soft | soft | medium | loud | x-loud] || <decibel>]
초기값: medium
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: silent, 또는 키워드 값(필요시 decibel 오프셋 포함, 0이 아닐 경우)
표준 순서: 문법 순서대로

voice-volume 속성은 작성자가 음성 합성기가 생성하는 오디오 파형의 진폭을 제어할 수 있게 하며, 오디오 신호의 상대적 볼륨 레벨을 선택한 요소의 오럴 박스 모델 내에서 조정할 때에도 사용됩니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 prosody 요소의 volume 속성과 유사하지만, 몇 가지 중요한 차이점이 있습니다. 예를 들어 CSS Speech의 볼륨 키워드와 decibel 단위는 상호 배타적이지 않습니다. 이는 값이 상속 및 결합되는 방식에 기인합니다.

silent
사운드가 생성되지 않음을 지정합니다(텍스트가 "조용히" 읽힙니다).

참고: 이는 음성 볼륨을 음의 무한대 데시벨로 지정한 것과 동일한 효과를 가집니다. 또한 voice-volume 속성 값이 silent인 요소와, speak 속성 값이 none인 요소는 차이가 있습니다. 전자의 경우, 선택한 요소는 실제로 소리가 나지는 않지만, 발화에 소요되는 시간 및 전후 일시정지가 그대로 유지됩니다. (그리고 선택한 요소의 오럴 박스 모델 내의 하위 요소는 voice-volume 값을 재정의할 수 있으므로 오디오 출력이 발생할 수 있습니다.) 후자의 경우, 선택 요소는 오럴 차원에서 렌더링되지 않으며, 재생을 위한 시간이 배정되지 않습니다. (하위 요소가 오럴 박스 모델 내에서 speak 값을 재정의하여 오디오 출력을 생성할 수 있습니다.)

x-soft, soft, medium, loud, x-loud
이 키워드들은 점진적으로 커지는 볼륨 레벨에 해당하며, 청취자의 인지적 음량 요구에 맞는 구현 의존적 값에 매핑됩니다. 이러한 오디오 레벨은 사용자가 청각 환경에 맞게 사운드 옵션을 보정할 수 있도록 보통 환경설정 메커니즘을 통해 제공합니다. x-soft는 사용자의 최소 청취 가능 볼륨에, x-loud최대 허용 볼륨에, medium선호 볼륨에, softloud는 중간값에 매핑됩니다.
<decibel>
이는 위의 키워드 값, 또는 루트 요소의 기본값, 또는 상속된 볼륨 레벨(키워드 값과 decibel 오프셋의 조합일 수도 있으며, 이 경우 decibel 값은 누적됨) 대비 상대적인 (양/음) 변화를 의미합니다. 상속된 볼륨 레벨이 silent이면, 이 voice-volume도 지정된 <decibel> 값과 무관하게 silent로 해석됩니다.

<decibel> 타입은 "dB" (데시벨 단위) 단위 식별자를 가진 치수를 의미합니다. 데시벨은 다음 로그 방정식에 따라 새 신호 진폭 a1과 현재 진폭 a0의 제곱 비율을 나타냅니다: volume(dB) = 20 × log10(a1 / a0).

참고: -6.0dB는 오디오 신호의 진폭이 대략 절반, +6.0dB는 대략 두 배가 됨을 의미합니다.

참고: 인지되는 음량은 청취 환경, 사용자 선호, 신체적 능력 등 다양한 요인에 따라 달라집니다. x-soft에서 x-loud까지의 효과적 볼륨 변화가 오디오 출력의 다이내믹 레인지(음량)의 범위가 됩니다. 보통 이 범위는 소음이 많은 환경에서 압축되며, 즉, x-soft의 인지 음량이 조용한 환경보다 x-loud에 가깝게 됩니다. 도서관, 야간 독서 등 조용함이 요구되는 환경에서는 x-softx-loud 모두 낮은 볼륨으로 매핑되는 경우도 있습니다.

6.2. voice-balance 속성

이름: voice-balance
값: <number> | left | center | right | leftwards | rightwards
초기값: center
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: 지정값이 -100 ~ 100 사이의 <number>로 해석됨
표준 순서: 문법 순서대로

voice-balance 속성은 오디오 출력을 좌우 사운드 스테이지에 따라 공간적으로 분배합니다. 한 쪽 끝은 왼쪽, 다른 쪽 끝은 청취자의 위치를 기준으로 오른쪽입니다. 작성자는 좌/우 극단 사이의 중간 단계를 지정하여 좌우 축을 따라 오디오 분리도를 표현할 수 있습니다.

참고: 이 속성의 기능은 SSML 마크업 언어 [SSML]에는 해당하는 기능이 없습니다.

<number>
-100에서 100까지(포함) 숫자. -100 미만은 -100으로, 100 초과는 100으로 고정됩니다. -100은 왼쪽, 100은 오른쪽을 의미합니다. 0은 중앙값으로, 좌우의 오디오 분리도가 없는 상태입니다. (스테레오 시스템에서는 좌/우 스피커에 동일하게 신호가 분배됨)
left
-100과 동일.
center
0과 동일.
right
100과 동일.
leftwards
상속된 voice-balance 값에서 20을 빼서(결과가 -100 미만이면 -100으로 고정) 소리를 왼쪽으로 이동시킴.
rightwards
상속된 voice-balance 값에 20을 더해서(결과가 100 초과면 100으로 고정) 소리를 오른쪽으로 이동시킴.

사용자 에이전트는 다양한 오디오 믹싱 능력을 가진 여러 종류의 사운드 시스템에 연결될 수 있습니다. 모노, 스테레오, 서라운드 시스템에서의 동작은 다음과 같이 정의됩니다:

CSS Speech 모듈의 향후 개정에서는 3차원 오디오 지원이 포함될 수 있습니다. 이 경우 작성자는 “방위각(azimuth)” 및 “고도(elevation)” 값을 지정할 수 있게 됩니다. 즉, 현재 명세로 작성된 콘텐츠도 3차원 오디오를 지원하는 CSS Speech 버전과 호환될 수 있습니다. 이를 위해 현재 voice-balance 속성의 값은 “방위각” 각도와 호환되도록 설계되어 있습니다. 구체적으로, 현재 좌우 오디오 축(측면 사운드 스테이지)과 청취자 위치를 중심으로 한 360도 평면은 다음과 같이 매핑됩니다:

참고: 사운드 시스템이 사용자에 의해 구성되어 문서 작성자가 지정한 좌우 오디오 분배에 영향을 줄 수 있습니다. 현대 사운드 시스템의 다양한 “서라운드” 모드(기본 스테레오 포함)는 오디오 신호의 공간적 배열을 크게 바꿔놓는 경우가 많습니다. 3차원 사운드 스테이지의 환상은 일반적으로 위상 이동, 디지털 딜레이, 볼륨 조절(채널 믹싱) 등 여러 기술의 조합으로 달성됩니다. 일부 사용자는 모든 사운드를 단일 모노 채널로 강제하는 경우도 있는데, 이 경우 voice-balance 속성의 효과는 전혀 느껴지지 않습니다. 따라서 실제 렌더링의 충실도는 이러한 사용자 맞춤 설정에 따라 달라지며, voice-balance 속성은 원하는 결과만을 명시할 뿐입니다.

참고: 많은 음성 합성기는 모노 사운드만 생성하므로 voice-balance 속성을 본질적으로 지원하지 않습니다. 좌우 축의 사운드 분배는 합성 이후(음성 지원 사용자 에이전트가 문서 내 여러 오디오 소스를 믹싱할 때) 발생합니다.

7. 발화 속성

7.1. speak 속성

이름: speak
값: auto | never | always
초기값: auto
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

speak 속성은 텍스트를 음성으로 렌더링할지 여부를 결정합니다.

참고: 이 속성의 기능은 SSML 마크업 언어 [SSML]에는 해당 기능이 없습니다.

auto
displaynone일 때 계산값이 never가 되고, 그렇지 않으면 계산값이 auto가 됩니다. 계산된 auto의 사용값은 always와 동일하며, visibilityvisible일 때만 그렇고, 그렇지 않으면 never이 됩니다.

참고: none 값의 display 속성은 선택한 요소의 하위 요소에서 재정의할 수 없지만, auto 값의 speak 속성은 never 또는 always로 재정의할 수 있습니다.

never
이 값은 요소(일시정지, 신호, 휴지, 실제 콘텐츠 포함)를 렌더링하지 않게 만듭니다(즉, 오럴 차원에서 아무 효과도 없음).

참고: 이 값이 적용된 요소의 하위 요소는 재정의가 가능하므로, 하위 요소는 display: none과 달리 오럴 렌더링에 참여할 수 있습니다. 단, 상위 요소의 일시정지, 신호, 휴지 속성은 오럴 차원에서 "비활성화"되며, 일시정지 축소나 인접 휴지의 누적 동작에 기여하지 않습니다.

always
요소가 오럴로 렌더링됩니다 (display 값, 또는 상위 요소의 displayspeak 값과 상관없음).

참고: 이 값을 사용하면 요소가 시각적 캔버스에는 렌더링되지 않아도 오럴에서는 렌더링될 수 있습니다.

7.2. speak-as 속성

이름: speak-as
값: normal | spell-out || digits || [ literal-punctuation | no-punctuation ]
초기값: normal
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

speak-as 속성은 미리 정의된 가능성 목록을 기반으로 텍스트를 어떤 방식으로 오럴로 렌더링할지 결정합니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 say-as 요소와 개념적으로 유사하며(가능한 값은 [SSML-SAYAS] W3C Note에 설명됨), 설계 목표는 비슷하지만 CSS 모델은 기본적인 발음 규칙 집합에 한정됩니다.

normal
요소의 콘텐츠를 언어 의존 발음 규칙에 따라 렌더링합니다. 예를 들어, 문장 부호는 그대로 읽지 않고 자연스러운 일시정지 등으로 처리됩니다.
spell-out
텍스트를 글자 단위로 읽습니다(약어, 두문자어 등에서 유용). 악센트 문자가 드문 언어에서는 악센트를 생략한 철자로 대체할 수 있습니다. 예를 들어 영어에서 “rôle”은 “role”로도 표기 가능하며, 구현체는 “rôle”을 “R O L E”로 읽을 수 있습니다.
digits
숫자를 한 자리씩 읽습니다. 예를 들어 “twelve”는 “one two”, “31”은 “three one”으로 읽게 됩니다.

참고: 음성 합성기는 숫자가 무엇인지 알고 있습니다. speak-as 속성은 사용자 에이전트가 숫자를 어떻게 읽을지 어느 정도 제어할 수 있게 하며, 실제 음성 합성기로 전달하기 전 텍스트 전처리 단계로 구현될 수 있습니다.

literal-punctuation
세미콜론, 중괄호 등과 같은 문장 부호를 그대로 이름을 말하듯 읽습니다(즉, 자연스러운 일시정지 대신 문자 그대로 읽음).
no-punctuation
문장 부호는 읽지 않으며, 일시정지로도 처리하지 않습니다.

8. 일시정지 속성

8.1. pause-beforepause-after 속성

이름: pause-before, pause-after
값: <time> | none | x-weak | weak | medium | strong | x-strong
초기값: none
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

pause-beforepause-after 속성은 운율 경계를 지정합니다 (특정 길이의 정적(침묵)), 즉, 요소의 음성 합성 렌더링 전(또는 후)에 발생하거나, cue-before(또는 cue-after)가 지정된 경우에는 오럴 박스 모델(aural box model) 내에서 신호음 전/후에 발생합니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 break 요소와 유사하지만, CSS Speech의 pause 운율 경계 적용은 aural box model 내에서 별도의 고려사항(예: "축소된 일시정지")이 필요합니다.

<time>
일시정지를 절대 시간 단위(초, 밀리초 등)로 지정합니다(예: "+3s", "250ms"). 0 이상 값만 허용됩니다.
none
0ms와 동일(음성 프로세서가 운율 경계를 생성하지 않음).
x-weak, weak, medium, strong, 그리고 x-strong
음성 출력에서 운율 경계의 강도로 일시정지를 표현합니다. 정확한 시간은 구현에 따라 다릅니다. 값은 요소 간에 점진적으로(개념적으로 증가하는) 경계 강도를 나타냅니다.

참고: 더 강한 콘텐츠 경계에는 일반적으로 일시정지가 동반됩니다. 예를 들어, 단락 사이의 경계는 문장 내 단어 사이의 경계보다 훨씬 강한 경우가 많습니다.

이 예시는 특정 요소에 대해(사용자 에이전트 스타일시트에서 정의된) 기본 운율 경계 강도를 작성자 스타일로 재정의하는 방법을 보여줍니다.
p { pause: none } /* pause-before: none; pause-after: none */

8.2. pause 단축 속성

이름: pause
값: <'pause-before'> <'pause-after'>?
초기값: N/A (각 속성 참조)
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: N/A (각 속성 참조)
표준 순서: 문법 순서

pause 속성은 pause-beforepause-after의 단축 속성입니다. 값이 두 개 주어지면 첫 번째 값은 pause-before, 두 번째 값은 pause-after에 적용됩니다. 값이 하나만 주어지면 두 속성 모두에 적용됩니다.

속성 값 예시:

h1 { pause: 20ms; } /* pause-before: 20ms; pause-after: 20ms */
h2 { pause: 30ms 40ms; } /* pause-before: 30ms; pause-after: 40ms */
h3 { pause-after: 10ms; } /* pause-before: 지정되지 않음; pause-after: 10ms */

8.3. 일시정지 축소

pause는 오럴 "박스"와 그 앞뒤 오럴 "박스" 사이의 최소 거리를 정의합니다. 인접한 pause는 가장 강한 명명된 단절과 가장 긴 절대 시간 구간을 선택하여 병합됩니다. 예를 들어, "strong"과 "weak"을 병합하면 "strong"이 선택되고, "1s"와 "250ms"를 병합하면 "1s"가 선택되며, "strong"과 "250ms"를 병합하면 두 값이 모두 적용됩니다.

다음의 pause들은 인접한 것으로 간주됩니다:

축소된 일시정지는 그 구성 pause 중 하나라도 다른 pause와 인접하면, 해당 pause와 인접한 것으로 간주됩니다.

참고: pause는 요소의 콘텐츠와 cue 사이에서 cue 바깥으로 이동되었습니다. 이는 CSS2.1 오럴 부록 [CSS2]와의 하위 호환성이 없습니다.

9. 휴지 속성

9.1. rest-beforerest-after 속성

이름: rest-before, rest-after
값: <time> | none | x-weak | weak | medium | strong | x-strong
초기값: none
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

rest-beforerest-after 속성은 오럴 박스 모델 내에서 요소의 음성 합성 렌더링 전(또는 후)에 발생하는 운율 경계(특정 길이의 정적(침묵))를 지정합니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 break 요소와 유사하지만, CSS Speech의 rest 운율 경계 적용은 오럴 박스 모델 내에서 별도의 고려사항(예: 중간에 삽입된 오디오 신호, 인접 휴지의 누적 동작)이 필요합니다.

<time>
휴지를 절대 시간 단위(초, 밀리초 등)로 지정합니다(예: "+3s", "250ms"). 0 이상 값만 허용됩니다.
none
0ms와 동일. (음성 프로세서가 운율 경계를 생성하지 않음.)
x-weak, weak, medium, strong, 그리고 x-strong
음성 출력에서 운율 경계의 강도로 휴지를 표현합니다. 정확한 시간은 구현에 따라 다릅니다. 값은 요소 간에 점진적으로(개념적으로 증가하는) 경계 강도를 나타냅니다.

일시정지 속성과 달리, 휴지는 요소의 콘텐츠와 cue-before, cue-after 내용 사이에 삽입됩니다. 인접 휴지는 누적 처리되며, 축소되지 않습니다.

9.2. rest 단축 속성

이름: rest
값: <'rest-before'> <'rest-after'>?
초기값: N/A (각 속성 참조)
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: N/A (각 속성 참조)
표준 순서: 문법 순서

rest 속성은 rest-beforerest-after의 단축 속성입니다. 값이 두 개 주어지면 첫 번째 값은 rest-before, 두 번째 값은 rest-after에 적용됩니다. 값이 하나만 주어지면 두 속성 모두에 적용됩니다.

10. 신호음(cue) 속성

10.1. cue-beforecue-after 속성

이름: cue-before, cue-after
값: <uri> <decibel>? | none
초기값: none
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

cue-beforecue-after 속성은 오디오 아이콘(즉, 미리 녹음/생성된 사운드 클립)을 오럴 박스 모델 내에서 해당 요소의 앞(혹은 뒤)에 재생하도록 지정합니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 audio 요소와 관련이 있어 보일 수 있지만, 실제로는 주요 차이점이 있습니다. 예를 들어, 오럴 박스 모델에서는 오디오 신호가 요소의 볼륨 레벨과 연관되고, CSS Speech의 오디오 아이콘은 SSML의 audio 요소에 비해 제한된 기능만 제공합니다.

<uri>
URI는 오디오 아이콘 리소스를 지정합니다. 사용자 에이전트가 지정된 오디오 아이콘을 렌더링할 수 없을 경우(예: 파일 리소스 누락, 지원하지 않는 오디오 코덱 등), 종소리 등 대체 신호음을 재생하는 것이 권장됩니다.
none
오디오 아이콘을 사용하지 않음을 지정합니다.
<decibel>
선택한 요소의 voice-volume 속성의 계산값을 기준으로(오럴 박스 모델 내) 상대적인 변화(양/음)를 나타냅니다. (즉, voice-volume 속성이 변하면 오디오 신호의 볼륨도 바뀜) 생략 시 암시적 값은 0dB로 계산됩니다.

voice-volume 속성의 계산값이 silent이면, 오디오 신호도 silent로 설정됩니다(이 <decibel> 값에 관계없이). 그렇지 않은 경우(즉, silent가 아닐 때), voice-volume 값은 항상 볼륨 키워드에 상대적으로 지정되며(정의 참조), 이는 사용자가 조정한 "선호" 음량 설정의 스케일에 매핑됩니다. 상속된 voice-volume 값에 이미 dB 오프셋이 있는 경우, 오디오 신호에 대한 dB 오프셋은 누적되어 적용됩니다.

참고: 볼륨이 silent인 오디오 신호와 none인 신호는 차이가 있습니다. 전자의 경우, 오디오 신호는 실제 재생된 것과 동일한 시간이 소요되지만 소리가 나지 않으며, 후자의 경우 오디오 신호 자체가 아예 존재하지 않게 됩니다(즉, 오럴 차원에서 신호를 위한 시간이 할당되지 않음).

속성 값 예시:

a
{
  cue-before: url(/audio/bell.aiff) -3dB;
  cue-after: url(dong.wav);
}

h1
{
  cue-before: url(../clips-1/pop.au) +6dB;
  cue-after: url(../clips-2/pop.au) 6dB;
}

div.caution { cue-before: url(./audio/caution.wav) +8dB; }

10.2. 오디오 신호와 음성 합성 볼륨 레벨 간의 관계

이 절은 비규범적입니다.

선택한 요소의 오럴 박스 모델 내에서 오디오 신호와 음성 합성의 볼륨 레벨은 서로 연관되어 있습니다. 예를 들어, 오디오 신호의 볼륨이 +0dB로 지정된 경우(<decibel> 값), 재생 시 지각되는 음량은 선택한 요소의 음성 합성 렌더링(voice-volume 속성의 계산값 적용)에 가깝게 됩니다. silent 계산값이 voice-volume 속성에 적용되면 오디오 신호도 "강제로" 음소거됩니다 (즉, 오디오 신호 <decibel> 값과 무관하게).

voice-volume 속성의 볼륨 키워드는 저작 시점에 알 수 없는 요구사항(예: 청취 환경, 개인 선호도)에 맞춰 사용자가 조정합니다. 따라서 오디오 신호와 음성 합성의 음량 정렬을 달성하려면, 오디오 신호의 볼륨 레벨이(평균적으로, 음성 스트림의 변화로 인해 체감 음량이 달라질 수 있음) 해당 voice-family 기준 "일반적인" 청취 조건(기본 시스템 볼륨, 주파수 대역 균등화 기준)에서의 음성 합성 출력과 일치해야 합니다. 음성 프로세서는 합성된 TTS 오디오의 파형 진폭을 직접 제어할 수 있고, 사용자 에이전트도 오디오 신호의 볼륨 출력을 조정할 수 있으므로(즉, 디지털 사운드 클립의 내재적 파형 진폭에 따라 증폭/감쇠), 이를 통해 구현체는 오럴 박스 모델 내에서 TTS와 신호음 오디오 스트림의 음량을 사용자 조정 볼륨 레벨에 따라 관리할 수 있습니다 (정의된 키워드 참조).

지각된 오디오 특성(예: 음량)과 디지털 오디오 신호에 적용된 처리(예: 신호 압축) 간의 복잡한 관계로 인해, 감쇠는 일반적으로 데시벨 단위(0dB(최대 입력, 클리핑 임계치 근처)~ -60dB(완전 무음) 범위)로 표시되는 단순 시나리오를 가정합니다. 이 맥락에서 "표준" 오디오 클립은 이 값 사이에서 진폭이 오가며, 최고 피크는 왜곡을 피하기 위해 -3dB에 가깝고, 관련 청취 구간의 평균(RMS) 볼륨은 가능한 한 높게 설정합니다(너무 작으면 증폭 과정에서 배경 소음이 커짐). 이렇게 하면 사전 녹음 오디오와 TTS 출력이 자연스럽게 결합되어 전환 시 음량 차이를 느낄 수 없게 됩니다. 업계 표준이 존재하는 것은 아니지만, 서로 다른 TTS 엔진은 증폭/감쇠가 없을 때 비슷한 음량 신호를 생성하는 경향이 있습니다. 음성 및 부드러운 음악의 경우 -15dB RMS가 표준에 가깝습니다.

10.3. cue 단축 속성

이름: cue
값: <'cue-before'> <'cue-after'>?
초기값: N/A (각 속성 참조)
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: N/A (각 속성 참조)
표준 순서: 문법 순서

cue 속성은 cue-beforecue-after의 단축 속성입니다. 값이 두 개 주어지면 첫 번째 값은 cue-before, 두 번째 값은 cue-after에 적용됩니다. 값이 하나만 주어지면 두 속성 모두에 적용됩니다.

단축 표기 예시:

h1
{
  cue-before: url(pop.au);
  cue-after: url(pop.au);
}
/* ...는 다음과 동일합니다: */
h1
{
  cue: url(pop.au);
}

11. 음성 특성 속성

11.1. voice-family 속성

이름: voice-family
값: [[<family-name> | <generic-voice>],]* [<family-name> | <generic-voice>] | preserve
초기값: 구현 의존
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

voice-family 속성은 콤마로 구분된 우선순위별 음성 구성 값 목록을 지정합니다. (이는 시각 스타일시트의 font-family와 유사합니다.) 각 구성 값은 일치 기준을 명시하여 음성 합성기 음성 인스턴스를 지정할 수 있습니다. 자세한 내용은 음성 선택 섹션을 참고하세요.

<generic-voice> = [<age>? <gender> <integer>?]

참고: 이 속성의 기능은 SSML 마크업 언어의 voice 요소와 유사하지만, CSS Speech는 SSML의 정교한 음성 언어 선택과 동등한 기능을 제공하지 않습니다. 이 기술적 한계는 향후 Speech 모듈의 개정에서 해소될 수 있습니다.

<family-name>
값은 특정 음성 인스턴스(예: Mike, comedian, mary, carlos2, "valley girl")를 의미합니다. font-family 이름과 마찬가지로, 음성 이름은 따옴표로 감싸 문자열로 지정하거나, 하나 이상의 CSS 식별자 시퀀스로 지정할 수 있습니다.

참고: 따라서 대부분의 구두점 문자나, 토큰 시작에 오는 숫자는 따옴표가 없는 음성 이름에서 반드시 이스케이프되어야 합니다.

식별자 시퀀스를 음성 이름으로 지정하면, 계산값은 시퀀스의 모든 식별자를 공백으로 연결한 문자열이 됩니다.

"male", "female", "neutral"과 같은 성별 키워드와 동일하거나, CSS-wide 키워드 혹은 preserve와 일치하는 음성 이름은 키워드와의 혼동을 피하기 위해 반드시 따옴표로 감싸야 합니다. default 키워드는 추후 사용을 위해 예약되어 있으므로, 음성 이름으로 사용할 때에도 따옴표로 감싸야 합니다.

참고: [SSML]에서는 음성 이름이 공백으로 구분되며, 공백 문자를 포함할 수 없습니다.

공백, 숫자, 하이픈 이외의 구두점이 포함된 음성 이름은 인용부호로 감싸는 것이 권장됩니다. (따옴표 없이도 유효하지만 코드 가독성 향상 목적) 예시: voice-family: "john doe", "Henry the-8th";

<age>
가능한 값은 child, young, old로, 음성 선택 시 선호하는 연령대를 나타냅니다.

참고: [SSML]에서 추천 매핑은 다음과 같습니다: child = 6세, young = 24세, old = 75세. 더 유연한 연령대 범위는 구현체별 음성 매칭 알고리즘에서 사용할 수 있습니다.

<gender>
male, female, neutral 중 하나로, 각각 남성, 여성, 중성 음성을 지정합니다.

참고: 나이 또는 성별과 인지 가능한 음성 유형 간의 관계 해석은 문화, 언어, 생물학 등 수많은 기준에 따라 달라지므로 보편적으로 정의할 수 없습니다. 본 명세의 기능은 다양한 음성 환경에 합리적으로 적용 가능한 단순화된 모델을 제공합니다. 향후 음성 합성기 구현이 표준화됨에 따라, 음성 매칭 알고리즘의 정밀도가 개선될 수 있습니다.

<integer>
선호하는 음성 변형(예: "두 번째 남자 아이 음성")을 나타내는 정수입니다. 0을 제외한 양의 정수만 허용됩니다. 1 값은 모든 일치 음성 중 첫 번째를 의미합니다.
preserve
voice-family 값이 콘텐츠 마크업 내 언어가 바뀌더라도 상속 및 사용됨을 의미합니다. (아래 음성 선택 및 언어 처리 섹션 참고) 루트 요소에 적용할 경우 inherit와 동일하게 동작합니다. 참고: 해당 요소의 하위 요소는 preserve 값을 자동으로 상속받으며, 명시적으로 다른 voice-family 값(예: 이름, 성별, 연령)으로 재정의하지 않는 한 계속 유지됩니다.

잘못된 선언 예시:

voice-family: john/doe; /* 슬래시 문자는 이스케이프해야 함 */
voice-family: john "doe"; /* 식별자 시퀀스에 문자열을 포함할 수 없음 */
voice-family: john!; /* 느낌표는 이스케이프해야 함 */
voice-family: john@doe; /* "@" 문자는 이스케이프해야 함 */
voice-family: #john; /* 식별자는 해시 문자로 시작할 수 없음 */
voice-family: john 1st; /* 식별자는 숫자로 시작할 수 없음 */

11.1.1. 음성 선택, 콘텐츠 언어

voice-family 속성은 음성 합성기 음성 인스턴스 선택 지침으로 사용됩니다. 이 과정에서 음성 지원 사용자 에이전트는 선택한 요소의 마크업 콘텐츠 내 언어도 반드시 고려해야 합니다. "name", "gender", "age", 선호 "variant"(인덱스)는 콘텐츠 계층 구조를 따라 하위 요소로 상속되는 음성 선택 힌트입니다. 콘텐츠 구조 내 어느 시점이든 언어는 명시된 CSS 음성 특성보다 우선순위가 높습니다.

다음 목록은 음성 선택 알고리즘을 설명합니다 (여기서 "언어" 정의는 방언 등 변형을 포함하도록 느슨하게 사용됨):

음성 합성기 음성은 CSS 음성 특성이 콘텐츠 흐름 내에서 변경될 때마다 반드시 재평가(즉, 선택 프로세스를 다시 수행)해야 합니다. 콘텐츠 언어가 바뀔 때마다 음성도 재계산해야 하며, 단 preserve 키워드를 사용할 때는 예외입니다 (이는 외국어 텍스트를 해당 언어용이 아닌 음성으로 읽게 하고 싶을 때 유용함. 아래 예시 참고).

참고: 음성을 동적으로 계산하면 예기치 않은 지연이 발생할 수 있으므로, 사용자 에이전트는 재생 시작 전에 문서 트리 내에서 구체적 음성 인스턴스를 최대한 미리 결정해야 합니다.

속성 값 예시:

h1 { voice-family: announcer, old male; }
p.romeo  { voice-family: romeo, young male; }
p.juliet { voice-family: juliet, young female; }
p.mercutio { voice-family: young male; }
p.tybalt { voice-family: young male; }
p.nurse { voice-family: amelie; }

...

<p class="romeo" xml:lang="en-US">
  The French text below will be spoken with an English voice:
  <span style="voice-family: preserve;" xml:lang="fr-FR">Bonjour monsieur !</span>

  The English text below will be spoken with a voice different
  than that corresponding to the class "romeo"
  (which is inherited from the "p" parent element):
  <span style="voice-family: female;">Hello sir!</span>
</p>

11.2. voice-rate 속성

이름: voice-rate
값: [normal | x-slow | slow | medium | fast | x-fast] || <percentage>
초기값: normal
적용 대상: 모든 요소
상속: yes
백분율: 기본값 참조
계산값: 키워드 값, 필요시(100%가 아니면) 키워드 기준 백분율도 포함
표준 순서: 문법 순서

voice-rate 속성은 합성된 음성의 생성 속도를(분당 단어 수 기준) 조절합니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 prosody 요소의 rate 속성과 유사하지만, CSS Speech의 rate 키워드와 백분율 조정자는 상속 및 결합 방식 때문에 상호 배타적이지 않습니다.

normal
현재 활성 음성의 음성 합성기가 생성하는 기본 속도입니다. 구현체 및 언어, 방언, 음성의 "성격"에 따라 달라집니다.
x-slow, slow, medium, fastx-fast
구현체별, 음성별로 정의되는 점진적으로 빨라지는 발화 속도 시퀀스입니다. 예를 들어 영어의 경우 보통 값(분당 단어 수)은 x-slow=80, slow=120, medium=180~200, fast=500 등입니다.
<percentage>

0 이상의 백분율 값만 허용됩니다. 이는 위의 키워드 값, 루트 요소의 기본값, 또는 상속된 발화 속도(키워드와 백분율 조합일 수 있음, 이 경우 백분율은 곱셈으로 누적) 대비 변화량을 의미합니다. 예를 들어 50%는 발화 속도가 0.5배(절반)로 곱해짐을 의미합니다. 100% 초과는(기준 키워드 대비) 더 빠른 속도, 100% 미만은 더 느린 속도가 됩니다.

상속 값 예시:

<body>
  <e1>
    <e2>
      <e3>
        ...
      </e3>
    </e2>
  </e1>
</body>

body { voice-rate: inherit; } /* 초기값은 'normal'
                                 (실제 발화 속도 값은
                                 활성 음성에 따라 다름) */

e1 { voice-rate: +50%; } /* 계산값: ['normal'과 50%], 즉 'normal' 기준 속도의 0.5배(절반) */

e2 { voice-rate: fast 120%; } /* 계산값: ['fast'와 120%], 즉 'fast' 기준 속도의 1.2배 */

e3 { voice-rate: normal; /* 발화 속도를 음성의 고유값으로 "리셋",
                            계산값은 'normal'(아래 주석 참조) */
     voice-family: "another-voice"; } /* 음성이 다르므로
                                         계산된 발화 속도도 "body"와 다를 수 있음
                                         (계산값은 동일해도 실제 값은 음성별로 다름) */

11.3. voice-pitch 속성

이름: voice-pitch
값: <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]]
초기값: medium
적용 대상: 모든 요소
상속: yes
백분율: 상속값 참조
계산값: 키워드만 지정된 경우 미리 정의된 피치 키워드 중 하나, 그 외에는 현재 voice-family 기반의 고정 주파수에 지정된 상대 오프셋(있는 경우)을 적용하여 계산된 절대 주파수
표준 순서: 문법 순서

voice-pitch 속성은 생성된 음성 출력의 "기준선" 피치를 지정합니다. 이는 사용된 voice-family 인스턴스에 따라 달라지며, 음성 합성기마다 다를 수 있습니다 (출력의 평균 피치에 대략 해당). 예를 들어, 남성 음성의 일반적인 피치는 약 120Hz, 여성 음성은 약 210Hz입니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 prosody 요소의 pitch 속성과 유사하지만, 몇 가지 중요한 차이점이 있습니다. 예를 들어 CSS Speech 피치 키워드와 상대 변화(주파수, 세미톤, 백분율)는 값이 상속 및 결합되는 방식 때문에 상호 배타적이지 않습니다.

<frequency>
주파수 단위 값(헤르츠 또는 킬로헤르츠, 예: 100Hz, +2kHz). absolute 키워드가 지정된 경우 양수만 허용됩니다. 그렇지 않으면(absolute 키워드 미지정 시), 음수는 감소, 양수는 증가(상속값 기준)를 의미합니다. 예: 2kHz는 양의 오프셋(+2kHz와 동일), +2kHz absolute는 절대 주파수(2kHz absolute와 동일).
absolute
지정 시 주파수 값이 절대값임을 나타냅니다. 음수 주파수를 지정하면 계산값은 0이 됩니다.
<semitones>
상속값에 대한 상대 변화(감소 또는 증가)를 지정합니다. <semitones> 값은 단위 식별자 st (세미톤)가 붙은 차원이어야 함. 세미톤은 12평균율 크로매틱 스케일의 각 음 사이 간격에 해당. 세미톤은 연속된 두 피치 주파수 간의 차이로 정량화할 수 있습니다. 정확히 한 세미톤만큼 떨어진 두 주파수의 비율은 2의 12제곱근(약 1.0594631)입니다. 따라서 세미톤 오프셋에 해당하는 헤르츠 값은 적용 기준이 되는 초기 주파수에 따라 달라집니다. (즉, 세미톤은 고정된 헤르츠 값이 아닙니다.)
<percentage>
양수, 음수 백분율 값 모두 허용. 상속값 대비 증가(양수) 또는 감소(음수)를 표현합니다. 계산값은 상속값에 지정된 비율만큼 더하거나 빼서 산출됩니다. 예: 상속값 200Hz에 50%(+50%)를 적용하면 200 + (200*0.5) = 300Hz. -50%라면 200-(200*0.5) = 100Hz.
x-low, low, medium, high, x-high
구현 및 음성별로 정의되는 점진적으로 증가하는 피치 레벨 시퀀스. 해당 요소의 계산값이 키워드만 있는 경우(상대 오프셋 없음), 음성 변경 시 해당 절대 주파수도 재평가됨. 반대로 상대 오프셋이 적용되면 오프셋 지정 시점의 현재 음성을 기준으로 결과 주파수를 계산하므로, 계산 주파수는 스타일 계단식에서 이후 음성 변경에도 절대적으로 상속됨. 따라서, 음성 변경 시 키워드→실제 주파수 변환이 재평가되길 원할 때만 키워드 값을 사용하는 것이 좋음.

계산된 절대 주파수가 음수면 0Hz로 고정됩니다. 음성 지원 사용자 에이전트는 가능한 모든 주파수 값 대신 특정 범위만 지원할 가능성이 높습니다. 실제 값은 구현체별 최소/최대값으로 고정될 수 있습니다. 예: 0Hz도 계산될 수 있으나, 합성기 맥락에서는 더 의미 있는 값으로 고정될 수 있습니다.

속성 값 예시:

h1 { voice-pitch: 250Hz; } /* 상속된 절대 주파수 대비 양의 오프셋 */
h1 { voice-pitch: +250Hz; } /* 위와 동일 */
h2 { voice-pitch: +30Hz absolute; } /* 증가가 아님 */
h2 { voice-pitch: absolute 30Hz; } /* 위와 동일 */
h3 { voice-pitch: -20Hz; } /* 상속된 절대 주파수 대비 음의 오프셋(감소) */
h4 { voice-pitch: -20Hz absolute; } /* 잘못된 문법 => 값 무시("absolute"와 음수 주파수는 함께 쓸 수 없음) */
h5 { voice-pitch: -3.5st; } /* 세미톤, 음의 오프셋 */
h6 { voice-pitch: 25%; } /* "상속값의 1/4을 상속값에 더한다"와 동일 */
h6 { voice-pitch: +25%; } /* 위와 동일 */

11.4. voice-range 속성

이름: voice-range
값: <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]]
초기값: medium
적용 대상: 모든 요소
상속: yes
백분율: 상속값 참조
계산값: 키워드만 지정된 경우 미리 정의된 피치 키워드 중 하나, 그 외에는 현재 voice-family 기반의 고정 주파수에 지정된 상대 오프셋(있는 경우)을 적용하여 계산된 절대 주파수
표준 순서: 문법 순서

voice-range 속성은 "기준선" 피치의 가변성, 즉 기본 주파수가 음성 출력의 평균 피치에서 얼마나 벗어날 수 있는지를 지정합니다. 생성된 음성의 동적 피치 범위는 감정이 풍부한 목소리(예: 억양 변화로 의미 강조)를 사용할수록 일반적으로 증가합니다. 보통, 낮은 범위는 평평하고 단조로운 목소리를, 높은 범위는 생동감 있는 목소리를 만듭니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 prosody 요소의 range 속성과 유사하지만, 몇 가지 중요한 차이점이 있습니다. 예를 들어 CSS Speech 피치 범위 키워드와 상대 변화(주파수, 세미톤, 백분율)는 값이 상속 및 결합되는 방식 때문에 상호 배타적이지 않습니다.

<frequency>
주파수 단위 값(헤르츠 또는 킬로헤르츠, 예: 100Hz, +2kHz). absolute 키워드가 지정된 경우 양수만 허용됩니다. 그렇지 않으면(absolute 키워드 미지정 시), 음수는 감소, 양수는 증가(상속값 기준)를 의미합니다. 예: 2kHz는 양의 오프셋(+2kHz와 동일), +2kHz absolute는 절대 주파수(2kHz absolute와 동일).
absolute
지정 시, 주파수 값이 절대값임을 나타냅니다. 음수 주파수를 지정하면 계산값은 0이 됩니다.
<semitones>
상속값에 대한 상대 변화(감소/증가, 단위: 세미톤)를 지정합니다.
<percentage>
양수, 음수 백분율 값은 상속값 대비 증가(양수), 감소(음수)를 의미합니다. 계산값은 상속값에 지정된 비율만큼 더하거나 빼서 산출됩니다. 예: 상속값 200Hz에 50%(+50%)를 적용하면 200 + (200*0.5) = 300Hz. -50%라면 200-(200*0.5) = 100Hz.
x-low, low, medium, high, x-high
구현 및 음성별로 정의되는 점진적으로 증가하는 피치 레벨 시퀀스. 해당 요소의 계산값이 키워드만 있는 경우(상대 오프셋 없음), 음성 변경 시 해당 절대 주파수도 재평가됨. 반대로 상대 오프셋이 적용되면 오프셋 지정 시점의 현재 음성을 기준으로 결과 주파수를 계산하므로, 계산 주파수는 스타일 계단식에서 이후 음성 변경에도 절대적으로 상속됨. 따라서, 음성 변경 시 키워드→실제 주파수 변환이 재평가되길 원할 때만 키워드 값을 사용하는 것이 좋음.

계산된 절대 주파수가 음수면 0Hz로 고정됩니다. 음성 지원 사용자 에이전트는 가능한 모든 주파수 값 대신 특정 범위만 지원할 가능성이 높습니다. 실제 값은 구현체별 최소/최대값으로 고정될 수 있습니다. 예: 0Hz도 계산될 수 있으나, 합성기 맥락에서는 더 의미 있는 값으로 고정될 수 있습니다.

상속 값 예시:

<body>
  <e1>
    <e2>
      <e3>
        <e4>
          <e5>
            <e6>
              ...
            </e6>
          </e5>
        </e4>
      </e3>
    </e2>
  </e1>
</body>



body { voice-range: inherit; } /* 초기값은 'medium'
                               (실제 주파수 값은
                               현재 음성에 따라 다름) */

e1 { voice-range: +25%; } /* 계산값: ['medium' + 25%] = 'medium' 기준 주파수 + 0.25배 */

e2 { voice-range: +10Hz; } /* 계산값: [FREQ + 10Hz], 여기서 "FREQ"는 위 e1 규칙에서 계산된 절대 주파수 */

e3 { voice-range: inherit; /* 생략 가능, 명확성을 위해 명시 */

     voice-family: "another-voice"; } /* 음성 변경이 있더라도
                                         "body"에서 상속된 'medium' 키워드의 변환 결과(절대 주파수)가
                                         스타일 계단식에서 상대 오프셋이 누적 적용되어
                                         실제 상속값은 위 e2 규칙의 값이 됨 */

e4 { voice-range: 200Hz absolute; } /* 음성에 관계없이 절대 주파수로 재정의 */

e5 { voice-range: 2st; } /* 계산값: 200Hz + 두 세미톤(세미톤은 기준값에 따라 달라짐) */

e6 { voice-range: inherit; /* 생략 가능, 명확성을 위해 명시 */

     voice-family: "yet-another-voice"; } /* 음성 변경에도 계산값은 e5와 동일(절대 주파수로 고정) */

11.5. voice-stress 속성

이름: voice-stress
값: normal | strong | moderate | none | reduced
초기값: normal
적용 대상: 모든 요소
상속: yes
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

voice-stress 속성은 강조의 강도를 조절합니다. 이 강조는 일반적으로 피치 변화, 타이밍 변화, 음량, 기타 음향적 차이의 조합으로 적용됩니다. 각 값의 정확한 의미는 발화 언어에 따라 달라집니다.

참고: 이 속성의 기능은 SSML 마크업 언어의 emphasis 요소와 유사합니다.

normal
음성 합성기가 생성하는 기본 강조를 나타냅니다.
none

합성기가 보통 강조할 텍스트에 강조를 적용하지 않도록 합니다.

moderatestrong
이 값들은 점진적으로(단조적으로) 증가하는 강조 강도를 의미합니다. 적용 시, 음성 합성기가 보통 생성하는 것보다 더 강한 강조 효과가 발생합니다 (즉, normal 값보다 더 강조됨).
reduced
단어를 강조하는 것과 사실상 반대의 효과를 가집니다.

속성 값 예시(HTML 샘플 포함):

.default-emphasis { voice-stress: normal; }
.lowered-emphasis { voice-stress: reduced; }
.removed-emphasis { voice-stress: none; }
.normal-emphasis { voice-stress: moderate; }
.huge-emphasis { voice-stress: strong; }

...

<p>이것은 큰 자동차입니다.</p>
<!-- 위 줄의 음성 출력은 아래 줄과 동일합니다: -->
<p>이것은 <em class="default-emphasis">큰</em> 자동차입니다.</p>

<p>이 자동차는 <em class="lowered-emphasis">엄청 큽니다</em>!</p>
<!-- 아래 "em"은 완전히 강조가 제거되며, 위 줄의 강조는 단지 줄어듭니다: -->
<p>이 자동차는 <em class="removed-emphasis">엄청 큽니다</em>!</p>

<!-- 아래 줄들은 강조 강도가 점점 증가함을 보여줍니다: -->
<p>이것은 <em class="normal-emphasis">큰</em> 자동차입니다!</p>
<p>이것은 <em class="huge-emphasis">큰</em> 자동차입니다!!!</p>

12. 음성 지속 시간 속성

12.1. voice-duration 속성

이름: voice-duration
값: auto | <time>
초기값: auto
적용 대상: 모든 요소
상속: no
백분율: N/A
계산값: 지정된 값
표준 순서: 문법 순서

voice-duration 속성은 선택한 요소의 콘텐츠가 렌더링되는 데 걸리는 시간을 지정합니다 (오디오 신호, 일시정지, 휴지는 포함하지 않음). auto 값이 지정되지 않는 한, 이 속성이 voice-rate 속성보다 우선하며, 음성에 적합한 발화 속도를 결정할 때 사용됩니다. voice-duration 속성이 auto가 아닌 값으로 지정된 요소는 하위에 voice-durationvoice-rate 속성이 지정되어 있어도 무시해야 합니다. 즉, 선택한 요소의 voice-duration<time>이 지정되면 해당 요소의 전체 하위 트리에 적용되며(자식이 속성을 재정의할 수 없음) 적용됩니다.

참고: 이 속성이 제공하는 기능은 SSML 마크업 언어의 prosody 요소의 duration 속성과 유사합니다 [SSML].

auto
상속된 voice-rate로 발화 시 합성 음성의 지속 시간에 해당하는 사용값으로 해석됩니다.
<time>
절대 시간 단위(초, 밀리초 등)로 값을 지정합니다(예: "+3s", "250ms"). 0 이상 값만 허용됩니다.

13. 목록 항목 및 카운터 스타일

list-style-type 속성은 [CSS2]에서 세 가지 유형의 리스트 항목 마커(글리프, 숫자 시스템, 알파벳 시스템)를 지정합니다. 이 속성에 허용되는 값들은 content 속성의 counter() 함수에도 사용됩니다. CSS Speech 모듈은 이러한 스타일을 음성 합성을 통해 오럴 차원에서 어떻게 렌더링할지 정의합니다. list-style-image 속성([CSS2])은 무시되며, 대신 list-style-type이 사용됩니다.

참고: CSS Lists and Counters Module Level 3 [CSS3LIST]의 새로운 기능에 대한 음성 렌더링은 본 CSS Speech 레벨에서는 다루지 않으며, 추후 명세에서 정의될 수 있습니다.

disc, circle, square
이러한 리스트 항목 스타일의 경우, 사용자 에이전트가(사용자 환경설정에 따라) 해당 항목을 어떻게 말하거나 어떤 오디오 신호를 내보낼지 정의합니다. 그래픽 불릿이 있는 리스트 항목은 구현 의존적으로 적절하게 알리게 됩니다.
decimal, decimal-leading-zero, lower-roman, upper-roman, georgian, armenian
이러한 스타일은 해당 숫자를 음성 합성기가 그대로 읽으며, 문서 언어로 추가적인 오디오 신호나 음성 문구와 함께 (즉, 리스트 항목 내용과 같은 TTS 음성으로) 리스트 항목의 존재를 알릴 수 있습니다. 예를 들어 영어에서는 리스트 항목 카운터 앞에 "Item"이라는 단어를 붙여 "Item one", "Item two" 등으로 읽을 수 있습니다.
lower-latin, lower-alpha, upper-latin, upper-alpha, lower-greek
이러한 스타일은 리스트 항목을 문서 언어(즉, 리스트 항목 내용과 동일한 TTS 음성)로 철자 단위로 읽어줍니다. 예: 영어에서 lower-greek은 "alpha", "beta", "gamma" 등으로 읽음. 마찬가지로 프랑스어의 upper-latin은 /a/, /be/, /se/ 등(음성 기호)으로 읽음.

참고: 스크린 리더 등 사용자 에이전트는 리스트 항목의 중첩 깊이 또는 복잡한 계층 구조의 추가 정보를 안내하는 것이 일반적입니다. 이러한 추가 오디오 신호/음성 출력을 사용자 맞춤으로 제어할 수 있으며, 사용성을 높이는 데 기여합니다. 이러한 내비게이션 도우미는 구현 의존적이지만, CSS Speech 모듈을 지원하는 사용자 에이전트는 추가 오디오 신호/음성 출력이 중복되거나 불일치가 발생하지 않도록(예: 항목 번호 중복/불일치 등) 보장하는 것이 권장됩니다.

14. 삽입 및 대체 콘텐츠

이 절은 비규범적입니다.

때때로 저자는 정규 발음 규칙이 적용되기 전에 원본 텍스트를 다른 문자열로 매핑하도록 지정하고 싶을 수 있습니다. 이는 합성기가 인식하지 못할 가능성이 높은 드문 약어나 두문자어 등에 사용될 수 있습니다. content 속성은 한 문자열을 다른 문자열로 대체하는 데 사용할 수 있습니다. 이 속성의 기능은 SSML 마크업 언어의 sub 요소의 alias 속성과 유사합니다 [SSML].

이 예시에서, 약어는 요소의 콘텐츠 대신 title 속성의 내용이 사용되어 렌더링됩니다.
/* 선택한 요소의 콘텐츠를
"World Wide Web Consortium" 문자열로 대체합니다. */
abbr { content: attr(title); }
...

<abbr title="World Wide Web Consortium">W3C</abbr>

비슷하게, 문서 내의 텍스트 문자열을 미리 녹음된 버전으로 대체할 수도 있습니다.

이 예시에서는—지원되는 포맷이고 파일이 존재하며 UA가 그렇게 설정되어 있다면—Sir John Gielgud가 낭독한 유명 독백의 녹음이 재생됩니다. 그렇지 않으면 UA는 텍스트를 합성 음성으로 읽게 됩니다.
.hamlet { content: url(./audio/gielgud.wav); }
...

<div class="hamlet">
To be, or not to be: that is the question:
</div>

또한, 저자(또는 사용자가 사용자 스타일시트를 통해)는 문서를 비시각적으로 상호작용할 때 구조를 이해하기 쉽도록 정보를 추가할 수 있습니다. 이를 위해 ::before::after 의사 요소를 사용할 수 있습니다. 스크린 리더가 추가 정보를 얼마만큼 말할지 수준을 정의하기 위해 여러 스타일시트를 사용할 수 있음을 유의하세요.

이 예시에서는 리스트 앞에 "Start list: "라는 문자열, 각 리스트 항목 앞에 "List item: " 문자열을 삽입합니다. 마찬가지로, 리스트 뒤에는 "List end: "라는 문자열이 삽입되어 사용자가 리스트 음성 출력이 끝났음을 알립니다.

ul::before { content: "Start list: "; }
ul::after  { content: "List end. "; }
li::before { content: "List item: "; }

자세한 정보는 CSS3 Generated and Replaced Content 모듈 [CSS3GENCON]에서 확인할 수 있습니다.

15. 발음, 음소

이 절은 비규범적입니다.

CSS는 마크업 문서 내 특정 텍스트의 발음(명확하게 정의된 음운 알파벳으로 표현됨)을 정의하는 방법을 명시하지 않습니다. 본 명세의 이전 초안에서는 "phonemes" 속성이 설명된 바 있으나, 이는 내용과 표현의 분리 원칙을 깨뜨린다는 이유로 반대 의견이 제기되었습니다. ("phonemes"를 오럴 CSS 스타일시트 내에 작성하면, 마크업 문서 내 텍스트가 바뀔 때마다 이를 업데이트해야 했음) 따라서 "phonemes" 기능은 CSS(표현 레이어) 범위 밖으로 간주되며, 마크업/콘텐츠 레이어에서 다뤄야 합니다.

"pronunciation" rel 값은 link 요소를 사용하여 HTML 문서에 발음 사전을 포함할 수 있게 해줍니다 (CSS 스타일시트 포함 방식과 유사). W3C PLS(발음 사전 명세, Pronunciation Lexicon Specification) [PRONUNCIATION-LEXICON]은 이러한 사전을 기술하는 데 사용할 수 있는 포맷 중 하나입니다.

또한, 마크업 내에서 속성 기반 메커니즘을 사용해 텍스트-발음 연계를 작성할 수도 있습니다. 작성 시점 기준, 이런 메커니즘은 W3C HTML 표준에 공식적으로 정의되어 있지 않습니다. 하지만 EPUB 3.0 명세는 (x)HTML5 문서가 [SSML] 명세에서 파생된 속성을 포함하여, 특정 음운 알파벳 기반으로 텍스트 발음을 설명할 수 있도록 허용합니다.

용어집

이 모듈에서 사용된 용어와 약어는 다음과 같습니다.

UA
user agent

사용자를 대신하여 CSS 스타일시트를 읽거나 쓸 수 있는 프로그램으로, 다음 두 범주 중 하나 또는 모두에 해당함: 문서(documents, 예: 브라우저)를 렌더링하는 프로그램, 스타일시트를 작성하는 프로그램(예: 에디터). UA는 둘 모두에 해당할 수도 있음. (스타일시트를 읽거나 쓰는 다른 프로그램도 있으나, 이 모듈은 그에 대한 규칙을 제공하지 않음.)

document

요소와 속성으로 이루어진 트리 구조의 문서. 예: SGML, XML 문서 [XML11].

style sheet

CSS 스타일시트

부록 D — 감사의 글

편집자들은 본 명세 준비에 도움을 준 W3C Voice Browser 및 CSS 작업 그룹의 모든 멤버에게 감사를 표합니다. 특히, Ellen Eide(IBM)의 상세한 의견과 Elika Etemad(Fantasai)의 꼼꼼한 리뷰에 특별히 감사드립니다.

부록 E — 변경 이력

다음 변경 사항은 2012년 후보 권고안 이후 이루어졌습니다:

이 외에도 몇몇 사소한 편집상의 수정이 있었으며, 소스가 Bikeshed 형식으로 변환되었습니다.

준수(Conformance)

문서 규칙

준수 요건은 설명적 진술과 RFC 2119 용어의 조합으로 표현됩니다. 규범적 부분에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 등의 키워드는 RFC 2119에서 정의된 대로 해석해야 합니다. 다만, 본 명세에서는 가독성을 위해 이러한 단어를 모두 대문자로 표기하지 않았습니다.

본 명세의 모든 텍스트는 명시적으로 비규범임을 표시한 절, 예시, 참고를 제외하고는 규범적입니다. [RFC2119]

이 명세의 예시는 “for example”라는 단어로 시작하거나 class="example"로 구분되어 다음과 같이 제시됩니다:

이것은 정보성 예시입니다.

참고문은 “Note”라는 단어로 시작하며 class="note"로 구분되어 다음과 같이 표시됩니다:

참고, 이것은 정보성 참고입니다.

권고(advisement)는 규범적 부분 중 특별한 주의를 환기하도록 스타일링되며, <strong class="advisement">으로 구분되어 다음과 같이 제시됩니다: UA는 반드시 접근 가능한 대안을 제공해야 합니다.

준수 클래스

본 명세에 대한 준수는 세 가지 준수 클래스에 대해 정의됩니다:

style sheet
CSS 스타일시트.
renderer
스타일시트의 의미를 해석하고, 이를 사용하는 문서를 렌더링하는 UA.
authoring tool
스타일시트를 작성하는 UA.

스타일시트가 이 명세의 구문을 사용하는 모든 문장이 일반 CSS 문법 및 본 모듈에서 정의한 각 기능별 개별 문법에 따라 유효하다면, 해당 스타일시트는 이 명세를 준수합니다.

렌더러는 스타일시트를 적절한 명세에 정의된 대로 해석할 뿐 아니라, 본 명세에서 정의한 모든 기능을 올바르게 파싱하고 문서를 그에 따라 렌더링한다면 준수합니다. 단, 디바이스의 한계로 인해 UA가 문서를 올바르게 렌더링하지 못하는 경우, 이를 비준수로 간주하지 않습니다.(예: UA는 흑백 모니터에서 색상을 렌더링할 필요 없음)

저작 도구는 일반 CSS 문법 및 본 모듈의 각 기능별 개별 문법에 따라 구문적으로 올바른 스타일시트를 작성하고, 본 모듈에서 설명한 스타일시트의 모든 다른 준수 요건을 충족하면 준수로 간주합니다.

부분 구현

저자가 미래 호환 파싱 규칙을 활용해 폴백 값을 지정할 수 있도록, CSS 렌더러는 지원하지 않는 모든 at-규칙, 속성, 속성값, 키워드 및 기타 구문 구조를 무효로 간주하고(적절히 무시해야 함), 하나의 다중 값 속성 선언에서 지원하지 않는 구성 값만 선별적으로 무시하고 지원되는 값만 적용해서는 안 됩니다. 어떤 값이 무효(즉, 지원하지 않는 값)로 간주되면 CSS는 전체 선언을 무시해야 합니다.

불안정 및 독점 기능의 구현

미래의 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 베스트 프랙티스를 따라 불안정 기능 및 독점 확장을 구현할 것을 권장합니다.

비실험적 구현

명세가 후보 권고안 단계에 도달하면, 비실험적 구현이 가능하며, 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 CR 수준 기능에 대해 prefix 없는 구현을 배포해야 합니다.

CSS 구현 간 상호 운용성을 확립·유지하기 위해, CSS 작업 그룹은 비실험적 CSS 렌더러가 prefix 없는 CSS 기능을 배포하기 전 W3C에 구현 보고서(필요시 구현에 사용한 테스트 케이스 포함)를 제출할 것을 요청합니다. W3C에 제출된 테스트 케이스는 CSS 작업 그룹의 검토와 수정 대상이 될 수 있습니다.

테스트 케이스 및 구현 보고서 제출에 대한 자세한 정보는 CSS 작업 그룹의 웹사이트 https://www.w3.org/Style/CSS/Test/를 참고하세요. 문의는 public-css-testsuite@w3.org 메일링 리스트로 하시기 바랍니다.

CR 종료 기준

본 명세가 제안 권고안(Proposed Recommendation) 단계로 진전되기 위해서는 각 기능에 대해 최소 두 개 이상의 독립적이고 상호 운용 가능한 구현체가 존재해야 합니다. 각 기능은 서로 다른 제품군에서 구현될 수 있으며, 모든 기능이 단일 제품에서 구현될 필요는 없습니다. 이 기준에서 용어는 다음과 같이 정의됩니다:

independent
각 구현은 서로 다른 주체가 개발해야 하며, 다른 구현의 코드를 공유, 재사용, 파생해서는 안 됩니다. 본 명세 구현과 무관한 코드 영역은 예외입니다.
interoperable
공식 CSS 테스트 수트의 해당 테스트 케이스를 통과하거나, 웹 브라우저가 아닌 경우 동등한 테스트를 통과해야 함. 모든 관련 테스트는 동등한 테스트가 생성되어야 하며, 그러한 UA가 상호 운용성 주장을 위해 사용될 경우 반드시 하나 이상의 추가 UA가 동일한 방식으로 이 테스트를 통과해야 함. 동등한 테스트는 동료 검토(peer review)를 위해 공개되어야 함.
implementation
다음을 만족하는 사용자 에이전트:
  1. 명세를 구현함.
  2. 일반 대중이 이용 가능해야 함. 구현은 상용 제품, 공개 베타, 프리뷰, "nightly build" 등 어떤 형태든 가능함. 비상용 제품 릴리즈는 최소 1개월 이상 해당 기능을 구현해야 안정성을 입증할 수 있음.
  3. 실험적이지 않아야 함(즉, 오로지 테스트 수트 통과만을 위해 설계된 버전이 아니어야 하며, 향후 정상적 사용을 위한 것이어야 함).

명세는 최소 6개월간 후보 권고안 상태를 유지합니다.

색인

이 명세서에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2021년 7월 26일. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022년 11월 3일. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022년 1월 13일. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COUNTER-STYLES-3]
Tab Atkins Jr.. CSS Counter Styles Level 3. 2021년 7월 27일. CR. URL: https://www.w3.org/TR/css-counter-styles-3/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2022년 11월 18일. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4. 2021년 12월 21일. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2022년 9월 1일. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2022년 12월 30일. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022년 12월 1일. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2022년 10월 19일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016년 4월 12일. WD. URL: https://www.w3.org/TR/CSS22/
[CSS3GENCON]
Elika Etemad; Dave Cramer. CSS Generated Content Module Level 3. 2019년 8월 2일. WD. URL: https://www.w3.org/TR/css-content-3/
[CSS3LIST]
Elika Etemad; Tab Atkins Jr.. CSS Lists and Counters Module Level 3. 2020년 11월 17일. WD. URL: https://www.w3.org/TR/css-lists-3/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MEDIAQUERIES-5]
Dean Jackson; et al. Media Queries Level 5. 2021년 12월 18일. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SSML]
Daniel Burnett; Zhi Wei Shuang. Speech Synthesis Markup Language (SSML) Version 1.1. 2010년 9월 7일. REC. URL: https://www.w3.org/TR/speech-synthesis11/
[XML11]
Tim Bray; et al. Extensible Markup Language (XML) 1.1 (Second Edition). 2006년 8월 16일. REC. URL: https://www.w3.org/TR/xml11/

비규범적 참고문헌

[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[PRONUNCIATION-LEXICON]
Paolo Baggia. Pronunciation Lexicon Specification (PLS) Version 1.0. 2008년 10월 14일. REC. URL: https://www.w3.org/TR/pronunciation-lexicon/
[SSML-SAYAS]
Daniel Burnett; et al. SSML 1.0 say-as attribute values. 2005년 5월 26일. NOTE. URL: https://www.w3.org/TR/ssml-sayas/

속성 색인

이름 초기값 적용 대상 상속 %가능 표준 순서 계산값
cue <'cue-before'> <'cue-after'>? N/A (각 속성 참조) 모든 요소 no N/A 문법 순서 N/A (각 속성 참조)
cue-after <uri> <decibel>? | none none 모든 요소 no N/A 문법 순서 지정된 값
cue-before <uri> <decibel>? | none none 모든 요소 no N/A 문법 순서 지정된 값
pause <'pause-before'> <'pause-after'>? N/A (각 속성 참조) 모든 요소 no N/A 문법 순서 N/A (각 속성 참조)
pause-after <time> | none | x-weak | weak | medium | strong | x-strong none 모든 요소 no N/A 문법 순서 지정된 값
pause-before <time> | none | x-weak | weak | medium | strong | x-strong none 모든 요소 no N/A 문법 순서 지정된 값
rest <'rest-before'> <'rest-after'>? N/A (각 속성 참조) 모든 요소 no N/A 문법 순서 N/A (각 속성 참조)
rest-after <time> | none | x-weak | weak | medium | strong | x-strong none 모든 요소 no N/A 문법 순서 지정된 값
rest-before <time> | none | x-weak | weak | medium | strong | x-strong none 모든 요소 no N/A 문법 순서 지정된 값
speak auto | never | always auto 모든 요소 yes N/A 문법 순서 지정된 값
speak-as normal | spell-out || digits || [ literal-punctuation | no-punctuation ] normal 모든 요소 yes N/A 문법 순서 지정된 값
voice-balance <number> | left | center | right | leftwards | rightwards center 모든 요소 yes N/A 문법 순서 -100에서 100(포함) 사이의 <number>로 해석된 지정값
voice-duration auto | <time> auto 모든 요소 no N/A 문법 순서 지정된 값
voice-family [[<family-name> | <generic-voice>],]* [<family-name> | <generic-voice>] | preserve 구현 의존 모든 요소 yes N/A 문법 순서 지정된 값
voice-pitch <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] medium 모든 요소 yes 상속값 참조 문법 순서 키워드만 지정되면 미리 정의된 피치 키워드 중 하나, 아니면 현재 voice-family에 기반해 변환된 고정 주파수에 지정된 상대 오프셋(있는 경우) 적용
voice-range <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] medium 모든 요소 yes 상속값 참조 문법 순서 키워드만 지정되면 미리 정의된 피치 키워드 중 하나, 아니면 현재 voice-family에 기반해 변환된 고정 주파수에 지정된 상대 오프셋(있는 경우) 적용
voice-rate [normal | x-slow | slow | medium | fast | x-fast] || <percentage> normal 모든 요소 yes 기본값 참조 문법 순서 키워드 값, 필요시(100%가 아니면) 키워드 기준 백분율도 포함
voice-stress normal | strong | moderate | none | reduced normal 모든 요소 yes N/A 문법 순서 지정된 값
voice-volume silent | [[x-soft | soft | medium | loud | x-loud] || <decibel>] medium 모든 요소 yes N/A 문법 순서 silent, 또는 키워드 값(필요시 0이 아닌 데시벨 오프셋과 함께)