附录 A. 听觉(Aural)样式表

内容

本章是信息性的。UA不需要为了与CSS 2.1一致而实现本章中的属性

A.1 媒体类型'aural'与'speech'

我们预期将来的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 }
}

过时了,但(其含义)由本附录定义

A.2 听觉样式表简介

文档的听觉渲染常用于盲人和阅读能力受损(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"来的段落听起来会很柔和

A.2.1 角度

角度值在文本中用<angle>表示。其格式是一个<number>后面紧跟着一个角度单位标识符

角度单位标识符为:

角度值可以为负。它们应该被用户代理归一化到0-360deg的范围。例如,-10deg和350deg是等价的

例如,'90deg'或者'100grad'或者'1.570796326794897rad'都是正确的角度

类似于<length>,如果值为0的话,单位可以省略:'0deg'可以写作'0'

A.2.2 时间

时间值在文本中用<time>表示。其格式是一个<number>后面紧跟着一个时间单位标识符

时间单位标识符为:

时间值不能为负

类似于<length>,如果值为0的话,单位可以省略:'0s'可以写作'0'

A.2.3 频率

频率值在文本中用<frequency>表示。其格式是一个<number>后面紧跟着一个频率单位标识符

频率单位标识符为:

频率值不能为负

例如,200Hz(或者200hz)是一种低音,而6kHz是一种高音

类似于<length>,如果值为0的话,单位可以省略:'0Hz'可以写作'0'

A.3 音量属性'volume'

'volume'
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的值),该属性的作用是调节动态范围

值含义如下:

<number>
介于'0'到'100'的任意数值。'0'表示可听到的最小音量,而100对应可接受的最大音量
<percentage>
百分比值根据继承的值来计算,然后裁剪到'0'到'100'的范围
silent
一点声音都没有。值'0'的含义与'silent'不同
x-soft
与'0'相同
soft
与'25'相同
medium
与'50'相同
loud
与'75'相同
x-loud
与'100'相同

用户代理应该允许收听者设置'0'和'100'对应的值(译注:比如用户认为可听到的最小音量为34dB,可接受的最大音量为84dB,那么分别对应0和100,之间有50dB的调节范围,此时数值1代表0.5dB)。没有一种设置是普遍适用的,合适的值取决于使用的设备(音箱,耳机),环境(车里,家庭影院里,图书馆里)和个人偏好。一些示例:

相同的样式表可以用于所有情况,只需在客户端把'0'和'100'映射到合适的音量

A.4 发声(Speaking)属性'speak'

'speak'
Value:  normal | none | spell-out | inherit
Initial:  normal
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

该属性指定了是否要对文本进行听觉渲染,以及如果要的话,用哪种方式渲染。可能的值为:

none
取消听觉渲染, 使元素无需时间渲染。然而,注意,后代可以重写该值而且将被读出来(要确保取消元素及其后代的渲染的话,用'display'属性)
normal
用与语言相关的发音规则来呈现元素及其子级
spell-out
逐字母地拼写文本(用于缩写和缩略语)

注意,'volume'属性值为'silent'的元素和'speak'属性值为'none'的元素之间的区别。前者占用的时间与把它读出来所需的时间相同,包括该元素前后的所有停顿,但不会产生声音。后者不占时间,而且不会被渲染(尽管其后代可能会被渲染)

A.5 停顿属性'pause-before''pause-after''pause'

'pause-before'
Value:  <time> | <percentage> | inherit
Initial:  0
Applies to:  所有元素
Inherited:  no
Percentages:  见下文
Media:  aural
Computed value:  time
'pause-after'
Value:  <time> | <percentage> | inherit
Initial:  0
Applies to:  所有元素
Inherited:  no
Percentages:  见下文
Media:  aural
Computed value:  time;;

这些属性在读出一个元素的内容之前(或者之后)指定了一种可以察觉到的停顿。值含义如下:

