代码语言:javascript复制
package com.stevezong.mp3palyer;
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;
import java.io.File;
import java.io.RandomAccessFile;
public class Mp3Cut {
public static void main(String[] args) throws Exception {
//预备开始截取的时间
long beginTime = 74 *1000;
//截取结算时间
long endTime = 93 * 1000;
//原mp3文件
File mSourceMp3File = new File("E:\20171222\3.mp3");
MP3File mp3 = new MP3File(mSourceMp3File);
MP3AudioHeader header = (MP3AudioHeader) mp3.getAudioHeader();
long bitRateKbps = header.getBitRateAsNumber();
// 1KByte/s=8Kbps, bitRate *1024L / 8L / 1000L 转换为 bps 每毫秒
// 计算出开始字节位置
long beginBitRateBpm = (bitRateKbps* 1024L / 8L / 1000L) * beginTime;
// 返回音乐数据的第一个字节
long firstFrameByte = header.getMp3StartByte();
// 获取开始时间所在文件的字节位置
long beginByte = firstFrameByte beginBitRateBpm;
// 计算出结束字节位置
long endByte = beginByte (bitRateKbps* 1024L / 8L / 1000L) * (endTime - beginTime);
//目标文件
File dFile = new File("e:\20171222\6.mp3");
RandomAccessFile dRaf = new RandomAccessFile(dFile, "rw");
RandomAccessFile sRaf = new RandomAccessFile(mSourceMp3File, "rw");
//先将mp3的头文件写入文件
for(long i = 0; i< firstFrameByte;i ){
int m = sRaf.read();
dRaf.write(m);
}
System.out.println(endByte - beginByte);
//跳转到指定的位置
sRaf.seek(beginByte);
//开始写入 mp3实体
for(long i = 0; i<= endByte-beginByte ;i ){
int m = sRaf.read();
System.out.println(m);
if((m - 50) > 0){
dRaf.write(m- 5);
}else{
dRaf.write(m);
}
}
sRaf.close();
dRaf.close();
}
}