C#学习教程:如何在ASP.NETMVC中使用Windows语音合成器[HttpPost]publicActionResultTTS(stringtext){SpeechSynthesizerspeechSynthesizer=newSpeechSynthesizer();speechSynthesizer.Speak(文本);返回视图();但它给出了以下错误。System.InvalidOperationException:'此时无法启动异步操作。异步操作只能在异步处理程序或模块中或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保标记的.此异常还可能指示尝试调用“asyncvoid”方法,这在ASP.NET请求处理中通常不受支持。相反,异步方法应该返回一个任务,调用者应该等待它。程序中使用了System.Speech类和异步方法。System.Speech类可以在ASP.NETmvc应用程序中使用吗?怎么做?应该放在哪里?答案是:是的,您可以使用MVC中的System.Speech类。我认为您可以尝试使用异步控制器操作方法并使用SpeechSynthesizer.Speak和Task.Run方法,如下所示:[HttpPost]publicasyncTaskTTS(stringtext){Tasktask=Task.Run(()=>{using(SpeechSynthesizerspeechSynthesizer=newSpeechSynthesizer()){speechSynthesizer.Speak(text);returnView();}});返回等待任务;但是,如上例所示,生成的声音是在服务器上播放的,因为上面的代码是在服务器端运行的,而不是在客户端运行的。要在客户端启用播放,您可以使用SetOutputToWaveFile方法并在返回到下例所示的视图页面时使用音频标签播放音频内容(假设您在CSHTML视图中使用HTML5):Regulator[HttpPost]publicasyncTaskTTS(stringtext){//您可以将输出文件名设置为方法参数或从文本生成stringfileName="fileName";任务task=Task.Run(()=>{使用(SpeechSynthesizerspeechSynthesizer=newSpeechSynthesizer()){speechSynthesizer.SetOutputToWaveFile(Server.MapPath("~/path/to/file/")+fileName+".wav");speechSynthesizer.Speak(text);ViewBag.FileName=fileName+".wav";returnView();}});返回等待任务;或者,您可以将操作类型更改为FileContentResult并使用MemoryStream和SetOutputToWaveStream让用户自己播放音频文件:使用(MemoryStreamstream=newMemoryStream()){speechSynthesizer.SetOutputToWaveStream(stream);speechSynthesizer.Speak(text);varbytes=stream.GetBuffer();returnFile(bytes,"audio/x-wav");}}});参考:类似问题usingasyncmethodsinASP.NETMVC:HowtouseSpeechSystem.Speech.SynthesisinmvchangsonhighCPUon2012R2以上是C#学习教程:HowtouseWindowsspeechsynthesizerinASP.NETMVCAllthe分享的内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