注意 CSS3中,停顿是在提示和内容周围插入的,而不是在它们之间。详情见[CSS3SPEECH]

<time>
用绝对时间单位表达停顿(秒和毫秒)
<percentage>
参照'speech-rate'属性值的倒数。例如,speech-rate为120词每分钟(即,每个单词占半秒或500ms)的话,那么值为100%的'pause-before'表示500 ms的停顿,而一个值为20%的'pause-before'表示100ms

停顿被插在该元素的内容和所有'cue-before'或者'cue-after'内容之间

编写者应该用相对单位来创建更健壮的样式表,以应对speech-rate的大幅变化

'pause'
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 */

A.6 提示属性'cue-before''cue-after''cue'

'cue-before'
Value:  <uri> | none | inherit
Initial:  none
Applies to:  所有元素
Inherited:  no
Percentages:  N/A
Media:  aural
Computed value:  绝对URI或者'none'
'cue-after'
Value:  <uri> | none | inherit
Initial:  none
Applies to:  所有元素
Inherited:  no
Percentages:  N/A
Media:  aural
Computed value:  绝对URI或者'none'

听标(auditory icons)是区分语义元素的另一种方式。可以在元素之前和/或之后播放声音来对其进行分隔(译注:就像声音领域的边框)。值含义如下:

<uri>
URI必须指定一个听标资源。如果URI解析得到的不是一个音频文件,例如,一张图片,资源应该被忽略,并且当作该属性的值为'none'
none
不指定听标

示例:

a {cue-before: url("bell.aiff"); cue-after: url("dong.wav") }
h1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
'cue'
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'伪元素的内容之后

A.7 混合属性'play-during'

'play-during'
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'属性类似,该属性指定了在读元素内容时播放的背景音。值含义如下:

<uri>
在读元素内容时,会播放该<uri>指定的背景音
mix
出现mix时,该关键字表示从父元素的'play-during'属性继承的声音继续播放,并且会与<uri>指定的声音混合起来。如果没有指定'mix',该元素的背景音会替代父元素的
repeat
出现repeat时,该关键字表示如果声音太短无法占满元素的整个时间段,就重复播放该声音。否则,声音只播放一次,然后停止。这与'background-repeat'属性类似。如果声音太长,就从元素已读出的部分裁剪掉
auto
父元素的声音会继续播放(而不是重新开始,这与该属性是继承得来的情况一样)
none
该关键字表示静音(silence)。父元素的声音(如果有的话),在当前元素元素播放期间是无声的,在当前元素播放完毕之后继续

示例:

blockquote.sad { play-during: url("violins.aiff") }
blockquote Q   { play-during: url("harp.wav") mix }
span.quiet     { play-during: none }

A.8 空间属性'azimuth''elevation'

空间音频对听觉表现来说是一种重要的表现型属性(stylistic property)。它提供了一种自然的方式来区分几种声音,正如现实生活中一样(人们很少会站在房间里的同一个位置)。立体声扬声器能产生一种横向声场(a lateral sound stage)。立体声耳机或者逐渐流行的5音箱家庭影院设备能生成全环绕音效,并且多音箱设备能营造一种真正的三维声场。VRML 2.0(指虚拟现实建模语言)也包含空间音频,这意味着很快相对廉价的(consumer-priced)空间音频硬件就会更为普及

'azimuth'
Value:  <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit
Initial:  center
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  归一化角度

值含义如下:

