/*
* Copyright 1999-2002 Carnegie Mellon University.
* Portions Copyright 2002 Sun Microsystems, Inc.
* Portions Copyright 2002 Mitsubishi Electric Research Laboratories.
* All Rights Reserved. Use is subject to license terms.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
*/
package edu.cmu.sphinx.frontend.util;
import edu.cmu.sphinx.frontend.*;
import edu.cmu.sphinx.frontend.endpoint.SpeechClassifiedData;
import edu.cmu.sphinx.util.props.*;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
/** Dumps the data */
public class DataDumper extends BaseDataProcessor {
/** The property that specifies the format of the output. */
@S4String(defaultValue = "0.00000E00;-0.00000E00")
public final static String PROP_OUTPUT_FORMAT = "outputFormat";
/** The property that enables the output of signals. */
@S4Boolean(defaultValue = true)
public final static String PROP_OUTPUT_SIGNALS = "outputSignals";
// --------------------------
// Configuration data
// --------------------------
private boolean outputSignals;
private DecimalFormat formatter;
public DataDumper(String format, boolean outputSignals) {
initLogger();
this.formatter = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US));
this.outputSignals = outputSignals;
}
public DataDumper() {
}
/*
* (non-Javadoc)
*
* @see
* edu.cmu.sphinx.util.props.Configurable#newProperties(edu.cmu.sphinx.util
* .props.PropertySheet)
*/
@Override
public void newProperties(PropertySheet ps) throws PropertyException {
super.newProperties(ps);
logger = ps.getLogger();
String format = ps.getString(PROP_OUTPUT_FORMAT);
formatter = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US));
outputSignals = ps.getBoolean(PROP_OUTPUT_SIGNALS);
}
/** Constructs a DataDumper */
@Override
public void initialize() {
super.initialize();
}
/**
* Reads and returns the next Data object from this DataProcessor, return
* null if there is no more audio data.
*
* @return the next Data or <code>null</code> if none is available
* @throws DataProcessingException
* if there is a data processing error
*/
@Override
public Data getData() throws DataProcessingException {
Data input = getPredecessor().getData();
dumpData(input);
return input;
}
/**
* Dumps the given input data
*
* @param input
* the data to dump
*/
private void dumpData(Data input) {
if (input == null) {
System.out.println("Data: null");
} else if (input instanceof Signal) {
if (outputSignals) {
System.out.println("Signal: " + input);
}
} else if (input instanceof DoubleData) {
DoubleData dd = (DoubleData) input;
double[] values = dd.getValues();
System.out.print("Frame " + values.length);
for (double val : values) {
System.out.print(' ' + formatter.format(val));
}
System.out.println();
} else if (input instanceof SpeechClassifiedData) {
SpeechClassifiedData dd = (SpeechClassifiedData) input;
double[] values = dd.getValues();
System.out.print("Frame ");
if (dd.isSpeech())
System.out.print('*');
else
System.out.print(' ');
System.out.print(" " + values.length);
for (double val : values) {
System.out.print(' ' + formatter.format(val));
}
System.out.println();
} else if (input instanceof FloatData) {
FloatData fd = (FloatData) input;
float[] values = fd.getValues();
System.out.print("Frame " + values.length);
for (float val : values) {
System.out.print(' ' + formatter.format(val));
}
System.out.println();
}
}
}