使用FileStream合并mp3文件

本文关键字:文件 mp3 合并 FileStream 使用 | 更新日期: 2023-09-27 18:10:38

我使用下面非常简单的代码合并6 mp3文件使用FileStream,它看起来很简单。虽然合并是OK的,但是当我检查新生成的文件持续时间时,它比原来的6个mp3文件短6秒。下面我也粘贴了带有单独文件持续时间的代码。

string dirPath = @"C:'downloads'114'";
FileInfo[] files = new DirectoryInfo(dirPath).GetFiles(); // 6 audio files to merge
foreach (var file in files)
{
   using (var f = file.Open(FileMode.Open))
   {
       byte[] bytes = new byte[f.Length];
       using (FileStream isfs = new FileStream(dirPath + "114.mp3", FileMode.OpenOrCreate))
       {
           isfs.Seek(0, SeekOrigin.End); //go to the last byte
           while (f.Read(bytes, 0, bytes.Length) > 0)
           {
               isfs.Write(bytes, 0, bytes.Length);
               isfs.Flush();
            }
       }
    }
}

文件持续时间(秒):

#File      #Duration in Seconds
114000.mp3  6.64 sec
114001.mp3  5.935 sec
114002.mp3  4.864 sec
114003.mp3  4.838 sec
114004.mp3  7.58 sec
114005.mp3  7.554 sec
114006.mp3  6.431 sec

总时长:43.842秒

#The new Generated File
114.mp3         37.198 seconds

问题:

  1. 为什么新生成的文件持续时间不等于原来的6个文件?
  2. 如何使新文件的持续时间与原始文件相同或相等?

只是提一下:新生成的文件和6个文件Length是一样的!谢谢!

使用FileStream合并mp3文件

1)您正在合并二进制文件,而不是mp3文件。你必须考虑到标题等,否则合并将无法工作…(在您的情况下,您在文件中间有更多的头文件,并且不能保证文件之间的比特率相同)

2)看看合并mp3文件的最好方法是什么?在WinForm应用程序中播放MP3文件也可能对您有所帮助。