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

思路(以两首歌为例):

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

实现代码:

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

/**

* 音乐剪切和拼接(音乐串烧)

* @author

*

*/

public class CutMusic {

public static void main(String[] args) {

//f1,f2分别为需要剪切的歌曲路径

File f1 = new File("E:\\CutMusicTest\\残酷月光(Cover:林宥嘉).mp3");

File f2 = new File("E:\\CutMusicTest\\慢慢.mp3");

//f为合并的歌曲

File f = new File("E:\\CutMusicTest\\MergeMusic.mp3");

cut1(f1,f2,f);

}

public static void cut1(File f1,File f2,File f){

BufferedInputStream bis1 = null;

BufferedInputStream bis2 = null;

BufferedOutputStream bos = null;

//第一首歌剪切部分起始字节

int start1 = 2375680;//320kbps(比特率)*58s*1024/8=2375680 比特率可以查看音频属性获知

int end1 = 4915200;//320kbps*120s*1024/8=4915200

//第二首歌剪切部分起始字节,计算方式同上

int start2 = 3686400;

int end2 = 5324800;

int tatol1 = 0;

int tatol2 = 0;

try {

//两个输入流

bis1 = new BufferedInputStream(new FileInputStream(f1));

bis2 = new BufferedInputStream(new FileInputStream(f2));

//缓冲字节输出流(true表示可以在流的后面追加数据,而不是覆盖!!)

bos = new BufferedOutputStream(new FileOutputStream(f,true));

//第一首歌剪切、写入

byte[] b1= new byte[512];

int len1 = 0;

while((len1 = bis1.read(b1))!=-1){

tatol1+=len1; //累积tatol

if(tatol1

continue;

}

bos.write(b1); //写入的都是在我们预先指定的字节范围之内

if(tatol1>=end1 ){ //当tatol的值超过预先设定的范围,则立刻刷新bos流对象,并结束循环

bos.flush();

break;

}

}

System.out.println("第一首歌剪切完成!");

//第二首歌剪切、写入,原理同上

byte[] b2= new byte[512];

int len2 = 0;

while((len2 = bis2.read(b2))!=-1){

tatol2 += len2;

if(tatol2 < start2){

continue;

}

bos.write(b2);

if(tatol2>=end2){

bos.flush();

break;

}

}

System.out.println("第二首歌剪切完成!");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {//切记要关闭流!!

if(bis1!=null) bis1.close();

if(bis2!=null) bis2.close();

if(bos!=null) bos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

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

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java音频剪切_Java使用IO流实现音频的剪切和拼接相关推荐

  1. java写入简介_Java关于IO流的介绍

    2.InputStream 和 OutputStream 是两个 abstact 类,对于字节为导向的 stream 都扩展这两个基类; inputStream中的关键方法: read():方法是读取 ...

  2. java音频教程_Java如何使用IO流实现音频的剪切和拼接的示例代码

    这篇文章主要为大家详细介绍了Java使用IO流实现音频的剪切和拼接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 需求:使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首 ...

  3. java 流压缩_java之IO流:压缩文件

    在java的学习中,IO流是一个避不开的话题.在java日常的学习和使用中,为了给不同的场景提供不同的用途,IO流拥有一个庞大的方法集合.虽然给使用者提供了极大的便利,但此同时也带来了学习时的异常冗杂 ...

  4. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)

    菜鸟学习笔记:Java IO流2--其他流 字节数组输入输出流 数据类型处理流 基本数据类型 引用类型 打印流 System.in.System.out.System.err 随机流RandomAcc ...

  5. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  6. Java裁剪音乐,利用IO流

    ** Java裁剪音乐,利用IO流 ** 主方法 public static void main(String[] args) throws IOException {//输入流对象,路径要裁剪文件路 ...

  7. java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?

    原标题:Java的IO流之字节流,必须要学得内容,你会嘛? 伙伴们~ 端午节过的如何呀~ 有没有很开心呀~ 假期已过咱们继续开动了 IO流 先来认识一下IO流: IO流用来处理设备之间的数据传输,Ja ...

  8. java 删除指定文件夹和下面所有文件_java——File IO流

    1.File(掌握) (1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件 (2)构造方法 A:File file = new File("e:demoa ...

  9. java文档表白_java基础io流——File的告白(重温经典)

    File类概述和构造方法 File类的概述 文件和目录路径名的抽象表示形式 构造方法 public File(String pathname) public File(String parent,St ...

最新文章

  1. 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)
  2. IT人永远不老,老程序员价值何在?
  3. ftp使用(图文详解)
  4. qthread destroyed while thread is still running
  5. 2014-3-13 星期四 晴 [取舍 果断]
  6. Centos7更换阿里云yum源
  7. bzoj4919 [Lydsy1706月赛]大根堆
  8. Python练习:阶乘累计求和
  9. docker下的mysql my.ini_docker部署mysql启动失败
  10. 用友U8审核凭证出现列前缀tempdb无效未指定表名的对话框的解决方法
  11. 王者荣耀英雄铭文;出装
  12. SQL语句批量替换某个指定的字符串
  13. 松下服务器A5代码70维修,松下伺服电机A5系列故障代码.pdf
  14. CTGU·OJ .特别的幸运数
  15. python 爬取http://www.weather.com.cn/中国主要城市周边城市的天气
  16. 学生宿舍管理数据库设计(上)
  17. Ubuntu安装电源管理工具TLP
  18. 关于考研的反省和一些感悟
  19. Haoop之hbase高可用集群的 安装与使用
  20. 基于springboot+mybatis+mysql+html实现校园疫情防控管理系统

热门文章

  1. 新浪微博API[赞]接口和[取消赞]接口
  2. 通过单片机定时器输出周期为1s的方波,驱动LED灯闪烁
  3. 第一章 基本数据类型-API的理解和使用
  4. IEEE 754 浮点数的详细分析
  5. 【 长尾理论在现实中的巨大威力】
  6. 只有两种直播:淘宝直播和其它直播
  7. 香港计算机专业硕士学制几年,想读香港一年计算机硕士,懂行老哥来指导一下我这个迷茫的five...
  8. 手机实现远程桌面控制
  9. 以太坊是什么? 以及以太坊如何工作的?
  10. Spring/Boot/Cloud系列知识(2)——代理模式