【发布时间】:2014-08-19 22:14:34
【问题描述】:
我正在使用下面非常简单的代码来合并 6 个使用 FileStream 的 mp3 文件,它看起来非常简单。虽然合并没问题,但是当我检查新生成的文件持续时间时,它比原来的 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
问题:
- 为什么新生成的文件时长不等于原来的6个文件?
- 如何使新文件的持续时间与原始文件相同或相等?
顺便提一下:新生成的文件和Length的6个文件是一样的!
谢谢!
【问题讨论】: