c# - 用 HTML5 播放 wav

标签 c# asp.net-mvc html 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>

最佳答案

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

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

关于c# - 用 HTML5 播放 wav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10582957/

相关文章:

c# - 如何在表格布局面板中动态添加行和列

asp.net-mvc - DotNetNuke 中的 ASP.NET MVC?

asp.net - 应用程序之间的 Azure AD 身份验证

asp.net-mvc - 使用 ASP.NET MVC 将多个 View 返回到一个 ActionResult

c# - Entity Framework 1对0或1关系配置

c# - Interlocked.Exchange 后无锁读取值?

c# - 套接字性能 C++ 或 C#

html - 如何在 arraylist 中获取 arraylist where index = x

jquery - 从 Popover 中移除阴影

javascript - 使用 thymeleaf 在外部 javascript 中添加模型对象