package edu.cmu.sphinx.frontend.util;
import edu.cmu.sphinx.frontend.*;
import edu.cmu.sphinx.util.MatrixUtils;
import edu.cmu.sphinx.util.props.PropertyException;
import edu.cmu.sphinx.util.props.PropertySheet;
import edu.cmu.sphinx.util.props.S4String;
/**
* A simple converter which converts <code>DoubleData</code> to <code>FloatData</code> and vv (depending on its
* configuration). All remaining <code>Data</code>s will pass this processor unchanged.
*
* @author Holger Brandl
*/
public class DataConverter extends BaseDataProcessor {
public static final String CONVERT_D2F = "d2f";
public static final String CONVERT_F2D = "f2d";
@S4String(defaultValue = "d2f", range = {CONVERT_D2F, CONVERT_F2D})
public static final String PROP_CONVERSION_MODE = "conversionMode";
private String convMode;
public DataConverter(String convMode) throws PropertyException {
initLogger();
this.convMode = convMode;
}
public DataConverter() {
}
/*
* (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);
convMode = ps.getString(PROP_CONVERSION_MODE);
}
@Override
public Data getData() throws DataProcessingException {
Data d = getPredecessor().getData();
if (d instanceof DoubleData && convMode.equals(CONVERT_D2F)) {
DoubleData dd = (DoubleData) d;
d = new FloatData(MatrixUtils.double2float(dd.getValues()), dd.getSampleRate(),
dd.getFirstSampleNumber());
} else if (d instanceof FloatData && convMode.equals(CONVERT_F2D)) {
FloatData fd = (FloatData) d;
d = new DoubleData(MatrixUtils.float2double(fd.getValues()), fd.getSampleRate(),
fd.getFirstSampleNumber());
}
return d;
}
}