如何在WPF中立即暂停SpVoice?

Ale*_*ynh 5 wpf text-to-speech speech-synthesis

我想用许多语言的许多声音进行文本到语音转换.

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

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

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

BIB*_*NJU 0

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

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

我希望你能spVoice.Speak()同步调用。这就是您遇到此问题的原因。因此,使用异步方法而不是同步方法,您的问题应该得到解决。然后spVoice.Pause()就会立刻暂停。

SpVoice spVoice = new SpVoice ();
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync);
//......
spVoice.Pause();
Run Code Online (Sandbox Code Playgroud)