我想用多种语言的多种声音进行文本到语音的转换。
我试过SpeechSynthesizer (参考: System.Speech),但它只支持2个英语语音。在安装了6个来自微软网站的英语语音后,我仍然无法获得任何其他的语音。
我改用了SpVoice (参考:微软语音对象库)。SpVoice可以识别我刚安装的6个声音。问题是当我调用spVoice.Pause()时,它总是延迟0.5秒才完全停止说话。我还尝试将AlertBoundary设置为SpVoice,但没有帮助。
使用SpeakAsyncCancelAll时,SpeechSynthesizer可以立即暂停,但只适用于默认语音。
发布于 2016-12-22 13:43:11
基本上,Pause方法在最近的警报边界处暂停语音,并关闭输出设备,允许其他语音使用它。
spVoice.Speak()方法可以同步调用也可以异步调用。当同步调用时,该方法直到说出文本时才返回;当异步调用时,它立即返回,并且语音作为后台进程发出。
我希望您正在同步调用spVoice.Speak()。这就是你得到这个问题的原因。所以使用异步方法而不是同步方法,你的问题就应该解决了。然后spVoice.Pause()将立即暂停。
SpVoice spVoice = new SpVoice ();
spVoice.Speak ("Testing spVoice",SpeechVoiceSpeakFlags.SVSFlagsAsync);
//......
spVoice.Pause();https://stackoverflow.com/questions/37918446
复制相似问题