Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET web应用程序中使用语音合成器遇到问题_Asp.net_Asp.net Mvc_Text To Speech_Speech Synthesis - Fatal编程技术网

在ASP.NET web应用程序中使用语音合成器遇到问题

在ASP.NET web应用程序中使用语音合成器遇到问题,asp.net,asp.net-mvc,text-to-speech,speech-synthesis,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 { Spee

在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对象,调用SetOutputToDefaultVoice,但没有效果。我在Windows 8.1和Windows 8上都试过,在调试器下运行开发服务器,或者单独运行IIS Express

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

谢谢

-约翰

试试看

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中它对我很有效

你为什么要在一个线程中执行它?我倾向于在没有充分理由的情况下将线程添加到我的代码中。如果必须等待操作完成后才能继续,为什么要在单独的线程中执行此操作?我在上面提到,我添加线程是因为其他StackOverflow帖子建议这样做,但有线程和没有线程的问题没有区别。当我有一个真正的修复程序时,我会删除这个线程,假设它不是必需的。以下是我从论坛得到的回复。asp.net:显然,使用语音合成器是不允许的,但是因为它看起来仍然有点可疑,我现在把这个问题留待讨论。可能是重复的