在Java项目中使用IO流实现一个音频剪切和拼接功能

  介绍

今天就跟大家聊聊有关在Java项目中使用IO流实现一个音频剪切和拼接功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>需求:使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件,

<强>思路(以两首歌为例):

第一首歌有一个输入流对象bis1。第二首歌有一个输入流对象bis2,他们公用一条输出流对象bos(在选择构造方法的时候选择含有布尔类型参数的那个),待第一首歌剪切完成后,在此基础上追加第二首歌的“高潮部分”。

<强>实现代码:

进口java.io.BufferedInputStream;
  进口java.io.BufferedOutputStream;
  进口java.io.File;
  进口java.io.FileInputStream;
  进口java.io.FileNotFoundException;
  进口java.io.FileOutputStream;
  进口java.io.IOException;
  进口java.io.InputStream;/* *
  *音乐剪切和拼接(音乐串烧)
  * @author
  *
  */公开课CutMusic {
  
  公共静态void main (String [] args) {//f1, f2分别为需要剪切的歌曲路径
  文件f1=新文件(“E: \ \ CutMusicTest \ \残酷月光(封面:林宥嘉).mp3");
  文件f2=新文件(“E: \ \ CutMusicTest \ \慢慢.mp3");//f为合并的歌曲
  文件f=新文件(“E: \ \ CutMusicTest \ \ MergeMusic.mp3");
  cut1 (f1、f2、f);
  }
  
  公共静态孔隙cut1 (f文件f1、f2文件文件){
  BufferedInputStream bis1=零;
  BufferedInputStream bis2=零;
  BufferedOutputStream bos=零;//第一首歌剪切部分起始字节
  int start1=2375680;//320 kbps(比特率)* 58 s * 1024/8=2375680比特率可以查看音频属性获知
  int end1=4915200;//320 kbps * 120 * 1024/8=4915200//第二首歌剪切部分起始字节,计算方式同上
  int start2=3686400;
  int end2=5324800;
  
  int tatol1=0;
  int tatol2=0;
  尝试{//两个输入流
  bis1=new BufferedInputStream(新FileInputStream (f1));
  bis2=new BufferedInputStream(新FileInputStream (f2));//缓冲字节输出流(真实表示可以在流的后面追加数据,而不是覆盖! !)
  bos=new BufferedOutputStream(新FileOutputStream (f,真的));//第一首歌剪切,写入
  byte [] b1=新字节[512];
  int len1=0;
  在((len1=bis1.read (b1) !=1) {
  tatol1 +=len1;//累积道达尔
  如果(tatol1=end1){//当道达尔的值超过预先设定的范围,则立刻刷新bos流对象,并结束循环
  bos.flush ();
  打破;
  }
  
  }
  System.out.println(“第一首歌剪切完成!“);//第二首歌剪切,写入,原理同上
  byte [] b2=新字节[512];
  int len2=0;
  在((len2=bis2.read (b2) !=1) {
  tatol2 +=len2;
  如果(tatol2 & lt;start2) {
  继续;
  }
  bos.write (b2);
  如果(tatol2>=end2) {
  bos.flush ();
  打破;
  }
  
  }
  System.out.println(“第二首歌剪切完成!“);
  }捕捉(IOException e) {//TODO自动生成的catch块
  e.printStackTrace ();
  最后}{
  尝试{//切记要关闭流! !
  如果(bis1 !=null) bis1.close ();
  如果(bis2 !=null) bis2.close ();
  如果(bos !=null) bos.close ();
  }捕捉(IOException e) {//TODO自动生成的catch块
  e.printStackTrace ();
  }
  }
  }
  
  }

获取音频文件比特率的方式:

霸贘ava项目中使用IO流实现一个音频剪切和拼接功能"

运行结果:

霸贘ava项目中使用IO流实现一个音频剪切和拼接功能"

看完上述内容,你们对在Java项目中使用IO流实现一个音频剪切和拼接功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

在Java项目中使用IO流实现一个音频剪切和拼接功能