您好我正在使用c#开发一个Web项目并使用VS2010。我使用SpeechLib将文本转换为语音。在我的计算机的本地工作都很好,但是当托管网页时,页面不起作用并输出错误500。
正如另一篇旧帖子(link)所述,问题似乎是该库试图在没有必要权限的文件夹中编写临时文件。问题但没有解决。
我该如何解决这个问题?谢谢!
答案 0 :(得分:1)
解决磁盘权限问题的一种方法是不将音频保存到磁盘。为此,您可以将输出转换为流对象,可以通过网页,HTTP处理程序或MVC操作返回。不幸的是,“SetOutputToAudioStream”仅返回原始PCM音频。
为了输出其他编码,如μ-law(mu-law,u-law,ulaw),您必须通过使用反射来访问非公共SetOutputStream方法。下面是一个代码片段,它完成了这个并返回一个字节数组:
using System.Reflection;
/* Beginning Code */
byte outputWavBytes;
MemoryStream outputWav = new MemoryStream()
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
var mi = synth.GetType().GetMethod("SetOutputStream", BindingFlags.Instance | BindingFlags.NonPublic);
var fmt = new SpeechAudioFormatInfo(EncodingFormat.ULaw, 8000, 8, 1, 20, 2, null)
mi.Invoke(synth, new object[] { outputWav, fmt, true, true });
synth.Speak("This is a test to stream a different encoding.");
outputWav.Seek(0, SeekOrigin.Begin);
outputWavBytes = outputWav.GetBuffer();
}
/* End Code */