【问题标题】:Using speech synthesizer in ASP.NET web application gets stuck在 ASP.NET Web 应用程序中使用语音合成器卡住了
【发布时间】:2014-05-23 14:47:14
【问题描述】:

在 MVC Web 应用程序中,我使用 SpeechSynthesizer 类在返回视图的控制器操作处理程序调用的函数中向 .wav 文件朗读一些文本。代码执行,写入文件,操作句柄返回,但开发服务器通常(但不总是)永远不会返回返回页面。这是文字转语音的代码:

string threadMessage = null;
bool returnValue = true;

var t = new System.Threading.Thread(() =>
{
    try
    {
        SpeechEngine.SetOutputToWaveFile(wavFilePath);
        SpeechEngine.Speak(text);
        SpeechEngine.SetOutputToNull();
    }
    catch (Exception exception)
    {
        threadMessage = "Error doing text to speech to file: " + exception.Message;
        returnValue = false;
    }
});
t.Start();
t.Join();

if (!returnValue)
{
    message = threadMessage;
    return returnValue;
}

我在一个建议在线程中执行操作的服务中看到了几个类似问题的帖子,因此上面的线程。

实际上,将 SpeechSynthesizer 用于其他事情也可能会挂起。我有一个页面只是列举了声音,但它也会卡住。由于如果我暂停调试器,任何线程中都没有用户代码,我不知道如何调试它。

之后我尝试处理 SpeechSynthesizer 对象,调用 SetOutputToDefaultVoice,但无济于事。我在 Windows 8.1 和 Windows 8 上都试过了,在调试器下使用开发服务器运行,或者单独运行 IIS Express。

有什么想法吗?还有其他我可以提供的有用信息吗?

谢谢。

-约翰

【问题讨论】:

  • 你为什么要在一个线程中做呢?我倾向于不会在没有充分理由的情况下将线程添加到我的代码中。
  • 如果必须等待操作完成才能继续,为什么还要在单独的线程中执行?
  • 我在上面提到我添加了线程,因为其他一些 StackOverflow 帖子建议它,但是有或没有线程的问题没有区别。假设不需要它,我将在真正修复时删除该线程。
  • 这是我从 forums.asp.net 得到的回复:forums.asp.net/p/1989192/… 显然不允许使用语音合成器,但由于它似乎仍然有点问题,所以我将问题留待现在。

标签: asp.net asp.net-mvc text-to-speech speech-synthesis


【解决方案1】:

试试

Public void Speak(string wavFilePath, string text)
{
        using (var synthesizer = new SpeechSynthesizer())
        {
            synthesizer.SetOutputToWaveFile(wavFilePath);
            synthesizer.Speak(text);
            return outputFile;
        }
}

Task.Run(() => Speak("path", "text")).Result;

它在 IIS Express 中对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多