1. 简介,设计目标
本节是非规范性的。
信息的听觉呈现通常由盲人、视力障碍者或其他阅读障碍者使用。例如,“屏幕阅读器”允许用户与视觉界面交互,否则他们将无法使用这些界面。在某些情况下,无论个人的身体状况如何,倾听内容(相对于阅读)都是更受欢迎甚至必需的选择。例如:在驾驶车辆时播放电子书、学习操作工业或医疗设备、与家庭娱乐系统交互、教幼儿学习阅读。
本语音模块定义的 CSS 属性使作者能够以声明方式控制文档在听觉维度的呈现。文档的听觉渲染结合了语音合成(也称为“TTS”,即文本转语音的缩写)和听觉图标(在本规范中称为“音频提示”)。CSS 语音属性提供了控制语音音高和语速、声级、TTS 音色等的能力。这些样式表属性可以与视觉属性(混合媒体)一起使用,也可以作为视觉呈现的完全听觉替代方案。
2. 背景信息,CSS 2.1
本节是非规范性的。
CSS 语音模块是对资料性 CSS 2.1 听觉附录的重构,其中描述了 aural 媒体类型,但该类型也已被弃用(转而使用现也已被弃用的 speech 媒体类型)。尽管 [CSS2] 规范保留了 speech 媒体类型,但它并未实际定义相应的属性。语音模块描述了适用于语音输出的 CSS 属性,并定义了一个专门用于听觉维度的“盒”模型。
内容创建者可以为任何媒体类型的用户代理包含语音合成文本的 CSS 属性——尽管通常它们只对 all 和 screen 有意义。不支持语音模块的用户代理将简单地忽略这些样式。
3. 与 SSML 的关系
本节是非规范性的。
本规范中的某些功能在概念上类似于语音合成标记语言(SSML)1.1 版 [SSML] 中描述的功能。然而,CSS 模型的具体性意味着在语法和/或语义方面与 SSML 的兼容性只能部分实现。语音模块中每个属性的定义都包含了必要的信息性说明,以阐明它们与 SSML 中类似功能的关系。
3.1. 值定义
本规范遵循 [CSS2] 中的 CSS 属性定义约定,并使用 [CSS-VALUES-3] 中的 值定义语法。本规范中未定义的值类型在 CSS Values & Units [CSS-VALUES-3] 中定义。与其他 CSS 模块的组合可能会扩展这些值类型的定义。
除了定义中列出的属性特定值外,本规范中定义的所有属性也都接受 CSS 全局关键字 作为其属性值。为了可读性,未明确重复列出。
4. 示例
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 格式化模型基于在嵌套上下文内发生的一系列声音和静音,类似于 视觉盒模型,我们将其命名为 听觉“盒”模型。听觉“画布”由双通道(立体声)空间和时间维度组成,合成语音和音频提示在其中共存。所选元素周围环绕着 rest(间歇)、cue(提示)和 pause(停顿)属性(从最内层到最外层)。它们可以分别被视为 padding(内边距)、border(边框)和 margin(外边距)的听觉等价物。使用时,::before 和 ::after 伪元素 [CSS2] 会被插入到元素内容与 rest 之间。
下图展示了应用于所选 <element> 的视觉和听觉盒模型属性之间的等价关系

