C# 使用HTML5播放wav

C# 使用HTML5播放wav,c#,asp.net-mvc,html,wav,text-to-speech,C#,Asp.net Mvc,Html,Wav,Text To Speech,我正在尝试输出一个文本到语音的wav文件,并用HTML5标签播放它。文本到语音的方法输出字节,但html5控件没有播放 如果不是将字节直接流式传输到控件,而是首先将其保存为文件,然后使用filestream将文件转换为字节并输出它们,它将开始播放,但我不想每次都保存文件。我使用的是MVC4 // in a class library public byte[] GenerateAudio(string randomText) { MemoryStream

我正在尝试输出一个文本到语音的wav文件,并用HTML5
标签播放它。文本到语音的方法输出字节,但html5控件没有播放

如果不是将字节直接流式传输到控件,而是首先将其保存为文件,然后使用filestream将文件转换为字节并输出它们,它将开始播放,但我不想每次都保存文件。我使用的是MVC4

    // 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>
//在类库中
公共字节[]GenerateAudio(字符串随机文本)
{
MemoryStream wavAudioStream=新的MemoryStream();
SpeechSynthesizer speechEngine=新SpeechSynthesizer();
SetOutputToWaveStream(wavAudioStream);
speechEngine.Speak(随机文本);
wavAudioStream.Flush();
字节[]wavBytes=wavAudioStream.GetBuffer();
返回wavBytes;
}
//在我的控制器中
公共行动结果监听()
{
返回新的FileContentResult(c.GenerateAudio(Session[“RandomText”].ToString()),“audio/wav”);
}
//在我看来
您的浏览器不支持该元素。

我还将wav文件回放到音频元素,您的代码与我的代码具有相同的逻辑。我刚刚注意到,在返回字节数组之前,您正在刷新流,字节数组似乎是空的

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