创建将文本转换为语音的ASP.NET应用程序

Nic*_*ick 4 .net c# asp.net

我在创建一个在ASP.NET中将文本转换为语音的应用程序时寻求一些见解.从我最初的研究来看,似乎:

  1. MS SAPI要求客户端下载ActiveX组件,并且可以支持大量要转换的文本.我们的客户不愿意在他们的系统上安装任何组件,因此这种方法可能会或可能不会飞.

  2. 我确实理解.NET 3.0,我们有System.Speech.Synthesis命名空间.转换是否发生在服务器上?如果是这样,我将如何向客户提供服务?

我们的要求是能够转换大量文本,应该是可扩展和可靠的.哪种技术"生产就绪"能够在短时间内服务于大量请求.

任何想法都表示赞赏.

Ari*_*yck 6

默认情况下,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)