如何在MVC 4中播放wave文件

时间:2017-08-24 16:42:19

标签: c# asp.net-mvc audio wave

我试图在我的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,否则它不会播放

谢谢

0 个答案:

没有答案