在ASP.NET Web应用程序中使用语音合成器会卡住

时间:2014-05-23 14:47:14

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

在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用于其他事情也可以挂起。我有一个页面只是列举了声音,但它也会被卡住。如果我暂停调试器,任何线程中都没有用户代码,我不知道如何调试它。

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

有什么想法吗?我能提供的其他信息是否有用?

感谢。

-John

1 个答案:

答案 0 :(得分:0)

尝试

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中对我有用