问题
I have the folowing code
[WebMethod]
public byte[] stringToWav(string text)
{
SpeechSynthesizer ss = new SpeechSynthesizer();
MemoryStream ms = new MemoryStream();
ss.SetOutputToWaveStream(ms);
ss.Speak(text);
return ms.ToArray();
}
and the service returns nothing. Any idea why this happens?
回答1:
I ran into the same exact problem with an ashx page.
I don't understand exactly why, but it seems that you need to use a separate thread and wait for it to complete.
The following code worked for me:
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;
}
回答2:
Have you debugged and checked the value of ms.ToArray()
? You might have better luck with ms.ToByteArray()
.
来源:https://stackoverflow.com/questions/4671158/c-sharp-speechsynthesizer-makes-service-unresponsive