我希望用多种语言的语音进行文字转语音。
我试过SpeechSynthesizer
(参考:System.Speech),但它只允许2个英语语音。从微软网站安装了6个英语语音后,我仍然无法获得任何其他声音。
我改为SpVoice
(参考:Microsoft语音对象库)。 SpVoice可识别我刚安装的6种声音。问题是当我打电话给spVoice.Pause()
时,它总是会在完全停止说话之前延迟0.5秒。我还尝试为SpVoice设置AlertBoundary
,但它没有帮助。
SpeechSynthesizer可以使用SpeakAsyncCancelAll
立即暂停,但仅适用于默认语音。
答案 0 :(得分:0)
基本上,Pause
方法会在最近的警报边界处暂停语音并关闭输出设备,允许其他语音使用它。
spVoice.Speak()
方法。当同步调用时,该方法在文本被说出之前不会返回;当异步调用时,它立即返回,并且语音作为后台进程说话。
我希望您同步拨打spVoice.Speak()
。这就是你遇到这个问题的原因。所以使用异步方法而不是同步方法,你的问题应该解决。然后spVoice.Pause()
会立即停顿。
SpVoice spVoice = new SpVoice ();
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync);
//......
spVoice.Pause();