6. 混合属性
6.1. voice-volume 属性
| 名称 | voice-volume |
|---|---|
| 值 | silent | [[x-soft | soft | medium | loud | x-loud] || <decibel>] |
| 初始值 | medium |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | silent,或关键字值及可选的分贝偏移量(如果非零) |
| 规范顺序 | 按语法 |
voice-volume 属性允许作者控制由语音合成器产生的音频波形的振幅,也用于调整所选元素 听觉盒模型 内 音频提示 的相对音量水平。
注意: 虽然此属性提供的功能类似于 SSML 标记语言 [SSML] 中 prosody 元素的 volume 属性,但两者存在显著差异。例如,CSS 语音音量关键字和分贝单位并非互斥,这是由于值在所选元素上的继承和组合方式所致。
- silent
- 指定不产生声音(文本“静默”朗读)。
注意: 这与使用负无穷大分贝的效果相同。另请注意,将 voice-volume 属性值设为 silent 的元素,与将 speak 属性值设为 none 的元素之间存在差异。前者中,所选元素所占用的时间与朗读时相同(包括元素前后的任何停顿),但不产生声音(所选元素 听觉盒模型 内的后代可以覆盖 voice-volume 值,因此可能会产生音频输出)。后者中,所选元素在听觉维度不渲染,且不分配播放时间(所选元素 听觉盒模型 内的后代可以覆盖 speak 值,因此可能会产生音频输出)。
- x-soft,soft,medium,loud,x-loud
- 这一系列关键字对应单调递增的音量水平,映射到满足听者对感知响度要求的实现相关值。这些音频水平通常通过偏好设置机制提供,允许用户根据其听觉环境校准声音选项。关键字 x-soft 映射到用户的最小可听音量水平,x-loud 映射到用户的最大可容忍音量水平,medium 映射到用户的首选音量水平,soft 和 loud 则映射到中间值。
- <decibel>
- 这表示相对于给定关键字值(见上文枚举)、根元素的默认值,或者继承音量水平(这本身可能是关键字值与分贝偏移量的组合,在这种情况下分贝值会相加)的更改(正向或负向)。当继承的音量水平为 silent 时,此 voice-volume 也会解析为 silent,而无论指定的 <decibel> 值为何。
<decibel> 类型表示一个带有“dB”(分贝单位)标识符的 量纲。根据以下对数公式,分贝表示新信号振幅 a1 的平方与当前振幅 a0 的平方之比:volume(dB) = 20 × log10(a1 / a0)。
注意: -6.0dB 约为音频信号振幅的一半,+6.0dB 约为两倍。
注意: 感知响度取决于多种因素,如听觉环境、用户偏好或身体能力。x-soft 和 x-loud 之间的有效音量变化代表了音频输出的动态范围(就响度而言)。通常情况下,该范围在嘈杂环境中会被压缩,即对应 x-soft 的感知响度将比在安静环境中更接近 x-loud。也可能存在将 x-soft 和 x-loud 都映射为低音量水平的情况,例如在需要安静的听觉环境中(如图书馆、夜间阅读)。
6.2. voice-balance 属性
| 名称 | voice-balance |
|---|---|
| 值 | <number> | left | center | right | leftwards | rightwards |
| 初始值 | center |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | 指定的值解析为 -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),将声音向左移动。
- rightwards
- 通过将 20 加到继承的 voice-balance 值(并将所得数字截断为 100),将声音向右移动。
用户代理可以连接到不同种类的音响系统,这些系统具有不同的音频混合功能。单声道、立体声和环绕声系统的预期行为定义如下
-
当用户代理通过单声道音响系统(即单扬声器设置)产生音频时,voice-balance 属性不起作用。
-
当用户代理通过立体声音响系统(例如两个扬声器或一副耳机)产生音频时,音频信号的左右分布可以精确匹配 voice-balance 属性的创作值。
-
当用户代理能够通过 2 个以上通道混合音频信号(例如 5 扬声器环绕声系统,包括专用的中央声道)时,应用 voice-balance 属性所产生的音频信号的物理分布应当执行,以使听者感知到声音仿佛来自基本的立体声布局。例如,中央声道以及左右扬声器可以全部共同使用,以模拟 center 值的行为。
CSS 语音模块的未来版本可能包含对三维音频的支持,这将有效地使作者能够指定“方位角”和“仰角”值。将来,使用当前规范创作的内容因此可以由符合支持三维音频版本 CSS 语音的用户代理所消费。为了为这种可能性做准备,当前 voice-balance 属性启用的值设计为保持与“方位角”角度兼容。更确切地说,当前左右音频轴(横向声场)与围绕听者位置预想的 360 度平面之间的映射定义如下
-
值 0 映射到零度(center)。这位于听者的“前方”,而非“后方”。
-
值 -100 映射到 -40 度(left)。负角度为逆时针方向(假设从顶部观察声场)。
-
值 100 映射到 40 度(right)。正角度为顺时针方向(假设从顶部观察声场)。
-
100 到 100 刻度上的中间值以数值线性比例映射到 -40 到 40 度之间的角度。例如,-50 映射到 -20 度。
注意: 音响系统可以由用户配置,从而干扰文档作者指定的左右音频分布。通常,现代音响系统中可用的各种“环绕”模式(包括基于基本立体声扬声器的系统)往往会极大地改变音频信号的感知空间排列。三维声场的幻觉通常是通过相位移动、数字延迟、音量控制(通道混合)和其他技术的组合来实现的。有些用户甚至可能将他们的系统配置为将任何渲染的声音“降级”为单一单声道通道,在这种情况下,voice-balance 属性的效果显然根本无法感知。因此,创作内容的渲染保真度取决于此类用户自定义,而 voice-balance 属性仅指定预期的最终结果。
注意: 许多语音合成器只产生单声道声音,因此在本质上不支持 voice-balance 属性。因此,沿左右轴的音频分布发生在合成后阶段(当启用语音的用户代理混合文档中创作的各种音频源时)。
7. 朗读属性
7.1. speak 属性
| 名称 | speak |
|---|---|
| 值 | auto | never | always |
| 初始值 | auto |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
speak 属性确定是否以听觉方式渲染文本。
注意: SSML 标记语言 [SSML] 中没有与此属性功能相匹配的内容。
- auto
- 当 display 为 none 时解析为 never 的计算值,否则解析为 auto 的计算值。如果 visibility 为 visible,则 auto 的使用值等同于 always,否则等同于 never。
注意: display 属性的 none 值不能被所选元素的后代覆盖,但 speak 的 auto 值可以通过使用 never 或 always 来覆盖。
- never
- 该值导致元素(包括停顿、提示、间歇和实际内容)不被渲染(即,该元素在听觉维度上没有影响)。
注意: 受影响元素的任何后代均可覆盖此值,因此即使在此级别使用 display: none,后代实际上也可以参与听觉渲染。然而,祖先元素的停顿、提示和间歇在听觉维度上保持“停用”,因此不参与 停顿合并 或相邻间歇的相加行为。
- always
- 该元素以听觉方式渲染(无论其 display 值,或其祖先的 display 或 speak 值为何)。
注意: 使用此值可能会导致元素在听觉维度被渲染,即使它不会在视觉画布上渲染。
7.2. speak-as 属性
| 名称 | speak-as |
|---|---|
| 值 | normal | spell-out || digits || [ literal-punctuation | no-punctuation ] |
| 初始值 | normal |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
speak-as 属性根据预定义的可能性列表,确定文本以何种方式进行听觉渲染。
注意: 此属性提供的功能在概念上类似于 SSML 标记语言 [SSML] 中的 say-as 元素(其可能的值在 [SSML-SAYAS] W3C 笔记中描述)。尽管设计目标相似,但 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-before 和 pause-after 属性
| 名称 | pause-before,pause-after |
|---|---|
| 值 | <time> | none | x-weak | weak | medium | strong | x-strong |
| 初始值 | none(无) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
pause-before 和 pause-after 属性指定在元素进行语音合成渲染之前(或之后)发生的韵律边界(具有特定持续时间的静音),或者如果指定了任何 cue-before(或 cue-after),则在 听觉盒模型 内的该提示之前(或之后)。
注意:虽然此属性提供的功能类似于 SSML 标记语言 [SSML] 中的 break 元素,但 CSS 语音 听觉盒模型 内 pause 韵律边界的应用需要特殊考虑(例如 “合并”停顿)。
- <time>
- 以绝对时间单位(秒和毫秒,例如“+3s”、“250ms”)表示停顿。只允许非负值。
- 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'>? |
| 初始值 | 不适用(见各个属性) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 不适用(见各个属性) |
| 规范顺序 | 按语法 |
pause 属性是 pause-before 和 pause-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: unspecified; pause-after: 10ms */
8.3. 合并停顿
停顿定义了听觉“盒”与其前后听觉“盒”之间的最小距离。相邻的停顿通过选择最强的命名中断和最长的绝对时间间隔进行合并。例如,在合并“strong”和“weak”时选择“strong”,在合并“1s”和“250ms”时选择“1s”,而在合并“strong”和“250ms”时,“strong”和“250ms”会产生相加效果。
以下停顿是相邻的
- 一个听觉“盒”的 pause-after 与其最后一个子元素的 pause-after,前提是前者没有 rest-after 且没有 cue-after。
- 一个听觉“盒”的 pause-before 与其第一个子元素的 pause-before,前提是前者没有 rest-before 且没有 cue-before。
- 一个听觉“盒”的 pause-after 与其下一个同级元素的 pause-before。
- 一个听觉“盒”的 pause-before 和 pause-after,如果该“盒”具有“0ms”的 voice-duration,且没有 rest-before 或 rest-after,且没有 cue-before 或 cue-after,或者该“盒”根本没有渲染内容(见 speak)。
如果一个合并停顿的任何组成部分停顿与另一个停顿相邻,则该合并停顿被视为与另一个停顿相邻。
注意: pause 已从元素内容与任何 cue 之间移动到了 cue 之外。这与资料性 CSS 2.1 听觉附录 [CSS2] 不向后兼容。
9. 间歇属性
9.1. rest-before 和 rest-after 属性
| 名称 | rest-before,rest-after |
|---|---|
| 值 | <time> | none | x-weak | weak | medium | strong | x-strong |
| 初始值 | none(无) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
rest-before 和 rest-after 属性指定在 听觉盒模型 内,元素语音合成渲染之前(或之后)发生的韵律边界(具有特定持续时间的静音)。
注意: 虽然此属性提供的功能类似于 SSML 标记语言 [SSML] 中的 break 元素,但 CSS 语音 听觉盒模型 内 rest 韵律边界的应用需要特殊考虑(例如穿插的音频提示、相加的相邻间歇)。
- <time>
- 以绝对时间单位(秒和毫秒,例如“+3s”、“250ms”)表示间歇。只允许非负值。
- none
- 等同于 0ms。(语音处理器不产生韵律中断。)
- x-weak,weak,medium,strong,以及 x-strong
- 通过语音输出中韵律中断的强度来表达间歇。具体时间取决于实现。这些值表示元素之间单调递增(概念上增加)的中断强度。
与 停顿属性 相反,间歇被插入到元素内容与任何 cue-before 或 cue-after 内容之间。相邻的间歇被相加处理,不会合并。
9.2. rest 简写属性
| 名称 | rest |
|---|---|
| 值 | <'rest-before'> <'rest-after'>? |
| 初始值 | 不适用(见各个属性) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 不适用(见各个属性) |
| 规范顺序 | 按语法 |
rest 属性是 rest-before 和 rest-after 的简写。如果给定两个值,第一个值是 rest-before,第二个是 rest-after。如果只给定一个值,它同时应用于两个属性。
10. 提示属性
10.1. cue-before 和 cue-after 属性
| 名称 | cue-before,cue-after |
|---|---|
| 值 | <uri> <decibel>? | none |
| 初始值 | none(无) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
cue-before 和 cue-after 属性指定在 听觉盒模型 内元素之前(或之后)播放的听觉图标(即预录制/预生成的音频片段)。
注意: 虽然此属性提供的功能看起来与 SSML 标记语言 [SSML] 中的 audio 元素相关,但实际上存在重大差异。例如,听觉盒模型 意味着音频提示与元素的音量水平相关联;且 CSS 语音的听觉图标与 SSML 的 audio 元素相比提供了有限的功能。
- <uri>
- URI 指定了一个听觉图标资源。当用户代理无法渲染指定的听觉图标(例如缺少文件资源或不支持的音频编解码器)时,建议产生替代提示,例如铃声。
- none(无)
- 指定不使用听觉图标。
- <decibel>
- 表示相对于所选元素 听觉盒模型 内 voice-volume 属性计算值的改变(正向或负向)。(因此,当 voice-volume 属性改变时,音频提示的音量水平也会改变)。省略时,隐式值计算为 0dB。
当 voice-volume 属性的计算值为 silent 时,音频提示也设置为 silent(无论指定的 <decibel> 值为何)。否则(当不为 silent 时),voice-volume 值总是相对于音量关键字(见 voice-volume 的定义)来指定,这些关键字映射到用户校准的“首选”响度设置范围。如果继承的 voice-volume 值已经包含分贝偏移量,音频提示特定的 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 属性的计算值决定。注意,voice-volume 属性的计算值为 silent 会导致音频提示也被“强行”静音(即无论指定的音频提示 <decibel> 值如何)。
voice-volume 属性的音量关键字是经用户校准的,以满足创作时未知的要求(例如听觉环境、个人偏好)。因此,为了实现音频提示与语音合成的近似响度对齐,作者应确保音频提示的音量水平(平均而言,因为感知响度可能会因音频流的变化而产生离散差异,如语调、强调等)匹配基于拟用 voice-family 的语音合成渲染的输出,并给定“典型”听觉条件(即默认系统音量水平,频率谱上居中的均衡)。由于语音处理器能够直接控制生成文本转语音音频的波形振幅,且由于用户代理能够调整音频提示的音量输出(即根据数字化声音片段的固有波形振幅放大或衰减音频信号),这设定了一个基准,使实现能够管理听觉盒模型内 TTS 和提示音频流的响度,相对于用户校准的音量水平(参见 voice-volume 属性中定义的关键字)。
由于感知音频特征(例如响度)与应用于数字化音频信号的处理(例如信号压缩)之间存在复杂关系,我们参考了一个简单的场景,其中衰减以分贝为单位表示,通常范围从 0dB(即最大音频输入,接近削波阈值)到 -60dB(即完全静音)。在此背景下,“标准”音频片段将在这些值之间振荡,最响的峰值水平将接近 -3dB(以避免失真),相关可听段落的平均(RMS)音量水平将尽可能高(即不要太安静,以避免放大期间的背景噪声)。这大致提供了一种可以与文本转语音输出无缝结合的音频体验(即从预录音频切换到语音合成时,音量水平不会有可察觉的差异)。虽然目前没有行业标准来支持这种惯例,但不同的 TTS 引擎在未指定增益或衰减时往往会生成响度相当的音频信号。对于语音和轻音乐,-15dB RMS 似乎是相当标准的。
10.3. cue 简写属性
| 名称 | cue |
|---|---|
| 值 | <'cue-before'> <'cue-after'>? |
| 初始值 | 不适用(见各个属性) |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 不适用(见各个属性) |
| 规范顺序 | 按语法 |
cue 属性是 cue-before 和 cue-after 的简写。如果给定两个值,第一个值是 cue-before,第二个是 cue-after。如果只给定一个值,它同时应用于两个属性。
简写符号示例
h1
{
cue-before: url(pop.au);
cue-after: url(pop.au);
}
/* ...is equivalent to: */
h1
{
cue: url(pop.au);
}
11. 语音特征属性
11.1. voice-family 属性
| 名称 | voice-family |
|---|---|
| 值 | [[<family-name> | <generic-voice>],]* [<family-name> | <generic-voice>] | preserve |
| 初始值 | 由实现决定的 |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
voice-family 属性指定了一个以逗号分隔的组成值优先级列表,表明它们是替代项。(这类似于视觉样式表中的 font-family。)每个组成值通过指定匹配标准,潜在地指定一个语音合成音色实例。请参阅关于此主题的 语音选择 部分。
<generic-voice> = [<age>? <gender> <integer>?]
注意: 虽然此属性提供的功能类似于 SSML 标记语言 [SSML] 中的 voice 元素,但 CSS 语音不提供与 SSML 复杂的语音语言选择等同的功能。这种技术限制可能会在语音模块的未来版本中得到缓解。
- <family-name>
- 值是具体的音色实例(例如:Mike, comedian, mary, carlos2, "valley girl")。与 font-family 名称一样,音色名称必须以 字符串 形式加引号,或者作为一或多个 CSS 标识符 的序列不加引号。
注意: 因此,大多数标点符号或位于每个标记开头的数字,在不加引号的音色名称中必须进行转义。
如果将一系列标识符作为音色名称给出,计算出的值是通过用单个空格连接序列中所有标识符而转换为字符串的名称。
恰好与性别关键字(male、female 和 neutral)相同,或恰好匹配 CSS 广泛关键字 或 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>
- 表示首选变体的整数(例如“第二个男性儿童声音”)。只允许正整数(即不包括零)。值 1 指所有匹配声音中的第一个。
- preserve(保留)
- 指示 voice-family 值被继承并使用,无论内容标记中是否有任何潜在的语言更改(见下文关于语音选择和语言处理的部分)。当应用于根元素时,此值表现为 inherit。注意:元素的后代会自动继承 preserve 值,除非它被其他 voice-family 值(例如名称、性别、年龄)显式覆盖。
无效声明示例
voice-family: john/doe; /* forward slash character should be escaped */ voice-family: john "doe"; /* identifier sequence cannot contain strings */ voice-family: john!; /* exclamation mark should be escaped */ voice-family: john@doe; /* "at" character should be escaped */ voice-family: #john; /* identifier cannot start with hash character */ voice-family: john 1st; /* identifier cannot start with digit */
11.1.1. 语音选择,内容语言
voice-family 属性用于引导语音合成音色实例的选择。作为此选择过程的一部分,支持语音的用户代理还必须考虑标记内容中选定元素的语言。“名称”、“性别”、“年龄”和首选“变体”(索引)是语音选择提示,随着 voice-family 属性值被后代元素继承,这些提示会沿着内容层次结构向下传递。在内容结构的任何点上,语言都优先(即具有比指定的 CSS 语音特征更高的优先级)。
以下列表概述了语音选择算法(注意此处的“语言”定义较为宽松,以迎合方言变化)
- 如果所选内容的语言只有一个语音实例可用,则必须使用该语音,无论指定的 CSS 语音特征为何。
- 如果所选内容的语言有多个语音实例可用,则选择的语音是与指定名称、性别、年龄和首选语音变体最匹配的那一个。“最佳匹配”的实际定义取决于处理器。例如,在一个系统中只有成人男女声音可用时,“voice-family: young male”的合理匹配很可能是音调更高的女声,因为这种声调会更接近小男孩的声调。如果没有语音实例匹配任何 voice-family 组成值提供的特征,则必须使用第一个可用的语音实例(在那些适合所选内容语言的语音中)。
- 如果所选内容的语言没有可用的语音,建议用户代理让用户了解缺少适当的 TTS 语音。
每当内容流中任何 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 |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 参考默认值 |
| 计算值 | 关键字值,以及可选的相对于关键字的百分比(如果非 100%) |
| 规范顺序 | 按语法 |
voice-rate 属性以每分钟字数操纵生成合成语音的语速。
注意: 虽然此属性提供的功能类似于 SSML 标记语言 [SSML] 中 prosody 元素的 rate 属性,但存在显著差异。例如,CSS 语音语速关键字和百分比修饰符并非互斥,这是由于值在所选元素上的继承和组合方式所致。
- normal
- 表示语音合成器为当前活动语音产生的默认语速。这是处理器特定的,取决于语言和方言,以及语音的“个性”。
- x-slow,slow,medium,fast 和 x-fast
- 一系列实现和语音特定的单调递增朗读速度。例如,英语的典型值(每分钟字数)为:x-slow = 80, slow = 120, medium = 180 到 200 之间, fast = 500。
- <percentage>
-
只允许非负 百分比 值。这表示相对于给定关键字值(见上文枚举)、根元素的默认值,或者继承语速(这本身可能是关键字值与百分比的组合,在这种情况下百分比会相乘组合)的更改。例如,50% 意味着语速乘以 0.5(值的一半)。超过 100% 的百分比会导致更快的语速(相对于基础关键字),而低于 100% 的百分比则导致更慢的语速。
继承值示例
<body>
<e1>
<e2>
<e3>
...
</e3>
</e2>
</e1>
</body>
body { voice-rate: inherit; } /* the initial value is 'normal'
(the actual speaking rate value
depends on the active voice) */
e1 { voice-rate: +50%; } /* the computed value is
['normal' and 50%], which will resolve
to the rate corresponding to 'normal'
multiplied by 0.5 (half the speaking rate) */
e2 { voice-rate: fast 120%; } /* the computed value is
['fast' and 120%], which will resolve
to the rate corresponding to 'fast'
multiplied by 1.2 */
e3 { voice-rate: normal; /* "resets" the speaking rate to the intrinsic voice value,
the computed value is 'normal' (see comment below for actual value) */
voice-family: "another-voice"; } /* because the voice is different,
the calculated speaking rate may vary
compared to "body" (even though the computed
'voice-rate' value is the same) */
11.3. voice-pitch 属性
| 名称 | voice-pitch |
|---|---|
| 值 | <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] |
| 初始值 | medium |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 参考继承值 |
| 计算值 | 如果仅单独指定关键字,则为预定义的音高关键字之一,否则为绝对频率,该频率是通过将关键字值(如有)转换为基于当前 voice-family 的固定频率并应用指定的相对偏移量(如有)计算得出的 |
| 规范顺序 | 按语法 |
voice-pitch 属性指定生成语音输出的“基准”音高,这取决于所使用的 voice-family 实例,并在不同的语音合成处理器之间有所不同(它大致对应于输出的平均音高)。例如,男声的常用音高约为 120Hz,而女声约为 210Hz。
注意:尽管此属性提供的功能类似于 SSML 标记语言 [SSML] 中 prosody 元素的 pitch 属性,但两者存在显著差异。例如,由于 CSS Speech 的值在选中元素中继承和组合的方式,其音高关键字和相对变化(频率、半音或百分比)并非互斥的。
- <frequency>
- 以频率单位(赫兹或千赫兹,例如 100Hz, +2kHz)表示的值。当指定了 absolute 关键字时,值仅限正数。否则(未指定 absolute 关键字时),负值表示相对于继承值的减少,正值表示相对于继承值的增加。例如,2kHz 是一个正偏移量(严格等同于 +2kHz),而 +2kHz absolute 是一个绝对频率(严格等同于 2kHz absolute)。
- absolute
- 如果指定,此关键字表示所给频率为绝对值。如果指定了负频率,则计算出的频率将为零。
- <semitones>
- 指定相对于继承值的相对变化(减少或增加)。<semitones> 的允许值语法是带有单位标识符 st(半音)的 维度 (dimension)。半音 (semitone) 间隔对应于等程律半音阶中每个音符之间的阶梯。因此,一个 半音 可以量化为该音阶上两个连续音高频率之间的差值。相隔恰好一个 半音 的两个连续频率之间的比率是 2 的 12 次方根(约为 11011/10393,即 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 频率在计算上是合法的,但在语音合成器的上下文中,它可能会被钳位为一个更有意义的值。
属性值示例
h1 { voice-pitch: 250Hz; } /* positive offset relative to the inherited absolute frequency */
h1 { voice-pitch: +250Hz; } /* identical to the line above */
h2 { voice-pitch: +30Hz absolute; } /* not an increment */
h2 { voice-pitch: absolute 30Hz; } /* identical to the line above */
h3 { voice-pitch: -20Hz; } /* negative offset (decrement) relative to the inherited absolute frequency */
h4 { voice-pitch: -20Hz absolute; } /* illegal syntax => value ignored ("absolute" keyword not allowed with negative frequency) */
h5 { voice-pitch: -3.5st; } /* semitones, negative offset */
h6 { voice-pitch: 25%; } /* this means "add a quarter of the inherited value, to the inherited value" */
h6 { voice-pitch: +25%; } /* identical to the line above */
11.4. voice-range 属性
| 名称 | voice-range |
|---|---|
| 值 | <frequency> && absolute | [[x-low | low | medium | high | x-high] || [<frequency> | <semitones> | <percentage>]] |
| 初始值 | medium |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 参考继承值 |
| 计算值 | 如果仅单独指定关键字,则为预定义的音高关键字之一,否则为绝对频率,该频率是通过将关键字值(如有)转换为基于当前 voice-family 的固定频率并应用指定的相对偏移量(如有)计算得出的 |
| 规范顺序 | 按语法 |
voice-range 属性指定了“基线”音高的可变性,即基频可能偏离语音输出平均音高的程度。对于极具表现力的语音,生成的语音的动态音高范围通常会增加,例如在语音中使用语调变化来传达含义和强调时。通常,低范围会产生平淡、单调的语音,而高范围则产生生动的语音。
注意:尽管此属性提供的功能类似于 SSML 标记语言 [SSML] 中 prosody 元素的 range 属性,但两者存在显著差异。例如,CSS Speech 的音高范围关键字和相对变化(频率、半音或百分比)并非互斥的,这是由于值在选定元素中的继承和组合方式决定的。
- <frequency>(频率)
- 以频率单位(赫兹或千赫兹,例如 100Hz, +2kHz)表示的值。当指定了 absolute 关键字时,值仅限正数。否则(未指定 absolute 关键字时),负值表示相对于继承值的减少,正值表示相对于继承值的增加。例如,2kHz 是一个正偏移量(严格等同于 +2kHz),而 +2kHz absolute 是一个绝对频率(严格等同于 2kHz absolute)。
- absolute
- 如果指定,此关键字表示所给频率为绝对值。如果指定了负频率,则计算出的频率将为零。
- <semitones>
- 指定相对于继承值的相对变化(减少或增加),以 半音 为单位。
- <percentage>
- 正负 百分比 值分别表示相对于继承值的增加或减少。计算值是通过在继承值上加上(或减去)继承值的指定分数来计算的。例如,在继承值为 200Hz 的情况下,50%(等同于 +50%)的结果为
200 + (200*0.5)= 300Hz。相反,-50% 的结果为200-(200*0.5)= 100Hz。 - x-low, low, medium, high, x-high
- 一系列单调非递减的音高水平,具体取决于实现和语音。当给定元素的计算值仅为一个关键字(即未指定相对偏移)时,相应的绝对频率将在语音更改时重新评估。相反,应用相对偏移需要根据指定相对偏移时的当前语音计算所得频率,因此计算出的频率将绝对继承,而不管后续样式级联中是否有语音更改。因此,作者应仅在希望语音更改触发从关键字到具体的、与语音相关的频率的转换重新评估时,才使用关键字值。
计算出的负绝对频率会被钳位至零赫兹。支持语音的用户代理更可能支持特定的值范围,而不是频率的所有可能计算数值范围。因此,用户代理中的实际值可能会被钳位到依赖于实现的最小和最大边界。例如:尽管 0Hz 频率在计算上是合法的,但在语音合成器的上下文中,它可能会被钳位为一个更有意义的值。
继承值示例
<body>
<e1>
<e2>
<e3>
<e4>
<e5>
<e6>
...
</e6>
</e5>
</e4>
</e3>
</e2>
</e1>
</body>
body { voice-range: inherit; } /* the initial value is 'medium'
(the actual frequency value
depends on the current voice) */
e1 { voice-range: +25%; } /* the computed value is
['medium' + 25%] which resolves
to the frequency corresponding to 'medium'
plus 0.25 times the frequency
corresponding to 'medium' */
e2 { voice-range: +10Hz; } /* the computed value is
[FREQ + 10Hz] where "FREQ" is the absolute frequency
calculated in the "e1" rule above. */
e3 { voice-range: inherit; /* this could be omitted,
but we explicitly specify it for clarity purposes */
voice-family: "another-voice"; } /* this voice change would have resulted in
the re-evaluation of the initial 'medium' keyword
inherited by the "body" element
(i.e. conversion from a voice-dependent keyword value
to a concrete, absolute frequency),
but because relative offsets were applied down the style
cascade, the inherited value is actually the frequency
calculated at the "e2" rule above. */
e4 { voice-range: 200Hz absolute; } /* override with an absolute frequency
which doesn’t depend on the current voice */
e5 { voice-range: 2st; } /* the computed value is an absolute frequency,
which is the result of the
calculation: 200Hz + two semitones
(reminder: the actual frequency corresponding to a semitone
depends on the base value to which it applies) */
e6 { voice-range: inherit; /* this could be omitted,
but we explicitly specify it for clarity purposes */
voice-family: "yet-another-voice"; } /* despite the voice change,
the computed value is the same as
for "e5" (i.e. an absolute frequency value,
independent from the current voice) */
11.5. voice-stress 属性
| 名称 | voice-stress |
|---|---|
| 值 | normal | strong | moderate | none | reduced |
| 初始值 | normal |
| 应用于 | 所有元素 |
| 可继承 | 是 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
voice-stress 属性用于操纵强调的强度,通常通过音高变化、时间变化、响度和其他声学差异的组合来实现。因此,值的精确含义取决于所说的语言。
注意:此属性提供的功能类似于 SSML 标记语言 [SSML] 中的 emphasis 元素。
- normal
- 表示语音合成器产生的默认强调。
- none
-
阻止合成器强调它通常会强调的文本。
- moderate 和 strong
- 这些值在强度上是单调非递减的。其应用结果比语音合成器通常产生的内容(即超过 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>This is a big car.</p>
<!-- The speech output from the line above is identical to the line below: -->
<p>This is a <em class="default-emphasis">big</em> car.</p>
<p>This car is <em class="lowered-emphasis">massive</em>!</p>
<!-- The "em" below is totally de-emphasized, whereas the emphasis in the line above is only reduced: -->
<p>This car is <em class="removed-emphasis">massive</em>!</p>
<!-- The lines below demonstrate increasing levels of emphasis: -->
<p>This is a <em class="normal-emphasis">big</em> car!</p>
<p>This is a <em class="huge-emphasis">big</em> car!!!</p>
12. 语音持续时间属性
12.1. voice-duration 属性
| 名称 | voice-duration |
|---|---|
| 值 | auto | <time> |
| 初始值 | auto |
| 应用于 | 所有元素 |
| 可继承 | 否 |
| 百分比 | 不适用 |
| 计算值 | 指定的值 |
| 规范顺序 | 按语法 |
voice-duration 属性指定渲染所选元素内容所需的时间(不包括 音频提示、暂停 和 停顿)。除非指定了 auto 值,否则此属性优先于 voice-rate 属性,并应被用于确定适合该语音的说话速率。对于 voice-duration 属性值不为 auto 的元素,其后代元素如果指定了 voice-duration 和 voice-rate 属性,则必须被忽略。换句话说,当为所选元素的 voice-duration 指定了 <time> 时,它将应用于整个元素子树(子元素无法覆盖该属性)。
注意:此属性提供的功能类似于 SSML 标记语言 [SSML] 中 prosody 元素的 duration 属性。
- auto
- 解析为使用继承的 voice-rate 时语音合成持续时间所对应的值。
- <time>
- 指定绝对时间单位(秒和毫秒,例如 "+3s", "250ms")的值。只允许使用非负值。
13. 列表项和计数器样式
[CSS2] 的 list-style-type 属性指定了三种类型的列表项标记:字形、编号系统和字母系统。此属性的允许值也用于 content 属性的 counter() 函数。CSS Speech 模块定义了如何使用语音合成在听觉维度上渲染这些样式。[CSS2] 的 list-style-image 属性将被忽略,而是使用 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 标记语言 [SSML] 中的 sub 元素的 alias 属性。
/* This replaces the content of the selected element
by the string "World Wide Web Consortium". */
abbr { content: attr(title); }
...
<abbr title="World Wide Web Consortium">W3C</abbr>
以类似的方式,文档中的文本字符串可以被预先录制的版本替换。
.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)”属性,但由于破坏了内容与表示分离的原则而遭到了反对。(在听觉 CSS 样式表中编写的“音素”需要在文档中的文本每次更改时都进行更新。)因此,“音素”功能在 CSS(表示层)中被认为超出了范围,应在标记/内容层中解决。
"pronunciation" rel 值允许在 HTML 文档中使用 link 元素导入发音词典(类似于包含 CSS 样式表的方式)。W3C PLS(发音词典规范)[PRONUNCIATION-LEXICON] 是可用于描述此类词典的一种格式。
此外,可以在标记中使用基于属性的机制来创作文本与发音的关联。在撰写本文时,此类机制尚未在 W3C HTML 标准中正式定义。但是,EPUB 3.0 规范 允许 (x)HTML5 文档包含源自 [SSML] 规范的属性,这些属性描述了如何基于特定的音标字母表朗读文本。
词汇表
本模块使用了以下术语和缩写。
- UA
- 用户代理 (user agent)
-
代表用户读取和/或编写 CSS 样式表的程序,类别包含以下两类或其中之一:其目的是渲染 文档(例如浏览器)的程序,以及其目的是创建样式表(例如编辑器)的程序。UA 可能同时属于这两类。(还有其他程序可以读取或编写样式表,但本模块不对其提供规则。)
- 文档 (document)
-
具有元素和属性的树状结构文档,例如 SGML 或 XML 文档 [XML11]。
- 样式表 (style sheet)
-
一个 CSS 样式表
附录 D — 致谢
编辑们感谢 W3C 语音浏览器和层叠样式表工作组的成员在准备本规范时提供的帮助。特别感谢 Ellen Eide (IBM) 提供的详细评论,以及 Elika Etemad (Fantasai) 的全面审查。
附录 E — 变更
自 2012 候选推荐标准 以来进行了以下更改
- 为清晰起见,将 speak 的 none 和 normal 值分别重命名为 never 和 always。参见 议题 510。
- 使 speak 的 auto 值响应 visibility。参见 议题 511。
此外,进行了一些小的编辑修复,并将源代码转换为 Bikeshed 格式。