Web Speech API规范指出:
*文本 * 属性
此属性指定此话语要合成与朗读得文本.它可以是纯文本或完整得,格式正确得SSML文档.对于不支持SSML或只支持某些标记得语音合成引擎,用户代理或语音引擎必须去掉它们不支持得标记并朗读文本.
它没有提供在SSML文档中使用text
的示例。
我在Chrome 33中尝试了以下操作:
var msg = new SpeechSynthesisUtterance();
msg.text = '<?xml version="1.0"?>\r\n<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">ABCD</speak>';
speechSynthesis.speak(msg);
它不起作用--声音试图叙述XML标记。此代码有效吗?
我必须提供XMLDocument
对象吗?
我试图了解Chrome是否违反了规范(应该作为bug报告),或者我的代码是否无效。
4条答案
按热度按时间j8ag8udp1#
在Chrome 46中,当语言设置为
en
时,XML在Windows上被正确地解释为XML文档;但是,我没有看到任何证据表明这些标记实际上在做任何事情。我没有听到这个SSML的<emphasis>
和非<emphasis>
版本之间有什么区别:<phoneme>
标签也被完全忽略了,这让我说IPA的尝试失败了。尽管微软语音API * 确实 * 正确处理SSML,但这是一个事实。下面是一个适合在LinqPad中使用的C#代码片段:
sbtkgmzw2#
Chromium当前存在与此问题相关的漏洞。
slhcrj9b3#
我已经在Chrome 104.0.5112.101(Linux)上试过了。没有用。当我检查调试控制台时,我得到了这样的消息:
添加一个像The question of whether speechSynthesis is allowed to run without user interaction中提到的按钮确实对我有用。至少可以说出文本,而不是SSML格式的文本。
ix0qys7i4#
我已经测试过了,XML解析似乎在Windows中可以正常工作,但在MacOS中却不能正常工作。