理由はダウンローダにバグがあり、ところどころに0が入っていてノイズになる。
mp3の構造を調べないといけないのかなと思いつつ、とりあえず0を除くプログラムを組んだ。
ちょっとだけましだった
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class Repair { private File file; private int checkByte = 5; private int checkByte2 = 4; public Repair(File file) { this.file = file; if (!this.file.isFile()) this.file = null; } public Repair(String file) { this.file = new File(file); if (!this.file.isFile()) this.file = null; } public long execute() throws Exception { System.out.println("Repair"); if (file == null) return -1; long start = System.currentTimeMillis(); FileInputStream fis = new FileInputStream(file); File repair = new File(file.getAbsoluteFile() + ".repair.mp3"); int d = 0; while (repair.isFile()) { repair = new File(file.getAbsoluteFile() + "." + Integer.toString(d++) + ".repair.mp3"); } FileOutputStream fos = new FileOutputStream(repair); int ocount; int counter = 0; boolean skip = false; boolean wait = false; Integer ch; byte[] zerobuf = new byte[checkByte]; byte[] buf = new byte[checkByte2]; int zerosize = 0; int bufsize = 0; boolean first = true; while ((ch = fis.read()) != -1) { ///////// if (first) { if (skip) if (ch != 0) { skip = false; first=false; } if (first) if (!skip) { if (ch == 0) { wait = true; } else { wait = false; } if (wait) { zerobuf[zerosize++] = 0; if (zerosize == checkByte) { //System.out.print("skip"); skip = true; zerosize = 0; } } else { fos.write(ch); if (zerosize != 0) { fos.write(zerobuf, 0, zerosize); zerosize = 0; } } } } if (!first) { if (skip) if (ch != 0) { skip = false; } if (!skip) { buf[counter] = ch.byteValue(); //System.out.println("byte"+buf[counter]); //System.out.println("\tInt->"+ch); //Thread.sleep(500); if (counter++ == checkByte2 - 1) { counter = 0; ocount = 0; for (int i = 0; i < checkByte2; i++) { if (buf[i] == 0) { ocount++; } } if (ocount == checkByte2) { //System.out.println("0 skipを見つけました"); skip = true; } else fos.write(buf); } } } } fos.close(); fis.close(); return System.currentTimeMillis() - start; } }
0 件のコメント:
コメントを投稿