博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java切割音频文件
阅读量:6906 次
发布时间:2019-06-27

本文共 3408 字,大约阅读时间需要 11 分钟。

工具:

一个jar包即可:jave-1.0.2.jar

可以切割wav格式的音频文件

 

完整工程目录

 

就一个jar包,一个main类

 

代码:

package com.zit;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import it.sauronsoftware.jave.Encoder;import it.sauronsoftware.jave.MultimediaInfo;/**  * wav音频文件截取工具  * (适用于比特率为128kbps的wav音频文件,此类音频文件的头部信息占用长度44字节)  * @author 王晓东  *  */  public class ReadVideo {	public static void main(String[] args) {//		System.out.println(cut("E:\\record.mp3","E:\\record-cut_0_15.mp3", 0, 15)); //大于18(也可能别的值),会读取不了 //      System.out.println(cut("E:\\record_40s.wav","E:\\record-cut_15_30.wav", 15, 30));          		int start = 0;		int end = 0;        int count = 10;        String sourcefile = "E:\\test.wav";        long time = getTimeLen(new File(sourcefile));        int newTime = (int)time;        int internal = newTime - end;        while(internal > 0) {        	if(internal < 10) {        		cut(sourcefile, "E:\\record-cut_" + start + "_" + (int)time +".wav", start, (int)time);        		end += count;         		internal = newTime - end;        	}else {        		end += count;         		cut(sourcefile, "E:\\record-cut_" + start + "_" + end +".wav", start, end);        		start += count;        		internal = newTime - end;        	}        }        	}		 /**      * 截取wav音频文件      * @param sourcepath  源文件地址      * @param targetpath  目标文件地址      * @param start  截取开始时间(秒)      * @param end  截取结束时间(秒)      *       * return  截取成功返回true,否则返回false      */      public static boolean cut(String sourcefile, String targetfile, int start, int end) {          try{              if(!sourcefile.toLowerCase().endsWith(".wav") || !targetfile.toLowerCase().endsWith(".wav")){                  return false;              }              File wav = new File(sourcefile);              if(!wav.exists()){                  return false;              }              long t1 = getTimeLen(wav);  //总时长(秒)              if(start<0 || end<=0 || start>=t1 || end>t1 || start>=end){                  return false;              }              FileInputStream fis = new FileInputStream(wav);              long wavSize = wav.length()-44;  //音频数据大小(44为128kbps比特率wav文件头长度)              long splitSize = (wavSize/t1)*(end-start);  //截取的音频数据大小              long skipSize = (wavSize/t1)*start;  //截取时跳过的音频数据大小              int splitSizeInt = Integer.parseInt(String.valueOf(splitSize));              int skipSizeInt = Integer.parseInt(String.valueOf(skipSize));                            ByteBuffer buf1 = ByteBuffer.allocate(4);  //存放文件大小,4代表一个int占用字节数              buf1.putInt(splitSizeInt+36);  //放入文件长度信息              byte[] flen = buf1.array();  //代表文件长度              ByteBuffer buf2 = ByteBuffer.allocate(4);  //存放音频数据大小,4代表一个int占用字节数              buf2.putInt(splitSizeInt);  //放入数据长度信息              byte[] dlen = buf2.array();  //代表数据长度              flen = reverse(flen);  //数组反转              dlen = reverse(dlen);              byte[] head = new byte[44];  //定义wav头部信息数组              fis.read(head, 0, head.length);  //读取源wav文件头部信息              for(int i=0; i<4; i++){  //4代表一个int占用字节数                  head[i+4] = flen[i];  //替换原头部信息里的文件长度                  head[i+40] = dlen[i];  //替换原头部信息里的数据长度              }              byte[] fbyte = new byte[splitSizeInt+head.length];  //存放截取的音频数据              for(int i=0; i

  

 

 切割后的效果

 

 

转载于:https://www.cnblogs.com/Donnnnnn/p/10684213.html

你可能感兴趣的文章
SQL Access Advisor
查看>>
C# PDF Writer
查看>>
如何取未知Json字符串 某个主键取对应的Value
查看>>
第八天敏捷冲刺
查看>>
两两交换链表中的节点
查看>>
Fragment与Activity的接口回调
查看>>
VMware虚拟机 Ubuntu 实用技巧 (1) -- 安装VMware Tool
查看>>
抽象类
查看>>
PGXC两阶段提交与事务一致性(1)
查看>>
Mysql 死锁
查看>>
oracle自动内存共享管理测试。修改 oracle 11g SGA_MAX_SIZE。
查看>>
漫谈开发前奏之编译器
查看>>
Codeforces Round #403 (Div. 2)
查看>>
酷酷的单词
查看>>
ProgressDialog的使用及逻辑处理
查看>>
plsql programming 04 条件和顺序控制
查看>>
Java学习之泛型和异常
查看>>
subplot 设置不一样的图片大小和位置
查看>>
PCA(matlab)学习,与记录
查看>>
项目管理培训的一些总结
查看>>