在介绍完语音合成资源请求方法后,我们继续介绍语音合成资源的另外两个重点内容:两个事件和其header的参数设置。
1
语音合成资源包括了两个主要的事件,它们分别是SPEECH-MARKER和SPEAK-COMPLETE事件。
当语音合成资源服务器在其正在使用的语音描述语言中发现支持了一个标记标签时,语音合成服务器会生成一个SPEECH-MARKER的事件。在SSML文件中会插入一个要素和其关联的值。另外,当在PENDING状态的SPEAK请求进入到IN-PROGRESS状态时,资源合成服务器也会发生SPEECH-MARKER事件。这里,SPEECH-MARKER的目的是请求状态从此时(时间戳)进入到IN-PROGRESS状态。
SPEECH-MARKER设计中会包含一个Speech-Marker包含一个时间戳和其发现的标签。以下是一个SPEECH-MARKER的示例图:
具体的SPEECH-MARKER 事件中包含的消息如下:
F1(client→speechsynth):
MRCP/2.0330 SPEAK 8000
Channel-Identifier:23eb10a@speechsynth
Content-Type:application/ssml+xml
Content-Length:205
xml:lang="en-US">
From
here to there
F2 (speechsynth → client):
MRCP/2.0 118 8000 200IN-PROGRESS
Channel-Identifier: 23eb10a@speechsynth
Speech-Marker: timestamp=857206027059
F3 (speechsynth → client):
MRCP/2.0 132 SPEECH-MARKER 8000 IN-PROGRESS
Channel-Identifier: 23eb10a@speechsynth
Speech-Marker: timestamp=861500994355;here
F4 (speechsynth → client):
MRCP/2.0 133 SPEECH-MARKER 8000 IN-PROGRESS
Channel-Identifier: 23eb10a@speechsynth
Speech-Marker: timestamp=865795961651;there
F5 (speechsynth → client):
MRCP/2.0 161 SPEAK-COMPLETE 8000 COMPLETE
Channel-Identifier: 23eb10a@speechsynth
Speech-Marker: timestamp=865795961652;there
Completion-Cause: 000 normal
2
SPEAK-COMPLETE事件简单来说就是完成了相应的SPEAK请求以后,合成资源服务器端生成的事件消息。SPEAK-COMPLETE事件消息中包含Completion-Cause来说明结果原因。其最后的原因代码如下列表:
3
在合成语音资源的头域值中包括了十七个头域值。我们这里简单介绍这些header的消息内容。
因为篇幅的关系,我们不会对每个头做非常详细地说明,笔者仅做一个简单介绍。具体的细节读者可以参考RFC6786。以下是十七个头的使用说明:
Completion-Cause总是出现在SPEAK-COMPLETE 响应消息中,它表示SPEAK结束。此头值包含一个原因代码和相应的原因名称。例如:Completion-Cause:002 parse-failure。
Completion-Reason总是以可选的方式出现在SPEAK-COMPLETE 响应消息中来提供更多消息说明,它表示SPEAK 请求结束的原因。此消息用来支持对MRCP客户端的日志排查等。例如:Completion-Reason:SSMLnotwell-formed。
Failed-URI 表示访问URL失败,例如:Failed-URI:http://www.example.com/dictionary.pls。
Failed-URI-Cause是配合Failed-URI来一起工作为使用的协议提供更多具体的消息内容,例如 HTTP的4XX或者5XX消息,例如: Failed-URI-Cause:404 Not Found。
Speech-Marker具有两个目的:1)报告最后发现的标记。2)报告执行语音合成的时间戳。例如:Speech-Marker:timestamp=857206027059;my_mark_name。
Voice-支持四种SSML的属性,它们分别是:Voice-Gender,Voice-Age,Voice-Variant,和Voice-Name。例如:Voice-Gender:female。
Prosody-支持来自于SSML的六种属性,它们分别是:Prosody-Pitch,Prosody-Contour,Prosody-Range,Prosody-Rate,Prosody-Duration,和Prosody-Volume。这些属性我们在以前的SSML文件中已经做过介绍。读者可以参考历史文档来进一步学习。例如:Prosody-Volume:soft
Speaker-Profile 提供一个URL参考链接支持说话人的语音合成。示例:Speaker-Profile:http://www.example.com/speaker01.pfl。
Speech-Language表示默认的合成语言支持。示例为:Speech-Language:en-GB。
Kill-On-Barge-In携带一个布尔值来打断SPEAK请求中的DTMF或者语音输入。示例为:Kill-On-Barge-In:false。
Fetch-Hint决定何时语音合成资源应该对资源(URL关联的相关资源)做一个请求。示例:Fetch-Hint:safe。 这里safe表示当需要内容时可以对其进行下载。
Audio-Fetch-Hint表示对仅使用在语音文件中,并且可以覆盖上面的头值。示例:Audio-Fetch-Hint:stream。
Jump-Size表示要求对语音进行跳转(前转或回退)。示例:Jump-Size:+5 Second, 可选参数包括:Second,Word,Sentence, 或者Paragraph。
Speak-Restart 消息通知MRCP 客户端有一个CONTROL请求携带了跳转的设置。示例:Speak-Restart:true。
Speak-Length 设定一个在语音的说话长度。例如:Speak-Length:25 Second
Load-Lexicon 在DEFINE-LEXICON请求中设定的值表示是否可以加载或者卸载语法文件。示例:Load-Lexicon:false。
Lexicon-Search-Order设定一个已查询到的语法列表。示例:
Lexicon-Search-Order:
4
在此章节的介绍中,我们介绍了两种事件的具体细节和消息示例,另外还介绍了语音合成资源的十七个header以及各自的示例。用户可以参考RFC对header的属性和可选参数进行进一步的了解。
在接下来的章节中,笔者会继续介绍语音识别资源的请求,事件和header的使用说明。
unimrcp-MRCP协议学习分享,QQ群号:208136295
领取专属 10元无门槛券
私享最新 技术干货