使用System.Speech.Synthesis时最小化滞后

时间:2010-10-06 23:56:14

标签: c# text-to-speech

我正在使用内置于.NET 4中的TTS并希望语音立即发生,但是在我调用Speak和获取音频之间遇到了延迟。

我正在开发一个简单的倒计时器,它会调用最后五秒钟并完成(5 ... 4 ... 3 ... 2 ... 1 ...完成),但是当屏幕更新时随着新时代的到来,TTS落后,每次调用都会变得更糟。我尝试过使用SpeakAsync,但这只会让情况更糟。目前,Speak正在UI线程之外调用(在Timer Tick事件处理程序中)。

有没有办法尽量减少这种滞后,例如预先计算语音并缓存它或创建某种特殊的TTS线程?

1 个答案:

答案 0 :(得分:0)

我以某种方式读过我需要至少一百次的API调用。我在寻找SpeechSynthesizer.SetOutputToWaveStream

MemoryStream stream = new MemoryStream();
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SetOutputToWaveStream(stream);
synth.Play(text);
stream.Position = 0;
SoundPlayer player = new SoundPlayer(stream);
player.Play();

此代码将使用TTS将文本转换为流式传输到流中的WAV文件。您需要重置MemoryStream的位置,以便在从中创建SoundPlayer时,它会从头开始而不是从头开始读取流。初始化SoundPlayer后,您可以将其保存在某处,以便以后可以立即播放,而不必等待TTS初始化和播放声音。