【问题标题】:How to pause SpVoice immediately in WPF?如何在 WPF 中立即暂停 SpVoice?
【发布时间】:2016-10-21 11:14:42
【问题描述】:

我想用多种语言进行文本到语音转换。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。实际上,我异步使用了 spVoice。我不认为这是一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多