C # SpeechSynthesizer делает сервис не отвечающим - PullRequest
6 голосов
/ 12 января 2011

У меня есть следующий код

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

, и сервис ничего не возвращает.Есть идеи, почему это происходит?

Ответы [ 2 ]

6 голосов
/ 08 апреля 2011

Я столкнулся с той же самой проблемой с страницей 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;
}
0 голосов
/ 12 января 2011

Вы отладили и проверили значение ms.ToArray()? Возможно, вам повезет больше с ms.ToByteArray().

...