Download the file

/** * wavdump: a utility to parse and dump WAV audio files. * <br>© 2019 Ian Cameron Smith. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ package org.hermit.wavdump; import java.io.File; /** * Command-line interface to WavDump. */ public class WavDump { // ******************************************************************** // // Constructors. // ******************************************************************** // /** * Non-instantiable. */ private WavDump() {} // ******************************************************************** // // Main. // ******************************************************************** // /** * Command-line main function. * * @param args The command-line arguments. */ public static final void main(String[] args) { int numFiles = 0; for (int i = 0; i < args.length; ++i) { // If this is a flag argument, deal with it and move on. if (args[i].startsWith("-")) { i += processFlag(args, i); continue; } // If this is an empty file name, complain and move on. if (args[i].length() == 0) { error("empty file name\n"); continue; } File file = new File(args[i]); Dumper dumper = new Dumper(file, sampleMode, xmlMode); ++numFiles; try { System.out.printf("%s:\n", args[i]); dumper.dump(); } catch (Dumper.UserException e) { error("error in \"%s\": %s\n", args[i], e.getMessage()); } } if (numFiles == 0) usage("require at least one WAV file argument\n"); } /** * Process a command-line flag. * * @param args The command-line arguments. * @param i The index of the argument to process. * @return The number of additional command-line words * used up. For a simple flag, this will be 0; * if the flag takes one additional argument, * it would be 1. */ private static int processFlag(String[] args, int i) { switch (args[i]) { case "-fullsamples": sampleMode = Dumper.DataMode.FULL; break; case "-shortsamples": sampleMode = Dumper.DataMode.SHORT; break; case "-nosamples": sampleMode = Dumper.DataMode.NONE; break; case "-fullxml": xmlMode = Dumper.DataMode.FULL; break; case "-shortxml": xmlMode = Dumper.DataMode.SHORT; break; case "-noxml": xmlMode = Dumper.DataMode.NONE; break; default: usage("invalid argument: \"%s\"", args[i]); } return 0; } /** * Print a usage error message, display the correct command usage, * and quit. * * @param fmt Output format template. * @param args Zero or more arguments to the template. */ private static void usage(String fmt, Object... args) { error(fmt, args); System.err.printf("Usage: wavdump [ flags ] wav-file ...\n"); System.err.printf("Allowable flags:\n"); System.err.printf(" -fullsamples Display all audio samples\n"); System.err.printf(" -shortsamples Display a summary of audio samples\n"); System.err.printf(" -nosamples Don't display audio samples\n"); System.err.printf(" -fullxml Display all XML data\n"); System.err.printf(" -shortxml Display a summary of XML data\n"); System.err.printf(" -noxml Don't display XML data\n"); System.exit(1); } /** * Print an error message. * * @param fmt Output format template. * @param args Zero or more arguments to the template. */ private static void error(String fmt, Object... args) { System.out.flush(); System.err.flush(); System.err.printf("wavdump: "); System.err.printf(fmt, args); } // ******************************************************************** // // Private Data. // ******************************************************************** // // User-selected audio sample display mode. private static Dumper.DataMode sampleMode = Dumper.DataMode.SHORT; // User-selected XML display mode. private static Dumper.DataMode xmlMode = Dumper.DataMode.SHORT; }