在ASP.NET响应中组合MP3文件?

时间:2010-01-19 23:43:01

标签: c# asp.net mp3 merge

编辑:哦.....我撒了!如果两个源文件具有不同的比特率,命令行会失败(samplerate是否重要?)。此外,当两个源具有相同的比特率时,下面的源代码成功。所以,这看起来像是一个比特率的挑战。 HRM ....

原始问题:

result.mp3(来自下面的命令行)可以在WMP11中播放。

下面的ASP.NET代码提供了一个在WMP11中可以正常运行的文件。但是,当我取消注释这两行时,WMP11将不会播放该文件。关于合并两个MP3文件的代码的某些内容并不令WMP11满意。

如何更改ASP.NET代码以合并HTTP响应中的两个MP3以及'copy'命令行给我的成功?

protected void Page_Load(object sender, EventArgs e) {
    Response.Clear();
    Response.ContentType = "audio/mpeg";
    Response.AddHeader("Content-Disposition", "attachment; filename=test.mp3");
    var bytes1 = System.IO.File.ReadAllBytes(@"C:\test1.mp3");
    WriteBytesToResponse(bytes1);
    //var bytes2 = System.IO.File.ReadAllBytes(@"C:\test2.mp3");
    //WriteBytesToResponse(bytes2);
    Response.End();
}

private void WriteBytesToResponse(byte[] sourceBytes) {
    using (var sourceStream = new MemoryStream(sourceBytes, false)) {
        sourceStream.WriteTo(Response.OutputStream);
    }
}

copy /B test1.mp3+test2.mp3 result.mp3

2 个答案:

答案 0 :(得分:1)

this问题的答案可能会对您有所帮助。

基本上,响应对象不会正确连接文件,因此您需要手动连接它们,然后将结果发送给客户端。

答案 1 :(得分:0)

我认为问题是响应对象并不真正知道如何一次处理两个文件。当您将文件附加到Web响应时,它正在假设它只是一个文件。

一次提供这两个文件的更好解决方案可能是将它们压缩/ tar到一个文件中,然后将其作为附件发送。

我甚至不知道浏览器是否能够在一个响应中正确处理两个文件。可能不是。