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();
}
}