目录
本章为说明性内容。用户代理(UAs)不需要实现本章的属性即可符合CSS 2.2标准。
我们预计在未来的CSS版本中,将会为语音输出定义新的属性和值。因此,CSS 2.2保留了'speech'媒体类型(参见第7章,“媒体类型”),但尚未定义哪些属性适用于该媒体类型。
本附录中的属性适用于CSS2中引入的媒体类型'aural'。但'aural'类型现已被弃用。
这意味着如下样式表:
@media speech { body { voice-family: Paul } }
是有效的,但其含义未被CSS 2.2定义;而
@media aural { body { voice-family: Paul } }
已被弃用,但其含义由本附录定义。
文档的听觉呈现方式已被盲人和视力受损的社区广泛使用,它结合了语音合成和“听觉图标”。这种听觉呈现通常是将文档转换为纯文本,并将其输入到屏幕阅读器中——这是一种简单地读取屏幕上所有字符的软件或硬件。这种方式的呈现效果不如保留文档结构时有效。听觉呈现的样式表属性可以与视觉属性(混合媒体)一起使用,也可以作为视觉呈现的听觉替代方案。
除了显而易见的可访问性优势外,还有其他广泛的市场需求,比如车载使用、工业和医疗文档系统(内部网)、家庭娱乐,以及帮助学习阅读或有阅读困难的用户。
在使用听觉属性时,画布由一个三维物理空间(环绕声)和一个时间空间(可以指定声音在其他声音之前、期间或之后播放)组成。CSS属性还允许作者改变合成语音的质量(语音类型、频率、声调变化等)。
h1, h2, h3, h4, h5, h6 { voice-family: paul; stress: 20; richness: 90; cue-before: url("ping.au") } p.heidi { azimuth: center-left } p.peter { azimuth: right } p.goat { volume: x-soft }
这将指示语音合成器使用名为“paul”的语音(类似于“音频字体”)来朗读标题,语调平稳但声音非常丰富。在朗读标题之前,将从给定的URL播放一个声音样本。类为“heidi”的段落将从左前方传出(如果音响系统支持空间音效),类为“peter”的段落将从右边传出。类为“goat”的段落声音将非常柔和。
角度值在文本中用 <angle> 表示。 它们的格式是一个紧跟在角度单位标识符后面的 <number>。
角度单位标识符包括:
角度值可以为负数。用户代理应将其归一化为0-360度范围内。例如,-10度和350度是等效的。
例如,直角可以表示为 '90deg' 或 '100grad' 或 '1.570796326794897rad'。
与 <length> 类似,如果值为零,则可以省略单位:“0deg”可以写为“0”。
时间值在文本中用 <time> 表示。 它们的格式是一个紧跟在时间单位标识符后面的 <number>。
时间单位标识符包括:
时间值不能为负数。
与 <length> 类似,如果值为零,则可以省略单位:“0s”可以写为“0”。
频率值在文本中用 <frequency> 表示。 它们的格式是一个紧跟在频率单位标识符后面的 <number>。
频率单位标识符包括:
频率值不能为负数。
例如,200Hz(或200hz)是低音,6kHz 是高音。
与 <length> 类似,如果值为零,则可以省略单位:“0Hz”可以写为“0”。
名称: | volume |
---|---|
值: | <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit |
初始值: | medium |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 相对于继承值 |
媒体: | aural |
计算值: | 数字 |
音量 指的是波形的中间音量。换句话说,音量为50的高度变化的声音可能会峰值远高于此。总体值可能会根据人类的舒适度进行调整,例如通过物理音量控制(这将成比例地增加0和100值);此属性的作用是调整动态范围。
值具有以下含义:
用户代理应允许听众设置与“0”和“100”对应的值。没有一种设置是普遍适用的;合适的值取决于所使用的设备(扬声器、耳机)、环境(车内、家庭影院、图书馆)和个人偏好。一些示例:
相同的作者样式表可以在所有情况下使用,只需在客户端适当地映射“0”和“100”点即可。
名称: | speak |
---|---|
值: | normal | none | spell-out | inherit |
初始值: | normal |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定 |
此属性指定文本是否会以听觉方式呈现,如果会,则以何种方式呈现。可能的值包括:
请注意一个元素的'volume'属性值为'silent'与其'speak'属性值为'none'之间的区别。前者占用的时间与其被朗读时相同,包括元素之前和之后的任何暂停,但不会生成声音。后者不需要时间且不会被呈现(尽管其后代元素可能会被呈现)。
名称: | pause-before |
---|---|
值: | <time> | <percentage> | inherit |
初始值: | 0 |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 参见正文 |
媒体: | aural |
计算值: | 时间 |
名称: | pause-after |
---|---|
值: | <time> | <percentage> | inherit |
初始值: | 0 |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 参见正文 |
媒体: | aural |
计算值: | 时间 |
这些属性指定在朗读元素内容之前(或之后)应停顿的时间。值具有以下含义:
注意。 在CSS3中,暂停被插入在提示和内容周围,而不是它们之间。详见[CSS3SPEECH]。
暂停被插入在元素的内容与任何'cue-before'或'cue-after'内容之间。
作者应使用相对单位,以在语速大幅变化时创建更健壮的样式表。
名称: | pause |
---|---|
值: | [ [<time> | <percentage>]{1,2} ] | inherit |
初始值: | 见各个属性 |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 见'pause-before'和'pause-after'的描述 |
媒体: | aural |
计算值: | 见各个属性 |
'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 */
名称: | cue-before |
---|---|
值: | <uri> | none | inherit |
初始值: | none |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 绝对URI或'none' |
名称: | cue-after |
---|---|
值: | <uri> | none | inherit |
初始值: | none |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 绝对URI或'none' |
听觉图标是区分语义元素的另一种方式。可以在元素之前和/或之后播放声音以对其进行界定。值具有以下含义:
a {cue-before: url("bell.aiff"); cue-after: url("dong.wav") } h1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
名称: | cue |
---|---|
值: | [ <'cue-before'> || <'cue-after'> ] | inherit |
初始值: | 见各个属性 |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 见各个属性 |
'cue'属性是设置'cue-before'和'cue-after'的简写。如果给出了两个值,第一个值是'cue-before',第二个值是'cue-after'。如果只给出一个值,则它适用于两个属性。
以下两个规则是等效的:
h1 {cue-before: url("pop.au"); cue-after: url("pop.au") } h1 {cue: url("pop.au") }
如果用户代理无法呈现听觉图标(例如,用户的环境不允许),我们建议它产生一个替代提示音。
请参阅 :before 和 :after 伪元素章节,了解有关其他内容生成技术的信息。'cue-before'声音和'pause-before'间隙插入在':before'伪元素的内容之前。同样,'pause-after'间隙和'cue-after'声音插入在':after'伪元素的内容之后。
名称: | play-during |
---|---|
值: | <uri> [ mix || repeat ]? | auto | none | inherit |
初始值: | auto |
应用于: | 所有元素 |
是否继承: | 否 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 绝对URI,其他按指定 |
与'cue-before'和'cue-after'属性类似,此属性指定在朗读元素内容时作为背景播放的声音。值具有以下含义:
blockquote.sad { play-during: url("violins.aiff") } blockquote Q { play-during: url("harp.wav") mix } span.quiet { play-during: none }
空间音频是听觉呈现中重要的样式属性。它提供了一种自然的方式来区分多个声音,就像在现实生活中一样(人们很少都站在房间的同一个位置)。立体声扬声器可以产生横向的声场。双耳耳机或越来越流行的5扬声器家庭影院系统可以生成完整的环绕声,多扬声器系统可以创建真正的三维声场。VRML 2.0也包含了空间音频,这意味着随着时间的推移,消费级空间音频硬件将变得更加普及。
名称: | azimuth |
---|---|
值: | <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit |
初始值: | center |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 归一化角度 |
这些值具有以下含义:
该属性最有可能通过在不同通道中以不同音量混合同一信号来实现。它还可能使用相移、数字延迟等技术来提供声场的幻觉。实现这种效果的具体方法和使用的扬声器数量取决于用户代理;此属性仅标识期望的最终结果。
h1 { azimuth: 30deg } td.a { azimuth: far-right } /* 60deg */ #12 { azimuth: behind far-right } /* 120deg */ p.comment { azimuth: behind } /* 180deg */
如果指定了空间方位角且输出设备无法在听者位置的后方产生声音,用户代理应将后半球的值转换为前半球的值。以下是一个方法:
名称: | elevation |
---|---|
值: | <angle> | below | level | above | higher | lower | inherit |
初始值: | level |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 归一化角度 |
此属性的值具有以下含义:
实现这种效果的具体方法和使用的扬声器数量未定义。此属性仅标识期望的最终结果。
h1 { elevation: above } tr.a { elevation: 60deg } tr.b { elevation: 30deg } tr.c { elevation: level }
名称: | speech-rate |
---|---|
值: | <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit |
初始值: | medium |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | number |
此属性指定语速。请注意,允许使用绝对值和相对关键字值(与'font-size'进行比较)。这些值的含义如下:
名称: | voice-family |
---|---|
值: | [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit |
初始值: | 取决于用户代理 |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
该值是一个以逗号分隔的优先级语音族名称列表(与'font-family'进行比较)。这些值的含义如下:
h1 { voice-family: announcer, male } p.part.romeo { voice-family: romeo, male } p.part.juliet { voice-family: juliet, female }
特定语音的名称可以加引号,如果名称中的任何单词不符合标识符的语法规则,则必须加引号。建议对由多个单词组成的特定语音加引号。如果省略引号,则在语音族名称之前和之后的任何空白字符将被忽略,语音族名称内部的任何空白字符序列将转换为一个空格。
名称: | pitch |
---|---|
值: | <frequency> | x-low | low | medium | high | x-high | inherit |
初始值: | medium |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | frequency |
指定语音的平均音高(频率)。语音的平均音高取决于语音族。例如,标准男性语音的平均音高约为120Hz,而女性语音的平均音高约为210Hz。
这些值的含义如下:
名称: | pitch-range |
---|---|
值: | <number> | inherit |
初始值: | 50 |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
指定平均音高的变化范围。语音的感知音高由基频决定,通常标准男性语音的基频为120Hz,女性语音的基频为210Hz。人类语言以不同的音调和音高说话;这些变化传达了额外的意义和强调。因此,高度生动的语音,即强烈的抑扬顿挫,显示出较高的音高范围。此属性指定这些变化发生的范围,即基频相对于平均音高可能偏离的程度。
这些值的含义如下:
名称: | stress |
---|---|
值: | <number> | inherit |
初始值: | 50 |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
指定语音音调轮廓中“局部峰值”的高度。例如,英语是一种重音语言,句子的不同部分被分配为主重音、副重音或三级重音。'stress'的值控制由这些重音标记产生的抑扬顿挫的程度。此属性是'pitch-range'属性的配套属性,旨在让开发人员利用高端音频显示设备。
这些值的含义如下:
名称: | richness |
---|---|
值: | <number> | inherit |
初始值: | 50 |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
指定语音的丰富度或亮度。丰富的声音将在大房间内“传播”,而柔和的声音则不会。(“柔和”一词是指当波形被绘制出来时的外观。)
这些值的含义如下:
另一个语音属性,'speak-header',将在下文中描述。
名称: | speak-punctuation |
---|---|
值: | code | none | inherit |
初始值: | none |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
此属性指定标点符号的发音方式。这些值的含义如下:
名称: | speak-numeral |
---|---|
值: | digits | continuous | inherit |
初始值: | continuous |
应用于: | 所有元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
此属性控制数字的发音方式。这些值的含义如下:
当表格由语音生成器朗读时,数据单元格与标题单元格之间的关系必须通过不同于水平和垂直对齐的方式来表达。一些语音浏览器可能允许用户在二维空间中移动,从而使他们有机会映射出空间表示的关系。当这种方法不可行时,样式表必须指定在何处朗读标题。
名称: | speak-header |
---|---|
值: | once | always | inherit |
初始值: | once |
应用于: | 具有表格标题信息的元素 |
是否继承: | 是 |
百分比: | 不适用 |
媒体: | aural |
计算值: | 按指定计算 |
此属性指定是否在每个单元格之前朗读表格标题,或仅在当前单元格与前一个单元格关联不同标题时才朗读。值的含义如下:
每种文档语言可能都有不同的机制允许作者指定标题。例如,在 HTML 4 ([HTML4]) 中,可以使用三种不同的属性("headers"、"scope" 和 "axis")来指定标题信息,并且该规范提供了在未指定这些属性时确定标题信息的算法。
表格图像,标题单元格("San Jose" 和 "Seattle")不在与其数据相关的同一列或行。
此 HTML 示例展示了在两个地点(San Jose 和 Seattle)连续几天内在餐饮、酒店和交通上的花费。概念上,你可以将表格视为 n 维空间。此空间的标题为:地点、日期、类别和小计。一些单元格定义了轴上的标记,而其他单元格则给出了在此空间内的具体花费。此表格的标记如下:
<TABLE> <CAPTION>旅行费用报告</CAPTION> <TR> <TH></TH> <TH>餐饮</TH> <TH>酒店</TH> <TH>交通</TH> <TH>小计</TH> </TR> <TR> <TH id="san-jose" axis="san-jose">San Jose</TH> </TR> <TR> <TH headers="san-jose">1997年8月25日</TH> <TD>37.74</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">1997年8月26日</TH> <TD>27.28</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">小计</TH> <TD>65.02</TD> <TD>224.00</TD> <TD>90.00</TD> <TD>379.02</TD> </TR> <TR> <TH id="seattle" axis="seattle">Seattle</TH> </TR> <TR> <TH headers="seattle">1997年8月27日</TH> <TD>96.25</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">1997年8月28日</TH> <TD>35.00</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">小计</TH> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD> </TR> <TR> <TH>总计</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD> </TR> </TABLE>
通过这种方式提供数据模型,使语音浏览器可以以丰富的方式浏览表格,例如,每个单元格都可以作为一个列表朗读,在每个数据单元格之前重复朗读适用的标题:
San Jose,1997年8月25日,餐饮: 37.74 San Jose,1997年8月25日,酒店: 112.00 San Jose,1997年8月25日,交通: 45.00 ...
浏览器也可以在标题发生变化时才朗读标题:
San Jose,1997年8月25日,餐饮: 37.74 酒店: 112.00 交通: 45.00 1997年8月26日,餐饮: 27.28 酒店: 112.00 ...
此样式表描述了 HTML 4 的可能渲染方式:
@media aural { h1, h2, h3, h4, h5, h6 { voice-family: paul, male; stress: 20; richness: 90 } h1 { pitch: x-low; pitch-range: 90 } h2 { pitch: x-low; pitch-range: 80 } h3 { pitch: low; pitch-range: 70 } h4 { pitch: medium; pitch-range: 60 } h5 { pitch: medium; pitch-range: 50 } h6 { pitch: medium; pitch-range: 40 } li, dt, dd { pitch: medium; richness: 60 } dt { stress: 80 } pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness: 80 } em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } dfn { pitch: high; pitch-range: 60; stress: 60 } s, strike { richness: 0 } i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } u { richness: 0 } a:link { voice-family: harry, male } a:visited { voice-family: betty, female } a:active { voice-family: betty, female; pitch-range: 80; pitch: x-high } }
供参考,以下是 Emacspeak(Emacs 编辑器的语音子系统)实现的属性列表:
(感谢 T. V. Raman 提供有关音频属性实现状态的信息。)