我正在尝试使用带有语音的网络聊天和实时文本突出显示(或视觉(来实现机器人的功能
一方面,我有一个工作样本,它可以选择语音、合成文本,并有一些事件(synthesisStarted、wordBoundary、visemeReceived等(:https://github.com/Azure-Samples/cognitive-services-speech-sdk/blob/master/samples/js/browser/synthesis.html
另一方面,我有第二个工作样本:https://microsoft.github.io/BotFramework-WebChat/03.speech/b.cognitive-speech-services-js/
我遇到的问题是,第二个样本,如果它也依赖于认知语音服务,那么它似乎更多地使用";服务器端";比在";客户端";(例如,我不得不修改服务器端代码以生成带有">voice"标记的SSML来更改语音,我还没有找到在客户端这样做的方法!(
用不同的方式表达:对于Web聊天,是否有一种方法可以用相同的";SpeechSDK.SpeechSynthesizer";类及其现有的javascript事件,如wordBoundary或新的visemeReceived?
JS-
添加内容:我还确认,如果您修改该样本(03.speech/e.select-voice(并删除/注释行
selectVoice: (voices, activity) =>
activity.locale === 'zh-HK'
? voices.find(({ name }) => /TracyRUS/iu.test(name))
: voices.find(({ name }) => /JessaNeural/iu.test(name)) ||
voices.find(({ name }) => /Jessa/iu.test(name)),
样本仍然有效,你可以听到英语和日语!(因为语音是在从机器人接收的SSML中编码的(
认知服务的语音作为其捆绑组件之一被烘焙到Web聊天中。因此,与其说它是在服务器端运行,不如说它只是嵌入到CDN包中。您之所以能够从机器人程序传入SSML标记的活动,是因为Web Chat实现被配置为读取活动中显示的任何标记。
也就是说,你不必在机器人中指定语音。正如你在这个网络聊天示例03.speech/e.select-voice中看到的,你可以在网络聊天的渲染器中指定。
就"wordBoundary"而言,目前似乎不支持它。查看SDK,在createCognitiveServicesSpeechServicesPonyfillFactory.js
中,没有引用"wordBoundary",也没有引用项目中的其他任何地方。
如果这是您希望在网络聊天中看到的功能,我建议您在repo中打开一个功能请求,以包含在未来的版本中。