Java使用IO流实现音频的剪切和拼接
发布时间 - 2026-01-11 01:42:08 点击率:次需求: 使用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<start1 ){ //tatol小于起始值则跳出本次循环
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音频剪切拼接
# IO流音频剪切
# IO流音频拼接
# java中怎么将多个音频文件拼接合成一个
# 首歌
# 比特率
# 有一个
# 都是
# 一首
# 布尔
# 分别为
# 为例
# 在此基础上
# 大家多多
# 可以查看
# 串烧
# 范围之内
# 若干个
# 而不是
# 两首歌
# 完成后
# 目录下
# public
# CutMusic
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
活动邀请函制作网站有哪些,活动邀请函文案?
QQ浏览器网页版登录入口 个人中心在线进入
百度浏览器如何管理插件 百度浏览器插件管理方法
BootStrap整体框架之基础布局组件
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
郑州企业网站制作公司,郑州招聘网站有哪些?
如何在万网利用已有域名快速建站?
北京企业网站设计制作公司,北京铁路集团官方网站?
JS去除重复并统计数量的实现方法
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何用好域名打造高点击率的自主建站?
网页设计与网站制作内容,怎样注册网站?
Laravel如何使用Gate和Policy进行授权?(权限控制)
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
如何快速搭建二级域名独立网站?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Laravel如何使用Service Container和依赖注入?(代码示例)
音乐网站服务器如何优化API响应速度?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
如何快速搭建高效服务器建站系统?
如何快速生成可下载的建站源码工具?
如何快速搭建高效香港服务器网站?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Android滚轮选择时间控件使用详解
如何基于云服务器快速搭建个人网站?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在建站之星网店版论坛获取技术支持?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何实现事件和监听器?(Event & Listener实战)
如何挑选最适合建站的高性能VPS主机?
如何用虚拟主机快速搭建网站?详细步骤解析
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
高端网站建设与定制开发一站式解决方案 中企动力
Laravel如何为API生成Swagger或OpenAPI文档
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Swift中swift中的switch 语句
node.js报错:Cannot find module 'ejs'的解决办法
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何在Windows环境下新建FTP站点并设置权限?
使用C语言编写圣诞表白程序
网站制作报价单模板图片,小松挖机官方网站报价?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何快速搭建虚拟主机网站?新手必看指南

