rockbox/songdbj/javazoom/jl/converter/jlc.java

216 lines
5.9 KiB
Java
Raw Normal View History

/*
* 11/19/04 1.0 moved to LGPL.
*
* 29/01/00 Initial version. mdm@techie.com
*
* 12/12/99 JavaLayer 0.0.7 mdm@techie.com
*
* 14/02/99 MPEG_Args Based Class - E.B
* Adapted from javalayer and MPEG_Args.
* Doc'ed and integerated with JL converter. Removed
* Win32 specifics from original Maplay code.
*-----------------------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library 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 Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/
package javazoom.jl.converter;
import java.io.PrintWriter;
import javazoom.jl.decoder.Crc16;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.decoder.OutputChannels;
/**
* The <code>jlc</code> class presents the JavaLayer
* Conversion functionality as a command-line program.
*
* @since 0.0.7
*/
public class jlc
{
static public void main(String args[])
{
String[] argv;
long start = System.currentTimeMillis();
int argc = args.length + 1;
argv = new String[argc];
argv[0] = "jlc";
for(int i=0;i<args.length;i++)
argv[i+1] = args[i];
jlcArgs ma = new jlcArgs();
if (!ma.processArgs(argv))
System.exit(1);
Converter conv = new Converter();
int detail = (ma.verbose_mode ?
ma.verbose_level :
Converter.PrintWriterProgressListener.NO_DETAIL);
Converter.ProgressListener listener =
new Converter.PrintWriterProgressListener(
new PrintWriter(System.out, true), detail);
try
{
conv.convert(ma.filename, ma.output_filename, listener);
}
catch (JavaLayerException ex)
{
System.err.println("Convertion failure: "+ex);
}
System.exit(0);
}
/**
* Class to contain arguments for maplay.
*/
static class jlcArgs
{
// channel constants moved into OutputChannels class.
//public static final int both = 0;
//public static final int left = 1;
//public static final int right = 2;
//public static final int downmix = 3;
public int which_c;
public int output_mode;
public boolean use_own_scalefactor;
public float scalefactor;
public String output_filename;
public String filename;
//public boolean stdout_mode;
public boolean verbose_mode;
public int verbose_level = 3;
public jlcArgs()
{
which_c = OutputChannels.BOTH_CHANNELS;
use_own_scalefactor = false;
scalefactor = (float) 32768.0;
//stdout_mode = false;
verbose_mode = false;
}
/**
* Process user arguments.
*
* Returns true if successful.
*/
public boolean processArgs(String[] argv)
{
filename = null;
Crc16[] crc;
crc = new Crc16[1];
int i;
int argc = argv.length;
//stdout_mode = false;
verbose_mode = false;
output_mode = OutputChannels.BOTH_CHANNELS;
output_filename = "";
if (argc < 2 || argv[1].equals("-h"))
return Usage();
i = 1;
while (i < argc)
{
/* System.out.println("Option = "+argv[i]);*/
if (argv[i].charAt(0) == '-')
{
if (argv[i].startsWith("-v"))
{
verbose_mode = true;
if (argv[i].length()>2)
{
try
{
String level = argv[i].substring(2);
verbose_level = Integer.parseInt(level);
}
catch (NumberFormatException ex)
{
System.err.println("Invalid verbose level. Using default.");
}
}
System.out.println("Verbose Activated (level "+verbose_level+")");
}
/* else if (argv[i].equals("-s"))
ma.stdout_mode = true; */
else if (argv[i].equals("-p"))
{
if (++i == argc)
{
System.out.println("Please specify an output filename after the -p option!");
System.exit (1);
}
//output_mode = O_WAVEFILE;
output_filename = argv[i];
}
/*else if (argv[i].equals("-f"))
{
if (++i == argc)
{
System.out.println("Please specify a new scalefactor after the -f option!");
System.exit(1);
}
ma.use_own_scalefactor = true;
// ma.scalefactor = argv[i];
}*/
else return Usage();
}
else
{
filename = argv[i];
System.out.println("FileName = "+argv[i]);
if (filename == null) return Usage();
}
i++;
}
if (filename == null)
return Usage();
return true;
}
/**
* Usage of JavaLayer.
*/
public boolean Usage()
{
System.out.println("JavaLayer Converter :");
System.out.println(" -v[x] verbose mode. ");
System.out.println(" default = 2");
/* System.out.println(" -s write u-law samples at 8 kHz rate to stdout");
System.out.println(" -l decode only the left channel");
System.out.println(" -r decode only the right channel");
System.out.println(" -d downmix mode (layer III only)");
System.out.println(" -s write pcm samples to stdout");
System.out.println(" -d downmix mode (layer III only)");*/
System.out.println(" -p name output as a PCM wave file");
System.out.println("");
System.out.println(" More info on http://www.javazoom.net");
/* System.out.println(" -f ushort use this scalefactor instead of the default value 32768");*/
return false;
}
};
};