Creating a ASP.NET application converting text to speech

后端 未结 5 829
野趣味
野趣味 2020-12-02 00:57

I seek some insight in creating an application that converts text to speech in ASP.NET. From my initial research, it appears that:

  1. MS SAPI requires the clie

相关标签:
5条回答
  • 2020-12-02 01:21

    By default, ASP.Net applications don't run with sufficient permissions to access Speech Synthesis, and attempting to run Larsenal's code will fail with a security error.

    I was able to get around this in an app by having a separate WCF service running on the server, as a regular Windows Service. The ASP.Net application then communicated with that service. That service just wrapped Larsenal's code, returning an array of bytes, given a string of text.

    Also, one megabyte of text? That's a good-sized novel.

    Edit, 11-12-09, answering some comments:

    System.Speech can either return an array of bytes, or save to a wav file, which you can then feed to a media player embedded on the user's page. When I built my talking web page, it worked like this:

    1) Page.aspx includes an 'embed' tag that puts a Windows Media Player on the page. The source is "PlayText.aspx?Textid=whatever".
    2) PlayText.aspx loads the appropriate text, and communicates (via WCF) to the speechreader service, handing it the text to read.
    3) The Speechreader service creates a MemoryStream and calls SpeechSynthesiser.SetOutputToWaveStream, and then returns the stream as a single array of bytes. This array is Response.Write()-ed to the client.

    Here's the meat of the SpeechReader service:

        byte[] ITextReader.SpeakText(string text)
        {
            using (SpeechSynthesizer s = new SpeechSynthesizer())
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    s.SetOutputToWaveStream(ms);
                    s.Speak(text);
                    return ms.GetBuffer();
                }
            }
        }
    

    I'm pretty sure that on the back end, this returns an enormous XML array-of-bytes, and is horribly inefficient. I just did it as a proof of concept, and so didn't research that. If you intend to use this in production, make sure that it's not internally returning something like this:

    <byte>23</byte>
    <byte>42</byte>
    <byte>117</byte>
    ...
    
    0 讨论(0)
  • 2020-12-02 01:22

    With the SpeechSynthesizer, you can output to a WAV file. You could then have a secondary process compress or convert to another format if needed. All this could be done on the server and then sent up through the browser.

    This CodeProject article is a good introduction to .NET Speech Synthesis.

    If you want to see how it performs with a LOT of text.... Add a reference to System.Speech and then use the following as a starting point:

    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();
            }
        }
    }
    

    A quick test on a file of 44,700 words (238KB) on my relatively fast machine...

    • Completed in 55 seconds
    • Generated a 626 MB WAV file
    0 讨论(0)
  • 2020-12-02 01:22

    I searched for "Convert Text Into Speech In Asp.Net" in Google and found a very nice and usefull link:

    http://codeprojectdownload.com/asp-net-2/convert-text-into-speech-in-asp-net/#.T0ScXIfXDZE

    It may also be useful to you.

    0 讨论(0)
  • 2020-12-02 01:28

    I achieved this by using codeBehind to run a javascript function that runs the text-to-speech command:

    codeBehind:

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

    javascript:

    <script>
      function nameOfFunction()
        {//start
           var msg = new SpeechSynthesisUtterance('READ ME!');
           window.speechSynthesis.speak(msg);
        }//end
    </script>
    
    0 讨论(0)
  • 2020-12-02 01:41

    I wrote an article on this on my blog: http://weblogs.asp.net/ricardoperes/archive/2014/04/08/speech-synthesis-with-asp-net-and-html5.aspx. I used AJAX and Data URIs to send voice data back and forth between the client and the server.

    0 讨论(0)
提交回复
热议问题