友情提示以下所诉的音频合并仅仅针对mp3,其他类型音频文件可能存在差异,敬请注意。
公司项目存在多媒体叫号功能,此功能在XP系统上读的速度是可以的,但是在Window7以及以上版本系统读的速度非常慢(不连贯,难以接受)。现在实现方式根据信息拼接了不同的MP3文件,然后进行顺序读取。但是很奇怪为什么在更高版本系统中使用会变的异常的慢,让人难以接受。
为了解决这个问题想到了2个方案:
- 使用flash音乐播放器进行列表播放,但是很多的网页播放器不具备与JavaScript交互的功能,甚至没有列表播放功能。(没有发现其他好用的播放器)
- 对多个MP3文件进行合并后进行播放
经过测试否决了第一种方式,因为压根没有找到一款适合的网页播放器,重新写太费时间了。第二种方式可以解决问题。所以就使用了这个简单的方法来修改现有叫号功能在高版本系统播放缓慢的问题。基本代码如下:
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Collections.Generic;
public class CombineFile
{
private List<string> files = new List<string>();
// 需要合并的文件
public List<string> Files
{
get
{
return files;
}
}
public CombineFile()
{
}
public CombineFile(List<string> filePath)
{
this.files = filePath;
}
public void Combine(string fullName)
{
if (!(this.files.Count > 0))
{
throw new Exception("文件列表为空");
}
foreach (string item in this.files)
{
if (!File.Exists(item))
{
throw new Exception(string.Format("文件{0}不存在", item));
}
}
byte[] buffer = new byte[1024 * 100];
using (FileStream outStream = new FileStream(fullName, FileMode.Create))
{
int readedLen = 0;
FileStream srcStream = null;
for (int i = 0; i < files.Count; i++)
{
srcStream = new FileStream(files[i], FileMode.Open);
while ((readedLen = srcStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, readedLen);
}
srcStream.Close();
}
}
}
}
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add(@"D:\mp3\0.mp3");
list.Add(@"D:\mp3\1.mp3");
list.Add(@"D:\mp3\2.mp3");
list.Add(@"D:\mp3\3.mp3");
list.Add(@"D:\mp3\4.mp3");
list.Add(@"D:\mp3\5.mp3");
list.Add(@"D:\mp3\6.mp3");
list.Add(@"D:\mp3\7.mp3");
list.Add(@"D:\mp3\8.mp3");
list.Add(@"D:\mp3\9.mp3");
CombineFile cf = new CombineFile(list);
cf.Combine(@"d:\MP3\10.mp3");
Console.Read();
}
}
转载请注明:清风亦平凡 » C#实现多个文件(mp3)合并