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