【问题标题】:C# SpeechSynthesizer makes service unresponsiveC# SpeechSynthesizer 使服务无响应
【发布时间】:2011-01-12 16:24:17
【问题描述】:

我有以下代码

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

并且服务什么也不返回。知道为什么会这样吗?

【问题讨论】:

  • 你的意思是返回一个0长度的字节数组,还是null?
  • 它并没有真正返回任何东西。每次我使用 SpeechSnythesis 时,服务都没有返回,即使我将返回更改为随机字符串......
  • 发现这个 API 需要桌面应用程序真的不会让我感到惊讶。

标签: c# web-services speechsynthesizer


【解决方案1】:

我在 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;
}

【讨论】:

    【解决方案2】:

    您是否调试并检查过ms.ToArray() 的值? ms.ToByteArray() 可能会让你的运气更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2014-09-06
      • 2013-12-17
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多