<angle>
位置用一个'-360deg'到'360deg'范围内的角度来描述。值'0deg'表示在声场的正中心。'90deg'表示右方,'180deg'表示后方,'270deg'(或者,与之等价的更方便的,'-90deg')表示左方
left-side
等于'270deg',与'behind'连用时为'270deg'
far-left
等于'300deg',与'behind'连用时为'240deg'
left
等于'320deg',与'behind'连用时为'220deg'
center-left
等于'340deg',与'behind'连用时为'200deg'
center
等于'0deg',与'behind'连用时为'180deg'
center-right
等于'20deg',与'behind'连用时为'160deg'
right
等于'40deg',与'behind'连用时为'140deg'
far-right
等于'60deg',与'behind'连用时为'120deg'
right-side
等于'90deg',与'behind'连用时为'90deg'
leftwards
把声音相对当前角度左移。更精确的,是减去20度。算术运算相对360度取模。注意,更准确的说'leftwards'应该是“逆时针”,因为它总是减20度,即使继承来的azimuth已经位于收听者背后了(此时,声音听起来实际上是右移)
rightwards
把声音相对当前角度右移。更精确的,是加20度。关于算术运算请查看'leftwards'

该属性很可能是通过在不同声道中以不同音量混合同一个信号来实现的。也可以通过相移(phase shifting),数字延迟以及其它技术来提供声场错觉。实现该效果的准确方法以及使用的音箱数量取决于用户代理,该属性只是指明了想要的最终效果

示例:

h1   { azimuth: 30deg }
td.a { azimuth: far-right }          /*  60deg */
#12  { azimuth: behind far-right }   /* 120deg */
p.comment { azimuth: behind }        /* 180deg */

如果指定了spatial-azimuth,但输出设备无法在收听位置后方产生声音,用户代理应该把后半球值转换为前半球值。一种方法如下:

'elevation'
Value:  <angle> | below | level | above | higher | lower | inherit
Initial:  level
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  归一化角度

该属性值的含义如下:

<angle>
指定了仰角,介于'-90deg'到'90deg'之间。'0deg'表示前方水平线,大致与收听者保持水平。'90deg'表示在头顶,而'-90deg'表示在正下方
below
等于'-90deg'
level
等于'0deg'
above
等于'90deg'
higher
给当前仰角加10度
lower
给当前仰角减去10度

用来实现该效果的准确方式和需要使用的音箱数量是未定义的。该属性只是指明了想要的最终结果

示例:

h1   { elevation: above }
tr.a { elevation: 60deg }
tr.b { elevation: 30deg }
tr.c { elevation: level }

A.9 语音特征属性'speech-rate''voice-family''pitch''pitch-range''stress''richness'

'speech-rate'
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')。值含义如下:

<number>
指定了语速,单位为单词/分钟,值随语言变化,但尽管如此,都被语音合成器广泛支持
x-slow
等于80词/分钟
slow
等于120词/分钟
medium
等于180 - 200词/分钟
fast
等于300词/分钟
x-fast
等于500词/分钟
faster
将当前语速提升40词/分钟
slower
将当前语速降低40词/分钟
'voice-family'
Value:  [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit
Initial:  取决于用户代理
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

值是用逗号分隔的,按优先级排列的语音族名(类比'font-family')。值含义如下:

<generic-voice>
值为语音族。可能的值为'male','female'和'child'
<specific-voice>
值为具体实例(例如,comedian,trinoids,carlos,lani)

示例:

h1 { voice-family: announcer, male }
p.part.romeo  { voice-family: romeo, male }
p.part.juliet { voice-family: juliet, female }

具体声音名可能是用引号包裹起来的,实际上,如果名字中的任意一个单词不符合标识符语法规则的话,必须用引号包裹起来。也推荐把名字多于一个单词的具体语音用引号包裹起来。如果省略引号的话,语音族名前后的所有空白字符都会被忽略,并且语音族名中的所有空白字符序列都会被转换为单个空格

'pitch'
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

值含义如下:

<frequency>
用赫兹(Hz)指定了发声语音的平均音高
x-low, low, medium, high, x-high
这些值没有映射到绝对频率,因为这些值依赖语音族。用户代理应该根据语音族和用户环境,把这些值映射到适当的频率。然而,用户代理必须按顺序映射这些值(即,'x-low'的频率低于'low',等等)
'pitch-range'
Value:  <number> | inherit
Initial:  50
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

指定了平均音高的变化范围。人语音的感知音高(perceived pitch)由基准频率决定,典型的,女音值为120Hz而男音为210Hz。人类语言有不同的音调和音高,这些变化传递了额外的含义和重点。因此,一种非常富有变化的语音,即,一种富含变化的语音,会呈现出很高的音高范围。该属性指定了这些变化的范围,即,基准频率可以偏离平均音高多少

值含义如下:

<number>
一个介于'0'到'100'的值。音高范围为0会产生一种平直单调的语音。音高范围为50会产生常规音调。音高范围大于50会产生活泼的语音
'stress'
Value:  <number> | inherit
Initial:  50
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

指定了语音的语调轮廓的“局部高峰”高度。例如,英语是一种有强调的(stressed)语言,一个句子的不同部分有主要,次要或者再次强调之分。'stress'的值控制基于这些强调标记的变音数量。该属性配合'pitch-range'属性,用来支持开发者开发高端听觉表现

值含义如下:

<number>
一个介于'0'到'100'之间的值。该值的含义取决于朗读的语言。例如,'50'对于标准的英文发声男音(平均音高=122Hz),是以常规音调和强调来发声,而'50'对于意大利语音就有不同的含义
'richness'
Value:  <number> | inherit
Initial:  50
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

指定了发声语音的丰富度(richness),或者明亮(brightness)。丰富的语音能“携带(carry)”一片大空间(译注:指的是音色丰富的声音“含义”更丰富),平缓的语音的就不行(术语“平缓”指的是画出的波形的外观)

值含义如下:

<number>
一个介于'0'到'100'之间的值。值越高,语音携带的“含义”越丰富。较低的值会产生一种柔和的,甜蜜的语音

A.10 发音(Speech)属性'speak-punctuation''speak-numeral'

一种额外的发音属性,'speak-header'见下文描述

'speak-punctuation'
Value:  code | none | inherit
Initial:  none
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

该属性指定了怎样读出标点符号。值含义如下:

code
标点符号,例如分号,花括号等等,都原样读出(be spoken literally)
none
不读标点符号,而会自然地渲染成各种停顿
'speak-numeral'
Value:  digits | continuous | inherit
Initial:  continuous
Applies to:  所有元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

该属性控制怎样读出数值。值含义如下:

digits
按单独的数字来读出数值。因此"237"读作“二三七”
continuous
把数值当作完整的数读出来。因此,"237"读作“二百三十七”。读的时候用的单词(字)取决于

A.11 表格的音频渲染

在用语音生成器来读表格时,数据单元和表头单元之间的关系必须用不同的方式来表达,而不是通过水平和垂直对齐。某些语音浏览器可能允许用户在(表格的)二维空间中移动,因此,可能可以把它们映射到用空间表示的关系上。如果做不到的话,样式表必须指定在什么时候读出表头

A.11.1 读表头:'speak-header'属性

'speak-header'
Value:  once | always | inherit
Initial:  once
Applies to:  具有表头信息的元素
Inherited:  yes
Percentages:  N/A
Media:  aural
Computed value:  与指定值相同

该属性指定了表头在每个单元格之前都读,还是只在当前单元格相关的表头与前一个单元格的表头不同时才读。值含义如下:

once
在一系列(表头相同的)单元格之前,只读一次表头
always
在每个相关单元格之前都读表头

每个文档语言让编写者指定表头的机制可能不同。例如,HTML 4([HTML4])中,能通过三种不同的属性来指定表头信息("headers","scope"和"axis"),规范还给出了一种在这些属性都没有指定时确定表头信息的策略

Image of a table created in MS
Word   [D]

带有表头单元格("San Jose"和"Seattle")的表格图,但不在它们适用的数据的同一行或者列

该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
...

A.12 HTML的样例样式表

该样式表描述了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 }
}

A.13 Emacspeak(某读屏软件)

仅供参考,Emacspeak(Emacs编辑器的一个发声子系统)实现的属性如下:

(关于听觉属性的实现状态的信息,我们要感谢T. V. Raman)