【问题标题】:How to join mp3 and wav files using naudio to byte buffer c# MVC?如何使用 naudio 将 mp3 和 wav 文件加入字节缓冲区 c# MVC?
【发布时间】:2017-02-22 15:24:17
【问题描述】:

我找到了很多关于如何加入 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;
            }
        }
    }

然后合并它们 由

  public static byte[] JoinFiles(List<FileWeb> files)
    {
        MemoryStream output = new MemoryStream();
        int offset = 0;
        foreach (FileWeb file in files)
        {
            MemoryStream mp3Data;
            string fullPath = file.FilePath + "\\" + file.FileName;


            if (file.FileName.EndsWith("wav"))
            {
                mp3Data = ConvertWavToMp3(fullPath);

            }
            else
            {
                mp3Data = GetBytesFromMp3(fullPath);

            }


            if (mp3Data != null)
            {
                byte[] buffer = mp3Data.ToArray();
                output.Write(buffer, offset, buffer.Length - offset);
                offset = 4;
            }
        }
        return output.ToArray();
    }

但它不起作用。它只播放第一部分。如果我使用此代码。

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);
        }
    }
}

Mp3FileReader reader = new Mp3FileReader(stream) 我收到错误,找不到 mp3 标头。

【问题讨论】:

    标签: c# asp.net-mvc mp3 wav naudio


    【解决方案1】:

    不要将任何内容转换为 MP3。只需为给定文件创建适当的阅读器(WaveFileReader 用于wavMp3FileReader 用于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 ();
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2013-01-22
      • 1970-01-01
      • 2021-08-15
      • 2014-02-22
      相关资源
      最近更新 更多