如何使用naudio将mp3和wav文件连接到字节缓冲区c#MVC?

如何使用naudio将mp3和wav文件连接到字节缓冲区c#MVC?,c#,asp.net-mvc,mp3,wav,naudio,C#,Asp.net Mvc,Mp3,Wav,Naudio,我找到了很多关于如何连接mp3或wav文件的文章,但是我没有找到任何关于如何连接不同类型的音频文件的文章。我想一个接一个地播放wav文件,然后是mp3文件。 我尝试使用将wav文件转换为mp3 private static MemoryStream ConvertWavToMp3(string path) { if (File.Exists(path)) { MemoryStream stream =

我找到了很多关于如何连接mp3或wav文件的文章,但是我没有找到任何关于如何连接不同类型的音频文件的文章。我想一个接一个地播放wav文件,然后是mp3文件。 我尝试使用将wav文件转换为mp3

  private static MemoryStream ConvertWavToMp3(string path)
    {

            if (File.Exists(path))
            {
                MemoryStream stream = new MemoryStream();
                using (WaveFileReader rdr = new WaveFileReader(path))
                using (LameMP3FileWriter wtr = new LameMP3FileWriter(stream, rdr.WaveFormat, 320))
                {
                    rdr.CopyTo(wtr);
                    return stream;
                }
            }
            else
            {
                return null;
            }
        }
    }
我通过以下代码从mp3文件中获取字节

 private static MemoryStream GetBytesFromMp3(string path)
    {
        string storageName = path.Substring(path.IndexOf("\\\\") + 2, path.IndexOf("\\", 3) - path.IndexOf("\\\\") - 2);
        string networkShare = path.Substring(0, path.LastIndexOf("\\"));
        NetworkCredential credentials = new NetworkCredential(ConfigurationManager.AppSettings[storageName + "_User"], ConfigurationManager.AppSettings[storageName + "_Pass"]);

        using (new NetworkConnection(networkShare, credentials))
        {
            if (File.Exists(path))
            {
                using (Mp3FileReader rdr = new Mp3FileReader(path,FileMode.OpenOrCreate))
                {
                    byte[] result = new byte[rdr.Length];
                    rdr.Read(result, 0, result.Length);
                    int a = result.Max();
                    MemoryStream stream = new MemoryStream(result);
                    return stream;
                }

            }
            else
            {
                return null;
            }
        }
    }
然后合并它们 借


Mp3FileReader=new Mp3FileReader(stream)
中,我发现一个错误,没有找到mp3头。

不要将任何内容转换为mp3。只需为给定文件创建合适的读取器(
waveleader
用于
wav
Mp3FileReader
用于
mp3
)。这两个类都源于
WaveStream
,后者提供了
Read
方法。使用该方法检索未压缩的数据。现在您可以轻松合并两个流。当然,
WaveFormat
必须匹配

但你们不需要重新发明轮子。有内置的连接机制

var wavReader = new WaveFileReader ("file.wav");
var mp3Reader = new Mp3FileReader ("file.mp3");

// convert to different interface
var wavProvider = wavReader.ToSampleProvider ();
var mp3Provider = mp3Reader.ToSampleProvider ();

// Must all share the same sample rate and channel count
var merged = new ConcatenatingSampleProvider (new[] { wavProvider, mp3Provider });

var output = new WasapiOut ();

output.Init (merged);
output.Play ();

Console.ReadKey ();
祝你好运

public static void Combine(string[] inputFiles, Stream output)
{
    foreach (string file in inputFiles)
    {
        Mp3FileReader reader = new Mp3FileReader(stream);
        if ((output.Position == 0) && (reader.Id3v2Tag != null))
        {
            output.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);
        }
        Mp3Frame frame;
        while ((frame = reader.ReadNextFrame()) != null)
        {
            output.Write(frame.RawData, 0, frame.RawData.Length);
        }
    }
}
var wavReader = new WaveFileReader ("file.wav");
var mp3Reader = new Mp3FileReader ("file.mp3");

// convert to different interface
var wavProvider = wavReader.ToSampleProvider ();
var mp3Provider = mp3Reader.ToSampleProvider ();

// Must all share the same sample rate and channel count
var merged = new ConcatenatingSampleProvider (new[] { wavProvider, mp3Provider });

var output = new WasapiOut ();

output.Init (merged);
output.Play ();

Console.ReadKey ();