层叠样式表第2级 CSS2规范开发手册 - WEB前端开发 专注前端开发,关注用户体验

19 语音样式表

目录

19.1 语音样式表简介

    文档的语音渲染与语音集成和“音频图标”结合,已经为盲人及有阅读障碍的团体广泛使用。通常情况下,这样的音频呈现是如此进行的:转换文档为纯文本,并将其输出到一个屏读机——一种将屏幕上的字符读出的软件或硬件。与保留文档机构的呈现相比,这样的结果的效果当然差一些。听觉呈现所使用的样式表属性可以和视觉属性合用(混合媒介)或作为视觉呈现的一个备选。

    不谈很明显的可获得性方面的长处,听信息还是有很大的市场的,包括车内使用,工业、医学文档系统(内网),家庭娱乐,帮助正学习阅读或有阅读困难的用户学习阅读。

    使用听觉属性的时候,画布包含了一个三维的物理空间(声音的环绕)和一个时间维度(可以指定一个声音在另一个声音之前、之中、之后)。CSS属性同样允许作者改变合成语音的质量(嗓音类型,频率,变形等)。

Example(s):

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”类的段落会特别柔和。

19.2 音量属性:'volume'

'volume'
值: <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit
初始值: medium
适用于: 所有元素
可否继承:
百分比: 相对于继承值
媒介: 音频

    音量参照于波形的中值音量。换句话说,一个高度扭曲的嗓音的音量为50,但实际可能远远超过这个数值。总体数值可以由人工调节到舒服的层次,例如通过物理的音量调节(它会同时等比提高0和100的值);该属性所做的只是调节动态范围。

    取值的含义如下:

<number>
任何在'0'和'100'之间的数值。'0'表示最小可闻音量而100对应最大可适音量。
<percentage>
百分比值相对继承值进行计算,然后剪裁到'0'到'100'的区间。
silent
没有声音。取值'0'并不意味着“无声”。
x-soft
与'0'一样。
soft
与'25'一样。
medium
与'50'一样。
loud
与'75'一样。
x-loud
与'100'一样。

    用户端应该允许对应于'0'和'100'的值由听众来设置。没有一个设置是放诸四海而皆准的;合适的值取决于适用的设备(扬声器,耳麦),环境(车内,家庭影院,图书馆)以及个人爱好。我们可以举一些例子:

    所有的情形下,可以应用相同的作者样式表,只要简单的将'0'和'100'的值映射到适合客户端的状态就可以了。

19.3 发音属性:'speak'

'speak'
值: normal | none | spell-out | inherit
初始值: normal
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    该属性指出文本是否应以音频渲染,如果是的话,又应以何种方式(有点类似'display'属性)。可以的取值为:

none
禁止音频渲染,从而该元素不需要时间渲染。注意,它的后代可能超越该值而被说出。(要确保一个元素及其后代不被渲染,使用'display'属性)。
normal
使用与语言有关的发音规则渲染一个元素和它的子元素。
spell-out
将文本一个字母一个字母的拼出(对缩写和简写词很有用)。

    注意,元素的'volume'属性为'silent'以及元素的'speak'属性为'none'之间的区别。前者和讲出它(包括任何之前之后的停顿)需要一样的时间,只是不出声。后者不需要任何时间也不会被渲染(尽管它的后代可能会)。

19.4 暂停属性:'pause-before''pause-after''pause'

'pause-before'
值: <time> | <percentage> | inherit
初始值: 取决于用户端
适用于: 所有元素
可否继承:
百分比: 参见下文
媒介: 音频
'pause-after'
值: <time> | <percentage> | inherit
初始值: 取决于用户端
适用于: 所有元素
可否继承:
百分比: 参见下文
媒介: 音频

    这些属性在说出元素的内容前(或后)出现一个暂停。取值的含义如下:

<time>
以绝对时间单元(秒及毫秒)表示暂停。
<percentage>
相对于'speech-rate'属性值的倒数。例如,如果说话速度是120字每分钟(也就是,一个字要半秒钟,或500ms),那么'pause-before'为100%意味着暂停500 ms而'pause-before'为20%就是100ms。

    暂停插入在元素内容和任何'cue-before''cue-after'内容之间。

    作者应该使用相对单位来创建更健壮的样式表,因为说话速度可能有很大变化。

'pause'
值: [ [<time> | <percentage>]{1,2} ] | inherit
初始值: 取决于用户端
适用于: 所有元素
可否继承:
百分比: 参见'pause-before'和'pause-after'的说明
媒介: 音频

    'pause'属性是设置'pause-before''pause-after'的快捷方式。如果给出两个值,第一个是'pause-before'而第二个是'pause-after'。如果只给一个值,它适用于两个属性。

Example(s):

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

19.5 提示属性:'cue-before''cue-after''cue'

'cue-before'
值: <uri> | none | inherit
初始值: none
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频
'cue-after'
值: <uri> | none | inherit
初始值: none
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    音频图标是另外一种方式来区分语意符号。在元素之前和/或之后可以播放声音以加以界定。取值的含义如下:

<uri>
URI必须指向一个音频图标资源。如果URI解析指向非音频文件的资源,如图形,那么该资源将被忽略而且处理该属性时就如同其取值为'none'。
none
未指定音频图标。

Example(s):

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
初始值: 对快捷属性未指定
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    'cue'属性是设置'cue-before''cue-after'的快捷属性。如果给出两个数值,那么第一个是'cue-before'而第二个是'cue-after'。如果只给出一个值,它适用于两个属性。

Example(s):

    下面两条规则是等价的:

H1 {cue-before: url("pop.au"); cue-after: url("pop.au") }
H1 {cue: url("pop.au") }

    如果用户端不能渲染一个音频图标(例如,用户环境不允许如此),我们建议它产生一个替换的提示(例如,弹出一个警告,发出一个警告声等)。

    参见:before及:after伪元素以了解其它的内容生成技术的信息。

19.6 混合属性:'play-during'

'play-during'
值: <uri> mix? repeat? | auto | none | inherit
初始值: auto
适用于: 所有元素
可否继承:
百分比 N/A
媒介: 音频

    和'cue-before''cue-after'属性类似,该属性指定了当某元素的内容被说出时播放的声音。取值含义如下:

<uri>
在说出元素内容时,播放<uri>指定的声音。
mix
如果指定该参数,意味着从父元素的'play-during'属性继承来的声音继续播放,而<uri>指定的声音会与之混合。如果不指定'mix',该元素的背景声将替换父元素的。
repeat
如果指定该参数,意味着该声音将重复播放,如果它的长度不足以填充该元素的持续时间的话。否则,声音仅播放一次而停止。它和'background-repeat'属性类似。如果声音对于元素而言过长,那么一旦元素内容被讲完,它会被剪裁。
auto
父元素的声音继续播放(但不是重新开始。如果属性被继承,则是重新开始播放)。
none
该关键字意味着无声。父元素的声音(如果有的话)在该元素期间无声,在当前元素之后继续。

Example(s):

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

19.7 空间属性:'azimuth''elevation'

    空间音频是音频呈现的一个重要的样式属性。它提供了一种自然的方式来区别各个声音,就象在生活中那样(人们很少会都呆在房间里的同一个地方)。立体声喇叭可以产生一个横向的声音平台。双耳耳机或者越来越流行的5喇叭家庭影院设置可以生成完全的环绕声音,而多喇叭设置可以创造一个真实的3D声音平台。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
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    取值含义如下:

<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度,即使继承的角度已经在听众背后(于是声音实际上是向右边移)。
rightwards
将声音相对当前角度右移。更精确的说,是加20度。有关算术运算,参见'leftwards'。

    要实现该属性很可能是通过以不同音量在不同声道中混合同一个信号而实现的。也可以通过相位平移,数字延迟以及其它技术来提供声音平台的假象。达到这个效果的确切方法以及使用的音箱数量取决于用户端;该属性很少指明需要的终端效果。

Example(s):

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
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    取值含义如下:

<angle>
以角度指定抬升位置,取值在'-90deg'和'90deg'之间。'0deg'意味着在前方水平面,大致就是和听众水平的平面。'90deg'意味着在头顶,而'-90deg'意味着在脚底。
below
等于'-90deg'。
level
等于'0deg'。
above
等于'90deg'。
higher
在当前角度加10度。
lower
在当前角度减10度。

    并未定义实现这些效果的确切方法和用多少扬声器。该属性只是指出了需要的终端效果。

Example(s):

H1   { elevation: above }
TR.a { elevation: 60deg }
TR.b { elevation: 30deg }
TR.c { elevation: level }

