SAPI 文本语音转换(TTS)扩展标记语言(XML)标签分成几个范畴。
声音状态控制
直接项插入
声音上下文控制
声音选择
声音状态控制标签
SAPI TTS XML 支持五个控制当前声音状态的标签:Volume, Rate, Pitch, Emph, 和 Spell。
Volume
Volume标签控制一个声音的音量。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。
Volume标签需要一个属性:Level。这个属性的数值应该是一个在0到100的整数。超出这个范围的数值将被忽略。
<volume level="50">
这个文本应该用
50
级别的音量朗读。
<volume level="100">
这个文本应该用
100
级别的音量朗读。
</volume>
</volume>
<volume level="80"/>
以下的全部文本应该用
80
级别的音量朗读。
100是一个声音默认的音量级别。低数值表现的是这个默认数值的百分比。这意味着50就是最大音量的50%。
用Volume标签指定数值可以结合在编程中(使用ISpVoice::SetVolume)。例如,如果你结合<volume level="50">标签调用SetVolume( 50 ),那么声音的音量因该是全音量的25%。
Rate
Rate标签控制一个声音的速度。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。
Rate标签有两个属性,Speed和AbsSpeed,必须指定其中一个。这两个属性的数值必须是-10到10之间的整数。超出范围的数值将被引擎忽略(但是不被SAPI忽略)。AbsSpeed属性控制一个声音的绝对速度,所以一个数值为10声音总是符合一个10的数值,一个数值为5声音总是符合一个5的数值。
<rate absspeed="5">
这个文本应该用速率
5
朗读。
<rate absspeed="-5">
这个文本应该用速率
-5
朗读。
</rate>
</rate>
<rate absspeed="10"/>
以下的全部文本应该用速率
10
朗读。
Speed
Speed属性控制一个声音相对的速率。绝对数值是使用当前的绝对速度加在每个速度上建立的。
<rate speed="5">
这个文本应该用速率
5
朗读。
<rate speed="-5">
这个文本应该用速率
0
朗读。
</rate>
</rate>
0是一个声音默认的速度。为正数时速度比较快,为负数时速度比较慢。在编程中可以结合使用Rate标签指定数值(使用 ISpVoice::SetRate)。
Pitch
Pitch标签控制一个声音的音调。这个标签可以为空,这种情况应用于所有的该标签后面的文本,或者它也可以有内容,这种情况应用于标签内的内容。
Pitch标签有两个属性,Middle和AbsMiddle,两者必须指定一个。这两个属性的数值必须是-10到10之间的整数。超出范围的数值将被引擎忽略(但是不被SAPI忽略)。
AbsMiddle属性控制声音绝对的音调,所以一个数值为10声音总是符合一个10的数值,一个数值为5声音总是符合一个5的数值。
<pitch absmiddle="5">
这个文本应该用音调
5
朗读。
<pitch absmiddle="-5">
这个文本应该用音调
-5
朗读。
</pitch>
</pitch>
<pitch absmiddle="10"/>
以下的文本应该全用音调
10
朗读。
Middle属性控制一个声音相对的音调。绝对数值是使用当前的绝对音调加在每个音调上建立的。
<pitch middle="5">
这个文本应该用音调
5
朗读。
<pitch middle="-5">
这个文本应该用音调
0
朗读。
</pitch>
</pitch>
0是一个声音默认的音调。为正数时音调比较高,为负数时音调比较低。
Emph
Emph标签指出声音强调一个单词或者一部分文字。这个标记不能为空。下列的单词将被强调。
<emph> boo </emph>!
这个方法可能因为声音的不同而不同。
Spell
Spell标签强制声音拼出所有的文本,胜于它默认会破坏规则的普通的方式。所有的字符将被作为单词读出(包括逗号,数字等)。Spell标签不能为空。
<spell>
这些单词将被拼出。
</spell>
这些单词将不被拼出。
直接项插入标记
应用程序支持具有在一些级别上直接插入项的能力的三个标签:Silence,Pron,Bookmark。
Silence
Silence标签功能是插入一个指定的毫秒级的静寂时间到音频输出流中。这个标签必须为空,并且它必须有一个属性Msec。
500
毫秒的静寂
<silence msec="500"/>
才发生到这。
Pron
Pron 标签插入一个指定的发音。声音将严格的按照被指定的音素的顺序处理音素。这个标签可以为空,也可以不为空。如果它不为空的话,它将认为是为附上的文本的提供的发音。这意味着附上的文本将不被按照正常的方式处理。
Pron标签有一个属性,Sym,它的数值是一个用空格分割音素的字符串。
<pron sym="h eh 1 l ow & w er 1 l d "/>
<pron sym="h eh 1 l ow & w er 1 l d"> hello world </pron>
Bookmark
Bookmark 标签插入一个书签事件到一个音频输出流。当与文本相应的音频到达书签标记时使用这个事件来通知应用程序。
Bookmark标签有一个属性,Mark,它的数值是一个字符串。这个数值可以区分不同的书签事件(每个事件包含与他们相对应的标签的字符串值)。
应用程序将在这接受一个事件
<bookmark mark="bookmark_one"/>
在这将接受另一个事件
<bookmark mark="bookmark_two"/>
声音上下文控制标签
有两个标签关联当前声音的上下文:PartOfSp和Context。这些标签确定声音怎么协同文本进行处理。使用这些标签可以为声音扩展不同的上下文。
PartOfSp
PartOfSp 标签提供附上的单词的词性的发音。使用这个标签能够使一个单词根据词性做出正确的不同的发音。PartOfSp不能为空。
PartOfSp标签有一个属性,Part,它是一个与SAPI词性相应的字符串作。只有SAPI中定义了的词性被支持使用---"Unknown", "Noun", "Verb", "Modifier", "Function", "Interjection"。
<partofsp part="noun"> A </partofsp> is the first letter of the alphabet.
Did you <partofsp part="verb"> record </partofsp> that <partofsp part="noun"> record </partofsp>
Context
Context标签提供声音可以被用来确定规格化特定的项的信息,像日期,数字,货币。使用这个标签允许声音区分不同的日期格式(见下面的例子)。Context标签不能为空。
Context标签有一个属性,Id,它使用一个与附上的文本上下文相关的字符串。SAPI中定义了几个上下文并且可能有更多的可以被SAPI所识别,几乎任何字符串都可以被使用。更多详细的细节参见声音部分的文档。
<context id="date_mdy"> 03/04/01 </context> should be March fourth, two thousand one.
<context id="date_dmy"> 03/04/01 </context> should be April third, two thousand one.
<context id="date_ymd"> 03/04/01 </context> should be April first, two thousand four.
声音选择标签
有两个标签可以被用于改变当前的声音:Voice和Lang。
Voice
Voice标签选择一个基于特征,年龄,性别,语言,姓名,提供商和首选提供商的声音。这个标签可以为空,这种情况下标签将用于改变它后面的所有文本。它不为空的情况下,只改变包含的内容。
Voice有两个属性:Required和Optional。它们严格的对应IspObjectTokenCategory::EnumerateTokens 和 SpFindBestToken 函数的必需的和可选的属性参数。声音的选择必须严格的遵照与这两个函数相同的规则。就是说必须提供已经安装了的声音的必需的属性和一些可选的属性。更多的细节参见对象标记和注册设置。
另外,当Voice标签被使用时当前声音的属性总是作为作为可选属性被附加。这意味着一个和当前声音更相似的声音将比不那么相似的声音优先被选择。
如果没有和所有必需的属性匹配的声音,则当前声音不改变。
将会是默认的声音读下面的句子
<voice required="Gender=Female;Age!=Child">
一个女性的非儿童的声音读这个句子,如果它存在的话。
<voice required="Age=Teen">
一个青少年的声音将读这个句子,例如如果存在一个非儿童的女性的声音,它将优先于一个男青年的声音被选择。
</voice>
</voice>
Lang
Lang标签选择一个独立的基于语言属性的声音。这个标签可以为空,它将作用于标签后所有的文本,它也可以不为空,将只作用于标签内。
Lang标签有一个属性,LangId,这个属性应该是一个LANGID,例如409(英语)或者411(日语)。注意这些数字是16进制的,没有明显的“0x”。
Lang标签是一个包含必须属性"Language=xxx"的Voice标签的简化版本。所以下列的例子将产生正确的相同的结果:
<voice required="Language=409">
A U.S. English voice should speak this.
</voice>
<lang langid="409">
A U.S. English voice should speak this.
</lang>