用HTML5播放wav

时间:2012-05-14 12:05:08

标签: c# asp.net-mvc html5 wav text-to-speech

我正在尝试输出文本到语音的wav文件,并使用HTML5 <audio>标记进行播放。文本到语音的方法是输出字节,但是html5控件没有播放它。

如果不是直接将字节流式传输到控件,我首先将其保存为文件,然后将文件转换为带有文件流的字节并输出它们,它开始播放,但我不想保存每次都提交文件。我正在使用MVC 4.

    // in a class library
    public byte[] GenerateAudio(string randomText)
    {
        MemoryStream wavAudioStream = new MemoryStream();
        SpeechSynthesizer speechEngine = new SpeechSynthesizer();
        speechEngine.SetOutputToWaveStream(wavAudioStream);
        speechEngine.Speak(randomText);
        wavAudioStream.Flush();
        Byte[] wavBytes = wavAudioStream.GetBuffer();
        return wavBytes;
    }

    // in my controller
    public ActionResult Listen()
    {
        return new FileContentResult(c.GenerateAudio(Session["RandomText"].ToString()), "audio/wav");
    }

   // in my view
   <audio controls autoplay>
       <source src="@Url.Content("~/Captcha/Listen")" type="audio/wav" />
            Your browser does not support the <audio> element.
   </audio>

1 个答案:

答案 0 :(得分:0)

我也正在播放一个音频元素的wav文件,你的代码与我的逻辑相同。我刚刚注意到你在返回字节数组之前正在刷新你的流,这似乎是空的。

此外,您可以使用file作为返回类型并将字节数组传递给其构造函数。内容类型与代码中的内容类型相同。我想提一下(也许它也可能是一个帮助),我使用了两个流:一个外部范围流和保存数据的实际流。在我填充实际流后,我使用stream.CopyTo()将其内容复制到外部流,并且该外部流的实例是我在return语句中使用的实例。这可以避免错误“无法访问已关闭的流”(不完全是错误语句)。