如何在WPF中立即暂停SpVoice?

时间:2016-06-20 09:03:05

标签: wpf text-to-speech speech-synthesis

我希望用多种语言的语音进行文字转语音。

我试过SpeechSynthesizer(参考:System.Speech),但它只允许2个英语语音。从微软网站安装了6个英语语音后,我仍然无法获得任何其他声音。

我改为SpVoice(参考:Microsoft语音对象库)。 SpVoice可识别我刚安装的6种声音。问题是当我打电话给spVoice.Pause()时,它总是会在完全停止说话之前延迟0.5秒。我还尝试为SpVoice设置AlertBoundary,但它没有帮助。

SpeechSynthesizer可以使用SpeakAsyncCancelAll立即暂停,但仅适用于默认语音。

1 个答案:

答案 0 :(得分:0)

基本上,Pause方法会在最近的警报边界处暂停语音并关闭输出设备,允许其他语音使用它。

可以同步或异步调用

spVoice.Speak()方法。当同步调用时,该方法在文本被说出之前不会返回;当异步调用时,它立即返回,并且语音作为后台进程说话。

我希望您同步拨打spVoice.Speak()。这就是你遇到这个问题的原因。所以使用异步方法而不是同步方法,你的问题应该解决。然后spVoice.Pause()会立即停顿。

SpVoice spVoice = new SpVoice ();
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync);
//......
spVoice.Pause();