我在创建一个在ASP.NET中将文本转换为语音的应用程序时寻求一些见解.从我最初的研究来看,似乎:
MS SAPI要求客户端下载ActiveX组件,并且可以支持大量要转换的文本.我们的客户不愿意在他们的系统上安装任何组件,因此这种方法可能会或可能不会飞.
我确实理解.NET 3.0,我们有System.Speech.Synthesis命名空间.转换是否发生在服务器上?如果是这样,我将如何向客户提供服务?
我们的要求是能够转换大量文本,应该是可扩展和可靠的.哪种技术"生产就绪"能够在短时间内服务于大量请求.
任何想法都表示赞赏.
默认情况下,ASP.Net应用程序无法以足够的权限运行以访问语音合成,并且尝试运行Larsenal的代码将失败并出现安全性错误.
我通过在服务器上运行单独的WCF服务作为常规Windows服务,在应用程序中解决了这个问题.然后,ASP.Net应用程序与该服务进行通信.该服务只包含Larsenal的代码,返回一个字节数组,给定一串文本.
还有,一兆字节的文字?这是一部大小合适的小说.
编辑,11-12-09,回答一些评论:
System.Speech可以返回一个字节数组,也可以保存到wav文件中,然后可以将其提供给用户页面上嵌入的媒体播放器.当我构建我的谈话网页时,它的工作方式如下:
1)Page.aspx包含一个'embed'标签,用于将Windows Media Player放在页面上.来源是"PlayText.aspx?Textid = what".
2)PlayText.aspx加载适当的文本,并(通过WCF)与speechreader服务进行通信,将文本交给读取.
3)Speechreader服务创建一个MemoryStream并调用SpeechSynthesiser.SetOutputToWaveStream,然后将该流作为单个字节数组返回.这个数组是Response.Write() - 编辑给客户端.
这是SpeechReader服务的核心:
byte[] ITextReader.SpeakText(string text)
{
using (SpeechSynthesizer s = new SpeechSynthesizer())
{
using (MemoryStream ms = new MemoryStream())
{
s.SetOutputToWaveStream(ms);
s.Speak(text);
return ms.GetBuffer();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很确定在后端,这会返回一个巨大的XML字节数组,而且非常低效.我只是将其作为概念证明,所以没有研究过.如果您打算在生产中使用它,请确保它不会在内部返回如下内容:
<byte>23</byte>
<byte>42</byte>
<byte>117</byte>
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8451 次 |
| 最近记录: |