使用SpeechLib托管问题

时间:2012-03-20 16:47:21

标签: c# hosting speech-to-text

您好我正在使用c#开发一个Web项目并使用VS2010。我使用SpeechLib将文本转换为语音。在我的计算机的本地工作都很好,但是当托管网页时,页面不起作用并输出错误500。

正如另一篇旧帖子(link)所述,问题似乎是该库试图在没有必要权限的文件夹中编写临时文件。问题但没有解决。

我该如何解决这个问题?谢谢!

1 个答案:

答案 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 */