4月15日个人博客
1.昨日完成对MP3的剪切 五小时
2.难点:未进行过学习,看不懂他人代码
3.今日目标:将识别结果输出到web界面
4
package org.example;
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;
import java.io.File;
import java.io.RandomAccessFile;
import java.util.ArrayList;
public class Mp3cut {
public static ArrayList<String> cut(String filePath) throws Exception {
ArrayList<String> result = new ArrayList<String>();
//原mp3文件
File mSourceMp3File = new File(filePath);
MP3File mp3 = new MP3File(mSourceMp3File);
MP3AudioHeader header = (MP3AudioHeader) mp3.getAudioHeader();
long bitRateKbps = header.getBitRateAsNumber();
int length = header.getTrackLength() * 1000 / 2;
System.out.println("总时长:" + length);
//预备开始截取的时间
long beginTime = 0;
//截取结算时间
long endTime = 0;
long orderNum = 0;
while (endTime < length) {
System.out.println("开始截取第" + (orderNum++) + "段。开始时间点:" + beginTime);
// endTime = (45 % (10) + 20) * 1000;
endTime = (20) * 1000;
if (endTime + beginTime > length) {
endTime = length;
} else {
endTime += beginTime;
}
System.out.println("截取结算时间点-->" + endTime);
// 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);
//目标文件
//String pathname = "D:\\mp3\\" + orderNum + ".mp3";
String pathname = filePath.substring(0, filePath.lastIndexOf(".")) +
"-" + String.format("%03d", orderNum) + ".mp3";
File dFile = new File(pathname);
result.add(pathname);
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);
}
//跳转到指定的位置
sRaf.seek(beginByte);
//开始写入 mp3实体
for (long i = 0; i <= endByte - beginByte; i++) {
int m = sRaf.read();
dRaf.write(m);
}
sRaf.close();
dRaf.close();
//在每段的开始时间点上面减去100毫秒
beginTime = endTime - 100;
}
return result;
}
}
浙公网安备 33010602011771号