内容
本章是信息性的。UA不需要为了与CSS 2.1一致而实现本章中的属性
我们预期将来的CSS版本会有为语音输出定义的新属性和值。因此,CSS 2.1保留了'speech'媒体类型(见第7章,“媒体类型”),但尚未定义哪些属性适用于或者不适用于该媒体类型
本附录中的属性适用于CSS2中引入的媒体类型'aural'。但'aural'类型现在已经过时了(译注:CSS 2引入了'aural'媒体类型描述声音样式,但CSS 2.1废弃了'aural'及其所有相关属性)
这意味着这样一个样式表
@media speech { body { voice-family: Paul } }
是合法的,但其含义在CSS 2.1中没有定义,而
@media aural { body { voice-family: Paul } }
过时了,但(其含义)由本附录定义
文档的听觉渲染常用于盲人和阅读能力受损(print-impaired,含义类似于print disability)的群体,结合语音合成与“听标(auditory icons)”。通常这种听觉表现通过把文档转换为纯文本并提供给屏幕阅读器--简单地读出屏幕上所有字符的软件或者硬件来进行。如果保留文档结构,则会导致表现效果较差。听觉表现的样式表属性可以与视觉属性一起用(混合媒体)或者作为视觉表现的一种听觉替代品
除了明显的可访问性优势,还有其它关于收听信息的大型市场,包括车载使用(in-car use),工业和医疗记录系统(内网),家庭娱乐和帮助用户学习阅读或者帮助那些有阅读障碍的人
在使用听觉属性时,画布由三维物理空间(环绕声)和时间空间组成(可以在其他声音之前、期间和之后指定声音)。CSS属性还允许编写者改变合成语音的质量(声音类型,频率,音调(inflection)等等)
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-360deg的范围。例如,-10deg和350deg是等价的
例如,'90deg'或者'100grad'或者'1.570796326794897rad'都是正确的角度
类似于<length>,如果值为0的话,单位可以省略:'0deg'可以写作'0'
时间值在文本中用<time>表示。其格式是一个<number>后面紧跟着一个时间单位标识符
时间单位标识符为:
时间值不能为负
类似于<length>,如果值为0的话,单位可以省略:'0s'可以写作'0'
频率值在文本中用<frequency>表示。其格式是一个<number>后面紧跟着一个频率单位标识符
频率单位标识符为:
频率值不能为负
例如,200Hz(或者200hz)是一种低音,而6kHz是一种高音
类似于<length>,如果值为0的话,单位可以省略:'0Hz'可以写作'0'
Value: | <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit |
Initial: | medium |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | 参照继承的值 |
Media: | aural |
Computed value: | number |
Volume表示波形的中值音量(median volume of the waveform)。换句话说,音量为50的高音音量峰值可能远远高于该值(原文:a highly inflected voice at a volume of 50 might peak well above that)。整体值可能是满足人类舒适调节范围的。例如,通过物理的音量控制(将按比例增加0到100的值),该属性的作用是调节动态范围
值含义如下:
用户代理应该允许收听者设置'0'和'100'对应的值(译注:比如用户认为可听到的最小音量为34dB,可接受的最大音量为84dB,那么分别对应0和100,之间有50dB的调节范围,此时数值1代表0.5dB)。没有一种设置是普遍适用的,合适的值取决于使用的设备(音箱,耳机),环境(车里,家庭影院里,图书馆里)和个人偏好。一些示例:
相同的样式表可以用于所有情况,只需在客户端把'0'和'100'映射到合适的音量
该属性指定了是否要对文本进行听觉渲染,以及如果要的话,用哪种方式渲染。可能的值为:
注意,'volume'属性值为'silent'的元素和'speak'属性值为'none'的元素之间的区别。前者占用的时间与把它读出来所需的时间相同,包括该元素前后的所有停顿,但不会产生声音。后者不占时间,而且不会被渲染(尽管其后代可能会被渲染)
Value: | <time> | <percentage> | inherit |
Initial: | 0 |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | 见下文 |
Media: | aural |
Computed value: | time |
Value: | <time> | <percentage> | inherit |
Initial: | 0 |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | 见下文 |
Media: | aural |
Computed value: | time;; |
这些属性在读出一个元素的内容之前(或者之后)指定了一种可以察觉到的停顿。值含义如下:
注意 CSS3中,停顿是在提示和内容周围插入的,而不是在它们之间。详情见[CSS3SPEECH]
停顿被插在该元素的内容和所有'cue-before'或者'cue-after'内容之间
编写者应该用相对单位来创建更健壮的样式表,以应对speech-rate的大幅变化
Value: | [ [<time> | <percentage>]{1,2} ] | inherit |
Initial: | 见单独的各个属性 |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | 见'pause-before'和'pause-after'的描述 |
Media: | aural |
Computed value: | 见单独的各个属性 |
'pause'属性是一个简写属性,用来设置'pause-before'和'pause-after'。如果给出了2个值,第一个值为'pause-before'而第二个为'pause-after'。如果只给出了1个值,它就应用于这两个属性
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 */
Value: | <uri> | none | inherit |
Initial: | none |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | N/A |
Media: | aural |
Computed value: | 绝对URI或者'none' |
Value: | <uri> | none | inherit |
Initial: | none |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | N/A |
Media: | aural |
Computed value: | 绝对URI或者'none' |
听标(auditory icons)是区分语义元素的另一种方式。可以在元素之前和/或之后播放声音来对其进行分隔(译注:就像声音领域的边框)。值含义如下:
a {cue-before: url("bell.aiff"); cue-after: url("dong.wav") } h1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
Value: | [ <'cue-before'> || <'cue-after'> ] | inherit |
Initial: | 见单独的各个属性 |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | N/A |
Media: | aural |
Computed value: | 见单独的各个属性 |
'cue'属性是一个简写属性,用来设置'cue-before'和'cue-after'。如果给出了2个值,第一个为'cue-before'而第二个为'cue-after'。如果只给出了1个值,它就应用于这两个属性
下列两条规则是等价的:
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'伪元素的内容之后
Value: | <uri> [ mix || repeat ]? | auto | none | inherit |
Initial: | auto |
Applies to: | 所有元素 |
Inherited: | no |
Percentages: | N/A |
Media: | aural |
Computed value: | 绝对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 }
空间音频对听觉表现来说是一种重要的表现型属性(stylistic property)。它提供了一种自然的方式来区分几种声音,正如现实生活中一样(人们很少会站在房间里的同一个位置)。立体声扬声器能产生一种横向声场(a lateral sound stage)。立体声耳机或者逐渐流行的5音箱家庭影院设备能生成全环绕音效,并且多音箱设备能营造一种真正的三维声场。VRML 2.0(指虚拟现实建模语言)也包含空间音频,这意味着很快相对廉价的(consumer-priced)空间音频硬件就会更为普及
值含义如下:
该属性很可能是通过在不同声道中以不同音量混合同一个信号来实现的。也可以通过相移(phase shifting),数字延迟以及其它技术来提供声场错觉。实现该效果的准确方法以及使用的音箱数量取决于用户代理,该属性只是指明了想要的最终效果
h1 { azimuth: 30deg } td.a { azimuth: far-right } /* 60deg */ #12 { azimuth: behind far-right } /* 120deg */ p.comment { azimuth: behind } /* 180deg */
如果指定了spatial-azimuth,但输出设备无法在收听位置后方产生声音,用户代理应该把后半球值转换为前半球值。一种方法如下:
Value: | <angle> | below | level | above | higher | lower | inherit |
Initial: | level |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 归一化角度 |
该属性值的含义如下:
用来实现该效果的准确方式和需要使用的音箱数量是未定义的。该属性只是指明了想要的最终结果
h1 { elevation: above } tr.a { elevation: 60deg } tr.b { elevation: 30deg } tr.c { elevation: level }
Value: | <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit |
Initial: | medium |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | number |
该属性指定了语速。注意,绝对和相对关键字值都可以接受(类比'font-size')。值含义如下:
Value: | [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit |
Initial: | 取决于用户代理 |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
值是用逗号分隔的,按优先级排列的语音族名(类比'font-family')。值含义如下:
h1 { voice-family: announcer, male } p.part.romeo { voice-family: romeo, male } p.part.juliet { voice-family: juliet, female }
具体声音名可能是用引号包裹起来的,实际上,如果名字中的任意一个单词不符合标识符语法规则的话,必须用引号包裹起来。也推荐把名字多于一个单词的具体语音用引号包裹起来。如果省略引号的话,语音族名前后的所有空白字符都会被忽略,并且语音族名中的所有空白字符序列都会被转换为单个空格
Value: | <frequency> | x-low | low | medium | high | x-high | inherit |
Initial: | medium |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | frequency |
指定了发声语音的平均音高(pitch)(频率)。语音的平均音高取决于语音族。例如,标准男音的平均音高约为120Hz,但对于女音的话,约为210Hz
值含义如下:
Value: | <number> | inherit |
Initial: | 50 |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
指定了平均音高的变化范围。人语音的感知音高(perceived pitch)由基准频率决定,典型的,女音值为120Hz而男音为210Hz。人类语言有不同的音调和音高,这些变化传递了额外的含义和重点。因此,一种非常富有变化的语音,即,一种富含变化的语音,会呈现出很高的音高范围。该属性指定了这些变化的范围,即,基准频率可以偏离平均音高多少
值含义如下:
指定了语音的语调轮廓的“局部高峰”高度。例如,英语是一种有强调的(stressed)语言,一个句子的不同部分有主要,次要或者再次强调之分。'stress'的值控制基于这些强调标记的变音数量。该属性配合'pitch-range'属性,用来支持开发者开发高端听觉表现
值含义如下:
Value: | <number> | inherit |
Initial: | 50 |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
指定了发声语音的丰富度(richness),或者明亮(brightness)。丰富的语音能“携带(carry)”一片大空间(译注:指的是音色丰富的声音“含义”更丰富),平缓的语音的就不行(术语“平缓”指的是画出的波形的外观)
值含义如下:
一种额外的发音属性,'speak-header'见下文描述
Value: | code | none | inherit |
Initial: | none |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
该属性指定了怎样读出标点符号。值含义如下:
Value: | digits | continuous | inherit |
Initial: | continuous |
Applies to: | 所有元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
该属性控制怎样读出数值。值含义如下:
在用语音生成器来读表格时,数据单元和表头单元之间的关系必须用不同的方式来表达,而不是通过水平和垂直对齐。某些语音浏览器可能允许用户在(表格的)二维空间中移动,因此,可能可以把它们映射到用空间表示的关系上。如果做不到的话,样式表必须指定在什么时候读出表头
Value: | once | always | inherit |
Initial: | once |
Applies to: | 具有表头信息的元素 |
Inherited: | yes |
Percentages: | N/A |
Media: | aural |
Computed value: | 与指定值相同 |
该属性指定了表头在每个单元格之前都读,还是只在当前单元格相关的表头与前一个单元格的表头不同时才读。值含义如下:
每个文档语言让编写者指定表头的机制可能不同。例如,HTML 4([HTML4])中,能通过三种不同的属性来指定表头信息("headers","scope"和"axis"),规范还给出了一种在这些属性都没有指定时确定表头信息的策略
该HTML示例展现了两地连续几天(San Jose和Seattle)用于饮食,住宿和交通的费用。理论上,可以把该表格想成一个n维空间。该空间的表头为:地点,日期,分类和小计。某些单元格定义了沿着一条轴的标记,而其它的给出了该空间中某个点花费的费用。该表格的标记为:
<TABLE> <CAPTION>Travel Expense Report</CAPTION> <TR> <TH></TH> <TH>Meals</TH> <TH>Hotels</TH> <TH>Transport</TH> <TH>subtotal</TH> </TR> <TR> <TH id="san-jose" axis="san-jose">San Jose</TH> </TR> <TR> <TH headers="san-jose">25-Aug-97</TH> <TD>37.74</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">26-Aug-97</TH> <TD>27.28</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">subtotal</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">27-Aug-97</TH> <TD>96.25</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">28-Aug-97</TH> <TD>35.00</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">subtotal</TH> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD> </TR> <TR> <TH>Totals</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD> </TR> </TABLE>
通过用这种方式来提供数据模型,编写者让支持语音的浏览器能以多种方式浏览该表格。例如,每个单元格可以读作一个列表,在某个数据单元格之前重复对应的表头:
San Jose, 25-Aug-97, Meals: 37.74 San Jose, 25-Aug-97, Hotels: 112.00 San Jose, 25-Aug-97, Transport: 45.00 ...
浏览器也可以只在表头改变时才读表头:
San Jose, 25-Aug-97, Meals: 37.74 Hotels: 112.00 Transport: 45.00 26-Aug-97, Meals: 27.28 Hotels: 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)