2010-10-06 195 views
0

我正在使用內置於.NET 4中的TTS進行遊戲,並且希望語音立即發生,但是在我打電話說話時以及獲取音頻時會遇到延遲。使用System.Speech.Synthesis時儘量減少延遲

我正在開發一個簡單的向下計時器,它可以關閉最後五秒鐘和完成(5 ... 4 ... 3 ... 2 ... 1 ...完成),但是當屏幕隨着新時間更新,TTS滯後,每次調用都會變得更糟。我嘗試使用SpeakAsync,但這隻會讓事情變得更糟。目前,Speak在UI線程之外被調用(在Timer Tick事件處理程序中)。

有沒有一種方法來最大限度地減少這種滯後,如預先計算語音並緩存它或創建某種特殊的TTS線程?

回答

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初始化並播放聲音。