19.8 语音特征属性:'speech-rate''voice-family''pitch''pitch-range''stress''richness'

'speech-rate'
值: <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit
初始值: medium
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    该属性指定了说话速率。注意可以使用绝对和相对关键字值(和'font-size'比较)。取值的含义如下:

<number>
以每分钟字数(WPM)来指定说话速率。语种不同,具体速率也不一样。但是不管如何语音合成器都广泛支持。
x-slow
等于80 WPM。
slow
等于120 WPM。
medium
等于180 - 200 WPM。
fast
等于300 WPM。
x-fast
等于500 WPM。
faster
在当前语速上加40 WPM。
slower
在当前语速上减40 WMP。
'voice-family'
值: [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit
初始值: 取决于用户端
使用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    这些值是以逗号分割,优先排列的语音家族列表(和'font-family'比较)。取值含义如下:

<generic-voice>
取值为语音家族。可能的值有'male','female'及'child'。
<specific-voice>
取值为特定的实例(例如,喜剧演员,Trinoids,Carlos,Lani)。

Example(s):

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
适用月: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    指定说话嗓音的平均尖锐度(频率)。嗓音的平均尖锐度取决于语音家族。例如,标准男声的平均尖锐度是120Hz左右,而对于女声,是大约210Hz。

    取值的含义如下:

<frequency>
以赫兹(Hz)指定说话嗓音的平均尖锐度。
x-low, low, medium, high, x-high
这些值并不映射到绝对的频率,因为这取决于语音家族。用户端因该根据语音家族和用户环境将这些值映射到合适的频率。不过,用户端必须按顺序映射这些值(例如,'x-low'比'low'的频率低,等等)。
'pitch-range'
值: <number> | inherit
初始值: 50
适用于: 所有元素
可否继承
百分比: N/A
媒介: 音频

    指定了平均锐度的变化范围。我们所感觉到的人声锐度由基准频率决定。通常,男声是120Hz而女声是210Hz。人类语言说出时都带有可变锐度;这些变化带来了额外的含义和重点。因此,一种高度活泼的声音,也就是高度变形的声音,会呈现高的锐度区间。该属性指定了这些变化的范围,亦即基准频率可以在多大的程度上偏移平均锐度。

    取值含义如下:

<number>
取值为'0'到'100'。频率范围为'0'产生一种平直而单调的声音。频率范围50生成通常的变形。超过50会生成活泼的嗓音。
'stress'
值: <number> | inherit
初始值: 50
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    指定了语音的语调轮廓的“局部高峰”的高度。例如,英语是一个有强调的语种,一句话中的不同部分有首要,次要,再次的强调之分。'stress'的值控制着基于这些强调标记的变形数量的结果。该属性是'pitch-range'属性的伴随属性,用来允许开发者开发高端音频渲染。

    取值含义如下:

<number>
数值,介于'0'到'100'之间。数值的含义取决于说出的语种。例如,数值为'50'对于标准的英语男声(平均锐度 = 122 Hz),以正常语调和强调说话而言,和意大利语音中取值'50'的含义就不一样。
'richness'
值: <number> | inherit
初始值: 50
适用于: 所有元素
可否继承:
百分比 N/A
媒介: 音频

    指定语音的丰度或亮度。一个丰满的声音可以“充填”一个大房间,而平滑的声音则不能。(“平滑”指的是波形画出时的样子。)

取值含义如下:

<number>
取值间于'0'到'100'之间。取值越高,声音会越充填。较低的值产生柔和,蜜糖般的声音。

19.9 讲话属性:'speak-punctuation''speak-numeral'

    一个额外的讲话属性speak-header在关于表格一章中讲述。

'speak-punctuation'
值: code | none | inherit
初始值: none
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    该属性指定如何说标点符号。取值含义如下:

code
诸如分号、花括号等等都按原样读出。
none
不读出标点符号,但是会渲染成自然的停顿。
'speak-numeral'
值: digits | continuous | inherit
初始值: continuous
适用于: 所有元素
可否继承:
百分比: N/A
媒介: 音频

    该属性控制如何说出数字。取值含义如下:

digits
数字被读成独立的各个位。因此,"237"读成"2 3 7"。
continuous
将数字读成一个数。因此,"237"读成“两百三十七”。用什么单字读出取决于语种。