3

我正在尝试使用 SpeakAsync() 方法说出一些文本。但是,在我调用 Speak() 之前它不会开始说话。我不想调用 Speak()。如果我从此代码中删除 Speak() 方法,则根本不会调用任何内容:

        using (SpeechSynthesizer synth = new SpeechSynthesizer())
        {

            synth.SelectVoice("ScanSoft Emily_Dri20_22kHz");

            synth.Rate = 10;
            synth.Volume = 100;

            synth.SpeakAsync("oh, i'm a lumberjack and i'm okay!  I sleep all night and I work all day!");
            synth.SpeakAsync("If he was dying he wouldn't bother writing ah!  He'd just say it!");
            synth.Speak("i don't want to go on the cart.");
            synth.SpeakAsync("We don't have a lord.  We're an anarcho-syndicalist commune.");
            synth.SpeakAsync("If you do not show us the grail, we shall take your castle by force!");
            synth.Speak("what do you mean, an african swallow or a european swallow?");

更新:

似乎其他人也遇到了这个问题,但尚未找到解决方案:

其他人有这个问题

4

1 回答 1

6

这是因为Speak是一个让程序保持运行的阻塞调用。由于您将其作为控制台应用程序运行Console.ReadKey();,因此请在代码末尾添加以确保应用程序在用户按下某个键之前一直运行。

否则,主线程将退出,因为会SpeakAsync立即返回,因此您的程序会飞过所有这些行,然后退出,这就是您听不到任何声音的原因。

根据评论更新 -

usingSpeechSynthesizer几乎立即处理,这就是为什么什么都听不到的原因。您可以将其放置Console.ReadKey();在块的右大括号之前,也可以using移除using块并稍后手动处理它。

于 2013-04-04T11:41:12.380 回答