Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建将文本转换为语音的ASP.NET应用程序_C#_.net_Asp.net - Fatal编程技术网

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

C# 创建将文本转换为语音的ASP.NET应用程序,c#,.net,asp.net,C#,.net,Asp.net,我在创建一个在ASP.NET中将文本转换为语音的应用程序时寻求一些见解。根据我的初步研究,似乎: MS SAPI要求客户端下载ActiveX组件,并且可以支持大量要转换的文本。我们的客户不愿意在他们的系统上安装任何组件,因此这种方法可能有效,也可能无效 我确实了解.NET3.0,我们有System.Speech.Synthesis命名空间。转换是否在服务器上进行?如果是,我将如何为客户提供服务 我们的要求是能够转换大量文本,应该是可扩展和可靠的。哪种技术是“生产就绪”技术,能够在短时间间隔内为大

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

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

  • 我确实了解.NET3.0,我们有System.Speech.Synthesis命名空间。转换是否在服务器上进行?如果是,我将如何为客户提供服务

  • 我们的要求是能够转换大量文本,应该是可扩展和可靠的。哪种技术是“生产就绪”技术,能够在短时间间隔内为大量请求提供服务


    感谢您的任何想法。

    使用SpeechSynthesizer,您可以输出到WAV文件。然后,如果需要,您可以让一个辅助进程压缩或转换为另一种格式。所有这些都可以在服务器上完成,然后通过浏览器发送

    是对.NET语音合成的一个很好的介绍

    如果你想看看它在大量文本中的表现。。。。添加对System.Speech的引用,然后使用以下内容作为起点:

    using System;
    using System.Speech.Synthesis;
    
    namespace SpeakToMe
    {
        class Program
        {
            static void Main(string[] args)
            {
                SpeechSynthesizer synth = new SpeechSynthesizer();
                synth.SetOutputToWaveFile("c:\\test.wav");
                synth.Speak("Hello, world.");
                synth.SetOutputToDefaultAudioDevice();
    
                Console.ReadLine();
            }
        }
    }
    
    在我相对快速的机器上对44700字(238KB)的文件进行快速测试

    • 在55秒内完成
    • 生成了一个626MB的WAV文件

      • 默认情况下,ASP.Net应用程序运行时没有足够的权限访问语音合成,尝试运行Larsenal的代码将失败,并出现安全错误

        通过在服务器上运行一个单独的WCF服务(作为常规的Windows服务),我可以在一个应用程序中解决这个问题。然后ASP.Net应用程序与该服务通信。该服务只是包装了Larsenal的代码,返回一个字节数组,给定一个文本字符串

        还有,一兆字节的文本?那是一本很好的小说

        编辑,11-12-09,回答一些评论:

        System.Speech可以返回一个字节数组,也可以保存到wav文件中,然后将其馈送到嵌入用户页面的媒体播放器中。当我建立我的有声网页时,它是这样工作的:

        <byte>23</byte>
        <byte>42</byte>
        <byte>117</byte>
        ...
        
        1) Page.aspx包含一个“嵌入”标记,用于将Windows Media Player放在页面上。源代码是“PlayText.aspx?Textid=which”。
        2) PlayText.aspx加载适当的文本,并(通过WCF)与speechreader服务通信,将文本交给它阅读。
        3) Speechreader服务创建一个MemoryStream并调用SpeechSynthesizer.SetOutputToWaveStream,然后将该流作为单个字节数组返回。此数组是Response.Write()-ed到客户端的

        以下是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();
                    }
                }
            }
        
        我敢肯定,在后端,这将返回一个庞大的XML字节数组,而且效率极低。我只是做了个概念证明,所以没有研究。如果您打算在生产中使用它,请确保它不会在内部返回如下内容:

        <byte>23</byte>
        <byte>42</byte>
        <byte>117</byte>
        ...
        
        23
        42
        117
        ...
        
        我在谷歌搜索了“在Asp.Net中将文本转换为语音”,找到了一个非常好且有用的链接:


        它也可能对您有用。

        我在我的博客上写了一篇关于此的文章:。我使用AJAX和数据URI在客户端和服务器之间来回发送语音数据。

        我通过使用codeBehind运行javascript函数来实现这一点,该函数运行文本到语音命令:

        代码隐藏:

        Page.ClientScript.RegisterStartupScript(
        GetType(), 
        "anythingHere", 
        "nameOfFunction();", 
        true);
        
        javascript:

        <script>
          function nameOfFunction()
            {//start
               var msg = new SpeechSynthesisUtterance('READ ME!');
               window.speechSynthesis.speak(msg);
            }//end
        </script>
        
        
        函数名函数()
        {//开始
        var msg=newspeechsynthesisutterance('READ ME!');
        window.speechSynthesis.speak(msg);
        }//结束
        
        SpeechSynthesizer是否具有转换大量文本(>1mb)的能力?这项技术可以用于生产应用程序吗?另外,最好在服务器上创建并通过浏览器发送。似乎我必须将wav文件保存在服务器上,这可能会占用大量空间?如果我想在用户使用文件后清除该文件,那么什么触发器是可靠的(关闭浏览器窗口?)要节省空间,您可以使用一个转换为MP3的辅助进程。如果用户只需要听一次文件,您可能希望定期(例如,每晚)清除文件。如果用户需要返回到相同的转换,您可能需要一些方法,首先检查您是否仍然有MP3,如果没有,则重建它。就其转换大量文本的能力而言。。。试试看。CP这篇文章是一个很好的起点。我自己研究这个问题已经很长时间了,现在我有了答案。谢谢。@Aric-使用您的方法,我不必将wav文件保存在服务器上?服务返回的“字节数组”-如何在客户端机器上播放?关于安全性的好观点。提供我的样本是为了让OP能够测试System.Speech,他将其描述为大量文本。@Aric-是的,文本大小很有挑战性,这就是为什么我想在提交给决策者之前评估不同选项。检查我的答案,以获得44k单词的快速测试结果。