2011-01-12 74 views
6

我有如下因素代碼C#SpeechSynthesizer使服務響應

[WebMethod] 
public byte[] stringToWav(string text) 
{ 
    SpeechSynthesizer ss = new SpeechSynthesizer(); 
    MemoryStream ms = new MemoryStream(); 
    ss.SetOutputToWaveStream(ms); 
    ss.Speak(text); 
    return ms.ToArray(); 
} 

和服務沒有返回。任何想法爲什麼發生這種情況

+0

你的意思是它返回一個0長度的字節數組,或null? – MusiGenesis 2011-01-12 16:28:45

回答

0

您是否調試過並檢查了ms.ToArray()的值? ms.ToByteArray()可能會帶來更好的運氣。

6

我遇到了與ashx頁面相同的問題。

我不明白爲什麼,但似乎你需要使用一個單獨的線程,並等待它完成。

下面的代碼爲我工作:

public byte[] TextToBytes(string textToSpeak) 
{ 
    byte[] byteArr = null; 

    var t = new System.Threading.Thread(() => 
    { 
     SpeechSynthesizer ss = new SpeechSynthesizer(); 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      ss.SetOutputToWaveStream(memoryStream); 
      ss.Speak(textToSpeak); 
      byteArr = memoryStream.ToArray(); 
     } 
    }); 
    t.Start(); 
    t.Join(); 
    return byteArr; 
}