/* * 21.04.2004 Original verion. davagin@udm.ru. *----------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *---------------------------------------------------------------------- */ package davaguine.jmac.core; import davaguine.jmac.info.CompressionLevel; import davaguine.jmac.tools.ProgressCallback; /** * Author: Dmitry Vaguine * Date: 24.05.2004 * Time: 10:50:38 */ public class jmacu extends ProgressCallback { private static long g_nInitialTickCount; public void callback(int persent) { double dProgress = ((double) (pPercentageDone)) / 1000; double dElapsedMS = (System.currentTimeMillis() - g_nInitialTickCount); double dSecondsRemaining = (((dElapsedMS * 100) / dProgress) - dElapsedMS) / 1000; System.out.println("Progress: " + dProgress + " (" + dSecondsRemaining + " seconds remaining)"); } public static void main(String[] args) { try { /////////////////////////////////////////////////////////////////////////////// // error check the command line parameters /////////////////////////////////////////////////////////////////////////////// boolean processed = false; if (args.length >= 2) { if (args[0].equals("d") && args.length == 3) { g_nInitialTickCount = System.currentTimeMillis(); System.out.println("Decompressing '" + args[1] + "'..."); APESimple.DecompressFile(args[1], args[2], new jmacu()); processed = true; } else if (args[0].startsWith("c") && args[0].length() > 1) { int compressionLevel = getCompressionLevel(args[0]); if (compressionLevel > 0) { g_nInitialTickCount = System.currentTimeMillis(); System.out.println("Compressing '" + args[1] + "'..."); // do the verify (call unmac.dll) APESimple.CompressFile(args[1], args[2], compressionLevel, new jmacu()); processed = true; } } else if (args[0].equals("v") && args.length == 2) { g_nInitialTickCount = System.currentTimeMillis(); System.out.println("Verifying '" + args[1] + "'..."); APESimple.VerifyFile(args[1], new jmacu()); processed = true; } else if (args[0].startsWith("t") && args[0].length() > 1) { int compressionLevel = getCompressionLevel(args[0]); if (compressionLevel > 0) { g_nInitialTickCount = System.currentTimeMillis(); System.out.println("Converting '" + args[1] + "'..."); APESimple.ConvertFile(args[1], args[2], compressionLevel, new jmacu()); processed = true; } } } if (!processed) printUsage(); } catch (Exception e) { e.printStackTrace(); } } public static int getCompressionLevel(String command) { int compressionLevel = -1; try { compressionLevel = Integer.parseInt(command.substring(1)); } catch (Exception e) { compressionLevel = -1; } if (compressionLevel > 0 && compressionLevel < 6) { switch (compressionLevel) { case 1: compressionLevel = CompressionLevel.COMPRESSION_LEVEL_FAST; break; case 2: compressionLevel = CompressionLevel.COMPRESSION_LEVEL_NORMAL; break; case 3: compressionLevel = CompressionLevel.COMPRESSION_LEVEL_HIGH; break; case 4: compressionLevel = CompressionLevel.COMPRESSION_LEVEL_EXTRA_HIGH; break; case 5: compressionLevel = CompressionLevel.COMPRESSION_LEVEL_INSANE; break; } } return compressionLevel; } public static void printUsage() { System.out.println("Usage: <Command> <Input file (wav or ape)> <Output file (wav or ape)>\n"); System.out.println("Commands:\n"); System.out.println("d - decompress file\n"); System.out.println("cX - compress file"); System.out.println(" X = 1 (Fast compression)"); System.out.println(" X = 2 (Normal compression)"); System.out.println(" X = 3 (High compression)"); System.out.println(" X = 4 (Extra High compression)"); System.out.println(" X = 5 (Insane compression)\n"); System.out.println("v - verify file\n"); System.out.println("tX - convert file"); System.out.println(" X = 1 (Fast compression)"); System.out.println(" X = 2 (Normal compression)"); System.out.println(" X = 3 (High compression)"); System.out.println(" X = 4 (Extra High compression)"); System.out.println(" X = 5 (Insane compression)\n"); } }