介绍
今天就跟大家聊聊有关在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 (); } } } }
获取音频文件比特率的方式:
运行结果:
看完上述内容,你们对在Java项目中使用IO流实现一个音频剪切和拼接功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。