|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectedu.cmu.sphinx.util.props.ConfigurableAdapter
edu.cmu.sphinx.frontend.BaseDataProcessor
edu.cmu.sphinx.frontend.FrontEnd
public class FrontEnd
FrontEnd is a wrapper class for the chain of front end processors. It provides methods for manipulating and navigating the processors.
The front end is modeled as a series of data processors, each of which performs a specific signal processing function. For example, a processor performs Fast-Fourier Transform (FFT) on input data, another processor performs high-pass filtering. Figure 1 below describes how the front end looks like:
DataProcessor interface. Objects that
implements the Data interface enters and exits the front end, and go between the
processors in the front end. The input data to the front end is typically audio data, but this front end allows any
input type. Similarly, the output data is typically features, but this front end allows any output type. You can
configure the front end to accept any input type and return any output type. We will describe the configuration of
the front end in more detail below.
The Pull Model of the Front End
The front end uses a pull model. To obtain output from the front end, one would call the method:
FrontEnd frontend = ... // see how to obtain the front end below
Data output = frontend.getData();
Calling getData on the front end would in turn call the getData() method on the last
DataProcessor, which in turn calls the getData() method on the second last DataProcessor, and so on, until the
getData() method on the first DataProcessor is called, which reads Data objects from the input. The input to the
front end is actually another DataProcessor, and is usually (though not necessarily) part of the front end and is not
shown in the figure above. If you want to maintain some control of the input DataProcessor, you can create it
separately, and use the setDataSource method to set it
as the input DataProcessor. In that case, the input DataProcessor will be prepended to the existing chain of
DataProcessors. One common input DataProcessor is the Microphone, which
implements the DataProcessor interface.
DataProcessor microphone = new Microphone();
microphone.initialize(...);
frontend.setDataSource(microphone);
Another common input DataProcessor is the StreamDataSource. It turns a Java
InputStream into Data objects. It is usually used in batch mode decoding.
Configuring the front end
The front end must be configured through the Sphinx properties file. For details about configuring the front end,
refer to the document Configuring the Front End.
Current state-of-the-art front ends generate features that contain Mel-frequency cepstral coefficients (MFCC). To
specify such a front end (called a 'pipeline') in Sphinx-4, insert the following lines in the Sphinx-4 configuration
file:
<component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
<propertylist name="pipeline">
<item>preemphasizer</item>
<item>windower</item>
<item>dft</item>
<item>melFilterBank</item>
<item>dct</item>
<item>batchCMN</item>
<item>featureExtractor</item>
</propertylist>
</component>
<component name="preemphasizer" type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/>
<component name="windower" type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"/>
<component name="dft" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"/>
<component name="melFilterBank" type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"/>
<component name="dct" type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/>
<component name="batchCMN" type="edu.cmu.sphinx.frontend.feature.BatchCMN"/>
<component name="featureExtractor" type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/>
Note: In this example, 'mfcFrontEnd' becomes the name of the front end.
Sphinx-4 also allows you to:
<component name="scorer" type="edu.cmu.sphinx.decoder.scorer.SimpleAcousticScorer">
<property name="frontend" value="mfcFrontEnd"/>
</component>
In the SimpleAcousticScorer, the front end is obtained in the newProperties method as follows:
public void newProperties(PropertySheet ps) throws PropertyException {
FrontEnd frontend = (FrontEnd) ps.getComponent("frontend", FrontEnd.class);
}
| Field Summary | |
|---|---|
private DataProcessor |
first
|
private java.util.List<DataProcessor> |
frontEndList
|
private DataProcessor |
last
|
static java.lang.String |
PROP_PIPELINE
the name of the property list of all the components of the frontend pipe line |
private java.util.List<SignalListener> |
signalListeners
|
| Fields inherited from class edu.cmu.sphinx.util.props.ConfigurableAdapter |
|---|
logger |
| Constructor Summary | |
|---|---|
FrontEnd()
|
|
FrontEnd(java.util.List<DataProcessor> frontEndList)
|
|
| Method Summary | |
|---|---|
void |
addSignalListener(SignalListener listener)
Add a listener to be called when a signal is detected. |
protected void |
fireSignalListeners(Signal signal)
Fire all listeners for signals. |
Data |
getData()
Returns the processed Data output, basically calls getData() on the last processor. |
java.util.List<DataProcessor> |
getElements()
Returns the collection of DataProcessors which setup this FrontEnd. |
DataProcessor |
getLastDataProcessor()
Returns the last data procssor within the DataProcessor chain of this FrontEnd. |
private void |
init()
|
void |
initialize()
Initializes this DataProcessor. |
void |
newProperties(PropertySheet ps)
This method is called when this configurable component needs to be reconfigured. |
void |
removeSignalListener(SignalListener listener)
Removes a listener for signals. |
void |
setDataSource(DataProcessor dataSource)
Sets the source of data for this front end. |
void |
setPredecessor(DataProcessor dataSource)
Sets the source of data for this front end. |
java.lang.String |
toString()
Returns a description of this FrontEnd in the format: |
| Methods inherited from class edu.cmu.sphinx.frontend.BaseDataProcessor |
|---|
getPredecessor, getTimer |
| Methods inherited from class edu.cmu.sphinx.util.props.ConfigurableAdapter |
|---|
getName, initLogger |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
@S4ComponentList(type=DataProcessor.class) public static final java.lang.String PROP_PIPELINE
private java.util.List<DataProcessor> frontEndList
private DataProcessor first
private DataProcessor last
private final java.util.List<SignalListener> signalListeners
| Constructor Detail |
|---|
public FrontEnd(java.util.List<DataProcessor> frontEndList)
public FrontEnd()
| Method Detail |
|---|
public void newProperties(PropertySheet ps)
throws PropertyException
Configurable
newProperties in interface ConfigurablenewProperties in class ConfigurableAdapterps - a property sheet holding the new data
PropertyException - if there is a problem with the properties.private void init()
public void initialize()
BaseDataProcessor
initialize in interface DataProcessorinitialize in class BaseDataProcessorpublic void setDataSource(DataProcessor dataSource)
dataSource - the source of datapublic java.util.List<DataProcessor> getElements()
DataProcessors which setup this FrontEnd.
public Data getData()
throws DataProcessingException
getData() on the last processor.
getData in interface DataProcessorgetData in class BaseDataProcessorDataProcessingException - if a data processor error occurspublic void setPredecessor(DataProcessor dataSource)
setDataSource(dataSource).
setPredecessor in interface DataProcessorsetPredecessor in class BaseDataProcessordataSource - the source of datapublic void addSignalListener(SignalListener listener)
listener - the listener to be addedpublic void removeSignalListener(SignalListener listener)
listener - the listener to be removedprotected void fireSignalListeners(Signal signal)
signal - the signal that occurredpublic DataProcessor getLastDataProcessor()
DataProcessor chain of this FrontEnd.
public java.lang.String toString()
toString in class ConfigurableAdapter
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||