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

news/2024/12/21 23:01:33/

需求:使用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();

}

}

}

}

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

6e96fb2a077279d453981c1653d70032.png

运行结果:

74d01d3e700e8471d5a8ba918a719f96.png

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


http://www.ppmy.cn/news/845687.html

相关文章

计算机考试音乐怎么粘贴,用手机或电脑怎样剪切和接音乐?

网易云大家都知道一个很受欢迎的音乐播放器&#xff0c;当我们很喜欢一首歌曲想要截取下来的时候&#xff0c;这个播放器本身是不支持的&#xff0c;那么我们如何截取网易云音乐的歌曲呢&#xff1f;现在世面上有很多的截取工具&#xff0c;这就导致我们大家在选择工具的时候很…

剪切音频matlab_科学网—matlab的音频处理:读取,裁剪,输出和命名 - 张智昊的博文...

网易云下架了周杰伦的几乎所有歌曲&#xff0c;于是尝试下载一套周杰伦的音乐全集。从微盘上下载到的音乐前面有一段奇葩的广告&#xff0c;长约8秒。因为广告长度一样可以轻松的裁剪处理&#xff0c;于是想到可以用matlab写一个简单的小程序。 程序的思路是这样的&#xff1a;…

有什么可以快速剪切音乐的工具

有什么可以快速剪切音乐的工具&#xff0c;是不是会有很多人都对这个非常感兴趣啊&#xff0c;其实有很多人不知道剪切音乐可以干嘛&#xff0c;剪切工具具体是做什么的呢&#xff1f;其实如果不是小编目前从事这方面的工具&#xff0c;我应该也会对它不了解的&#xff0c;所以…

java 剪切音乐_怎么剪切一段音乐其中的片段

剪切音乐想必大家都不陌生&#xff0c;在各种手机铃声中我们都需要用到它来制作个性有趣的来电铃声&#xff0c;那么大家知道有什么简便的方法使用吗&#xff1f;小编有一个办法就是利用剪切工具的功能就可以完成了&#xff0c;我们就不用不用一点一点的设置音频片段了&#xf…

如何剪切音乐的一部分?来试试这个方法

音频剪切和合并是音频编辑中常见的操作&#xff0c;它可以用来去除不必要的部分或者将多个音频片段组合成一个完整的作品。在今天的数字化时代&#xff0c;有许多软件和工具可以帮助我们完成这个任务。 那你们知道具体的音频剪切合并的方法是什么吗&#xff1f;如果还不太清楚…

[MySql]数据库约束

NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。DEFAULT - 规定没有给列赋值时的默认值。PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&#xff08;或两个列多个列的结合&#xff09;有唯一标识&#xff0c;有助于更容易更快速地找到表中…

[Android]使用jni实现高斯模糊

1.高斯模糊的原理&#xff1a; 根据周边的像素值来确定自己的像素值&#xff0c;平均值&#xff0c;最大值&#xff0c;最小值&#xff0c;正太分布值 2.均值模糊blur 函数声明&#xff1a; CV_EXPORTS_W void blur( InputArray src, OutputArray dst,Size ksize, Point anc…

计算机组装维护课件,计算机组装与维护课件(全)

《计算机组装与维护课件(全)》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机组装与维护课件(全)(60页珍藏版)》请在人人文库网上搜索。 1、计算机组装与维护,主讲教师&#xff1a;孟显果 E-Mail&#xff1a;,计算机组装与维护,本课程学习任务,计算机的选购 计…