在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

C#实现多个文件(mp3)合并

C# 清风 3348℃ 6评论
友情提示以下所诉的音频合并仅仅针对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)合并

喜欢 (13)or分享 (0)
支付宝扫码打赏 支付宝扫码打赏 微信打赏 微信打赏
头像
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(6)个小伙伴在吐槽
  1. 头像
    请教一下。。我也是使用类似方式合并的。。但是为什么只有第一段音频的声音?
    菜鸡胡某人2018-11-15 12:02 回复
    • 头像
      您好!请先确认合并后每一段音频完整不?
      清风2018-11-15 12:14 回复
      • 头像
        第一段音频8秒 第二段音频7秒 合并出来的音频 只有第一段的声音,但是文件大小是合并后的大小
        菜鸡胡某人2018-11-15 14:04 回复
        • 头像
          那一般应该不会有问题!
          清风2018-11-15 14:55 回复
      • 头像
        合并后的文件只有第一段音频的声音,时长也是第一段音频的长度,打死文件大小已经是两个文件相加后的大小了。大神方便的话麻烦加一下 919188409 的Q。。万分感谢
        菜鸡胡某人2018-11-15 14:39 回复
        • 头像
          OK!
          清风2018-11-15 15:01 回复