import java.io.File;
import javazoom.jl.converter.Converter;
import javazoom.jl.converter.Converter.ProgressListener;
import javazoom.jl.decoder.Header;
import javazoom.jl.decoder.Obuffer;
public class Mp3ToM4R{
public static String Mac_GenTarCmd = "/opt/local/var/macports/software/faac/1.28_2/opt/local/bin/faac tempPath -o tarPath -w";
public static String GenTarCmd = "faac tempPath -o tarPath -w";
public static boolean convert(MusicInfo music) {
String source = Consts.NEW_DOWNLOAD_DIR+music.getRingName();
File file = new File(source);
if(!file.exists()) {
return false;
}
//String temp = Consts.NEW_DOWNLOAD_DIR+"temp"+((int)(Math.random()*100))+".wav";
String temp = source.replace(".mp3", ".wav");
String target = source.replace(".mp3", ".m4r");
try {
CPListener cpl = new CPListener();
new Converter().convert(source, temp, cpl);
while (cpl.isNotCompleted());
System.out.println(temp + " is generated!");
String osName = System.getProperty("os.name");
System.out.println(osName);
Process proc2 = null;
if (osName.indexOf("Mac") != -1) {
proc2 = Runtime.getRuntime().exec(Mac_GenTarCmd.replace("tempPath", temp).replace("tarPath", target));
} else {
proc2 = Runtime.getRuntime().exec(GenTarCmd.replace("tempPath", temp).replace("tarPath", target));
}
Thread.sleep(2000);
if(proc2.exitValue() != 0) return false;
return new File(temp).delete();
} catch (Exception e) {
System.out.println(e);
return false;
}
}
/*
public static void main(String[] args) {
MusicInfo music = new MusicInfo();
music.setRingName("a.mp3");
System.out.println(convert(music));
}*/
}
class CPListener implements ProgressListener {
boolean notCompleted = true;
@Override
public boolean converterException(Throwable arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void converterUpdate(int arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
notCompleted = (arg0 != UPDATE_CONVERT_COMPLETE);
}
@Override
public void decodedFrame(int arg0, Header arg1, Obuffer arg2) {
// TODO Auto-generated method stub
}
@Override
public void parsedFrame(int arg0, Header arg1) {
// TODO Auto-generated method stub
}
@Override
public void readFrame(int arg0, Header arg1) {
// TODO Auto-generated method stub
}
boolean isNotCompleted() {
return notCompleted;
}
}