我有两个vxml文档如下:
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">
<catch event="error.badfetch">
<prompt> Error in fetching document. end of test</prompt>
<exit />
</catch>
<catch event="error.connection.baddestination">
<prompt> Error 600. End of test</prompt>
<exit />
</catch>
<form id="main_menu">
<property name="confidencelevel" value="0.1" />
<field name="menu_choice" type="digits?maxlength=1">
<prompt>
<break time="1s" />
Enter a number
</prompt>
<filled>
<prompt>
<break time="1.5s" />
This is not Google voice
<break time="2s" />
</prompt>
<goto next="doc2.vxml" />
</filled>
</field>
</form>
</vxml><?xml version="1.0" ?>
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">
<form id="main">
<property name="ttsengine" expr="'google-tts'" />
<block>
<log>Google TTS test</log>
</block>
<field name="menu_choice" type="digits?maxlength=1">
<prompt>This is Google voice</prompt>
<filled>
<goto next="doc1.vxml" />
</filled>
</field>
</form>
</vxml>我的问题是:在doc1.vxml中,当ttsengine被设置为mrcp时,“这不是Google语音”被排队(没有播放)。在doc2.vxml中,ttsengine设置为google。然后两个提示:“这不是谷歌的声音”和“这是谷歌的声音”被播放的同时使用谷歌引擎。这是正确的,还是应该使用mrcp播放1,使用google播放第二次?
发布于 2018-09-10 14:08:25
据我所知,VoiceXML规范没有规定任何具体的行为。
我的期望是,VoiceXML解释器应该将第一个提示符排队,其中包含与生成相同输出相关的所有内容,就好像它将在排队的地方播放一样,包括任何影响生成输出的非标准属性,比如ttsengine属性。不幸的是,VoiceXML标准不承认这个生成步骤的概念。它只排队或播放,在生成提示符时留下未指定的实际时刻。当audiofetchhint平台实际获取音频文件时,VoiceXML属性会产生影响,但没有等效的语音合成方法。
如果在fetchaudio元素上添加了一个goto,则应该在第一个文档上刷新(并由此生成)提示队列。请注意,如果您希望在第二个问题中启用此提示,则这并不一定是正确的工作。
从规范中:
在转换状态下,各种提示都由可执行内容中的元素或表单项中的
<prompt>元素排队。此外,音频还可以由fetchaudio属性排队。正在播放排队的提示和音频。
fetchaudio的资源(例如文档)时。在这种情况下,在播放完fetchaudio之前排队的提示,然后,如果实际需要获取资源(即它在缓存中未过期),则在提取完成之前播放fetchaudio。解释器仍处于转换状态,在获取过程中不接受输入。发布于 2019-04-24 13:04:58
在进入下一个文档之前,需要将提示缓冲区刷新的控件返回给用户。
要使上面的工作在goto之前添加一个简单的菜单。
假的东西,如:
menu collect digits
play digits voice one
menu press 1 to hear the same in another voice
goto voice two
play digits voice twohttps://stackoverflow.com/questions/52177067
复制相似问题