C# SpeechSynthesizer 导致服务无响应

发布于 2024-10-12 03:17:03 字数 303 浏览 3 评论 0原文

我有以下代码

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

,该服务没有返回任何内容。知道为什么会发生这种情况吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

快乐很简单 2024-10-19 03:17:03

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

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;
}
浴红衣 2024-10-19 03:17:03

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

Have you debugged and checked the value of ms.ToArray()? You might have better luck with ms.ToByteArray().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文