我试图在我的mvc应用程序中实现一种播放wave文件的方法。 在我的控制器中,我基本上从db中获取字节数据,创建一个临时波文件并将该字节写入文件。然后在我的webgrid上,如果用户单击wave文件列中的任何行,则触发ajax调用以播放wave文件。这是我到目前为止: 控制器
dt.Columns.Add("WavFile", typeof(string));
foreach (DataRow dr in dt.Rows)
{
try
{
if (dr["CallerAuthorization"] != null && dr["CallerAuthorization"].ToString() != "")
{
Byte[] tempAudio = (Byte[])dr["CallerAuthorization"];
if (tempAudio.Length > 0)
{
dr["WavFile"] = CreateWavFile(tempAudio);
}
else
{
dr["WavFile"] = "";
}
}
else
{
dr["WavFile"] = "";
}
}
catch (Exception e)
{
if (e.Source != null)
Console.WriteLine(e.Source);
throw;
}
}
public string CreateWavFile(Byte[] authorization)
{
string tempDir = Path.GetTempFileName();
tempDir = tempDir.Substring(0, tempDir.Length - 4);
tempDir = tempDir + ".wav";
WaveFormat waveFormat = new WaveFormat(4000, 8, 2);
using (WaveFileWriter ww = new WaveFileWriter(tempDir, waveFormat))
{
ww.Write(authorization, 0, authorization.Length);
}
return tempDir;
}
public FileResult PlayAuthorization(string audio)
{
return new FilePathResult(audio, "audio/wav");
}
查看
<script>
$(document).ready(function () {
$(".audiobtn").click(function () {
$.ajax({
type: "POST",
url: "/SearchPayment/PlayAuthorization",
data: { audio: $(this).find('img').attr('alt') },
cache: false,
success: function (response) {
},
error: function (error) {
alert("Unable to play audio");
console.log(error);
}
});
})
})
</script>
<div style="display:none">
<audio controls preload="none">
<source src='response' type='audio/wav' />
</audio>
但它没有播放波形文件
有谁能告诉我我做错了什么以及如何解决这个问题?
谢谢
更新 我改变了我的实现以在客户端播放
<script type="text/javascript">
$(document).ready(function () {
$(".audiobtn").click(function () {
$.ajax({
type: "POST",
url: "/SearchPayment/PlayAuthorization",
data: { audio: $(this).find('img').attr('alt') },
async: false,
cache: false,
success: function (src) {
PlayWave(src);
$("#ContextMenu").fadeOut(80);
},
error: function (error) {
alert("Unable to play audio");
console.log(error);
}
});
})
function PlayWave(srcUrl) {
$('#waveSrc').attr("src", srcUrl);
$("audio")[0].play();
}
})
</script>
<div style="display:none">
<audio controls preload="none">
<source src="~/Content/authorization.wav" type="audio/wav" />
</audio>
</div>
[HttpPost]
public FileResult PlayAuthorization(string audio)
{
byte[] authorization = Convert.FromBase64String(audio);
string audioContents =
Request.MapPath("~/Content/authorization.wav");
string newAudio = audioContents;
FileInfo wavFile = new FileInfo(audioContents);
wavFile.Delete();
System.IO.File.WriteAllBytes(audioContents, authorization);
return new FilePathResult(audioContents, "audio/wav");
}
它播放它创建的第一个wav文件,但是当应用程序删除它并创建一个新的wav文件时,#34;〜/ Content / Authorization.wav&#34;它继续播放以前的wav文件而不是新文件。
我该怎么做才能解决这个问题?有没有办法为我拥有的每个数据动态创建一个新的wav文件,如何将其传递给我的音频标签?导致我实现它的方式,除非我在标签中指定wav文件的URL,否则它不会播放
谢谢