使用HTML5播放wav音频文件

5
我想输出一个文字转语音的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

我也在将wav文件回放到音频元素中,你的代码和我的逻辑相同。我注意到你在返回字节数组之前刷新了流,这会导致它看起来是空的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接