如何合并两首.mp3类型的歌或者截取一首.mp3类型歌曲中的一段,例如跳过歌曲的前10s,截取紧接着之后的20s那一部分然后播放??

  1. 编写一个程序将多首mp3歌曲合并成一个mp3文件。

以下演示将 D:\Program Files\CloudMusic\music\G.E.M.邓紫棋 - 来自天堂的魔鬼.mp3 和D:\Program Files\CloudMusic\music\张紫豪 - 可不可以.mp3 这两首歌合并后放入D:\demo\邓紫棋_张紫豪_合集.mp3

先看demo文件夹:
在这里插入图片描述

package ex.ex_字节流.ex_11;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author yyh on 2020/4/18 21:15
 */
public class FileTest11 {
    
    
    public static void main(String[] args) {
    
    
        try (FileInputStream in = new FileInputStream("D:\\Program Files\\CloudMusic\\music\\G.E.M.邓紫棋 - 来自天堂的魔鬼.mp3");
             FileInputStream in2 = new FileInputStream("D:\\Program Files\\CloudMusic\\music\\张紫豪 - 可不可以.mp3");
             FileOutputStream out = new FileOutputStream("D:\\demo\\邓紫棋_张紫豪_合集.mp3")
        ) {
    
    
            byte[] bytes = new byte[1024*1024];//每次读入1Mb
            int length = -1;
            while ((length = in.read(bytes)) != -1) {
    
    
                out.write(bytes, 0, length);
            }

            byte[] bytes2 = new byte[1024*1024];//每次读入1Mb
            length = -1;
            while ((length = in2.read(bytes2)) != -1) {
    
    
                out.write(bytes2, 0, length);
            }
            System.out.println("读写完成!" );

        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace( );
        } catch (IOException e) {
    
    
            e.printStackTrace( );
        }
    }
}

运行后,再看一下demo文件夹:
在这里插入图片描述
合并成功,点击合集.mp3即可播放这两首歌…

12.如何截取一个MP3文件的一段音频,从此MP3文件的10秒处开始截取,截取紧接着之后20秒内的一段音频?

首先,要知道一下这首歌的码率是多少
以接下来要演示的这首歌 “张紫豪 - 可不可以.mp3” 为例:
如图所示,
在这里插入图片描述
它的码率是320kbps,而320kbps = 40kByte/s
所以1s的时长为:40kByte = 40 * 1024 Byte = 40960 Byte
10s的时长为:40960 * 10 byte
20s的时长为:40960 * 20 byte

以下代码表示将 D:\Program Files\CloudMusic\music\张紫豪 - 可不可以.mp3 这首歌截取一段到 D:\demo\张紫豪 - 可不可以.mp3_截20秒.mp3 ,然后看demo文件夹下是否有这首歌,然后播放看看是否有20s。

package ex.ex_字节流.ex_12;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author yyh on 2020/4/19 20:27
 */
public class FileTest12 {
    
    
    public static void main(String[] args) {
    
    
        try(FileInputStream in = new FileInputStream("D:\\Program Files\\CloudMusic\\music\\张紫豪 - 可不可以.mp3");
            FileOutputStream cutout = new FileOutputStream("D:\\demo\\张紫豪 - 可不可以.mp3_截20秒.mp3");
        ){
    
    
            in.skip(40*1024*10);//跳过mp3的前10s
            byte[] bytes = new byte[40*1024*20];
            int length = -1;
            if ((length = in.read(bytes)) != -1) {
    
    
                cutout.write(bytes,0,length);
            }
            System.out.println("截取成功!" );
        } catch (FileNotFoundException e) {
    
    
            e.printStackTrace( );
        } catch (IOException e) {
    
    
            e.printStackTrace( );
        }
    }
}

运行后:
在这里插入图片描述
欧克了,嘿嘿,点击那个mp3文件就可以播放了,只有20s哦,多一秒都不行哈,嘻嘻

猜你喜欢

转载自blog.csdn.net/qq_45067943/article/details/105623087