实现切割音乐和合并音乐

需求:把一首音乐分成几段,然后再把切割好的音乐再合并成为原音乐


代码实现:

public static void main(String[] args) throws IOException{
        
        
        cutMusic();
        mergeMusic();

    }
    
    //切割音乐文件
    public static void cutMusic() throws IOException{
        
        //找到原本的音乐文件的路径
        File file = new File("D:/daskp/music/丫头.mp3");
        
        //把切割 之后的 多个音乐文件 放入这个 文件夹路径中
        File dirFile = new File("D:/user/music");
        
        //建立数据连接的通道
        
        //输入流  读取本地音乐文件  然后 写出的时候写成多个文件
        FileInputStream input = new FileInputStream(file);
        
        //读取数据
        int length = 0;

        //1兆一个音乐文件
        byte[] buff = new byte[1024*1024];
        
        for(int i = 1; (length = input.read(buff)) != -1; i++){    

           // part1.mp3, part2.mp3, part3.mp3 ...

            File outFile = new File(dirFile, "part"+i +".mp3");
            FileOutputStream output = new FileOutputStream(outFile);
            
            //让输出流 写入数据
            //一个输出流 写入一个数据到 parti.mp3文件
            output.write(buff, 0, length);
            
            //关闭资源
            output.close();
            
        }
        
        
        //关闭输入流资源
        input.close();
        
    }
    
    //合并音乐文件
    public static void mergeMusic() throws IOException{
        
        //找到目标文件
        //父路径
        File dirFile = new File("D:/user/music");
        
        //2.创建Vector集合的对象,把输入流放进去
        Vector<FileInputStream> v = new Vector<FileInputStream>();
        File[] filesArr = dirFile.listFiles();
        
        //遍历这个文件数组,然后往Vector中添加元素
        for(File file : filesArr){
            
            //只创建 mp3文件的输入流对象, 放入到集合中
            if(file.getName().endsWith(".mp3")){
                FileInputStream input = new FileInputStream(file);
                v.add(input);
                
            }
            
        }
        
        Enumeration<FileInputStream> e = v.elements();
        
        //创建序列流对象
        SequenceInputStream sequenceStream = new SequenceInputStream(e);
        
        //创建写入的 文件流  输出流
        FileOutputStream output = new FileOutputStream("D:/user/music/丫头合并版.mp3");
        
        //读取序列流中的数据
        int length = 0;
        byte[] b = new byte[1024*1024];
        
        while((length = sequenceStream.read(b)) != -1){
            
            output.write(b, 0, length);
            
        }
        
        output.close();
        sequenceStream.close();
        
        
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值