[WebMethod]
public void PlayAudio(int id)
{
using (The_FactoryDBContext db = new The_FactoryDBContext())
{
if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
{
byte[] bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;
MemoryStream ms = new MemoryStream(bytes);
System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(ms);
myPlayer.Play();
}
}
}
显然在上面的代码中实际播放音频的是通过System.Media.SoundPlayer对象的C#代码,而不是浏览器,这就是它不能在服务器上播放的原因。
任何人都可以告诉我如何将音频从c#流式传输到网页,这样我就可以使用HTML5音频标签将其挂钩到按钮
答案 0 :(得分:2)
只需将流发送到客户端,浏览器就会决定如何播放它(您必须提供音频的MIME类型):
public ActionResult PlayAudio(int id)
{
MemoryStream ms = null;
using (The_FactoryDBContext db = new The_FactoryDBContext())
{
if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
{
byte[] bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;
ms = new MemoryStream(bytes);
}
}
return File(ms,"audio/mpeg");//if it's mp3
}
对于网络服务,请尝试以下方法:
[WebMethod]
public void PlayAudio(int id)
{
byte[] bytes = new byte[0];
using (The_FactoryDBContext db = new The_FactoryDBContext())
{
if (db.Words.FirstOrDefault(word => word.wordID == id).engAudio != null)
{
bytes = db.Words.FirstOrDefault(word => word.wordID == id).engAudio;
}
}
Context.Response.Clear();
Context.Response.ClearHeaders();
Context.Response.ContentType = "audio/mpeg";
Context.Response.AddHeader("Content-Length", bytes.Length.ToString());
Context.Response.OutputStream.Write(bytes, 0, bytes.Length);
Context.Response.End();
}