<?xml version="1.0" encoding="UTF-8"?>

<!--
   Sphinx-4 Configuration file
-->

<!-- ******************************************************** -->
<!--  tidigits configuration file                             -->
<!-- ******************************************************** -->

<config>        
    
    
    <!-- ******************************************************** -->
    <!-- frequently tuned properties                              -->
    <!-- ******************************************************** --> 
    
    <property name="absoluteBeamWidth"           value="-1"/>
    <property name="relativeBeamWidth"           value="1E-90"/>
    <property name="wordInsertionProbability"    value="1E-36"/>
    <property name="languageWeight"              value="8"/>
    <property name="silenceInsertionProbability" value="1"/>
    <property name="skip"                        value="0"/>
    <property name="logLevel"                    value="WARNING"/>

    <property name="recognizer" value="recognizer"/>
    <property name="linguist"   value="flatLinguist"/>
    <property name="frontend"   value="mfcFrontEnd"/>
    
    
    <!-- ******************************************************** -->
    <!-- The connectedDigitsRecognizer configuration               -->
    <!-- ******************************************************** --> 
    
    <component name="recognizer" 
               type="edu.cmu.sphinx.recognizer.Recognizer">
        <property name="decoder" value="digitsDecoder"/>
        <propertylist name="monitors">
        </propertylist>
    </component>


    <!-- ******************************************************** -->
    <!-- The Decoder   configuration                              -->
    <!-- ******************************************************** --> 
    
    <component name="digitsDecoder" type="edu.cmu.sphinx.decoder.Decoder">
        <property name="searchManager" value="searchManager"/>
    </component>
    
    <component name="searchManager" 
        type="edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager">
        <property name="logMath" value="logMath"/>
        <property name="linguist" value="${linguist}"/>
        <property name="pruner" value="trivialPruner"/>
        <property name="scorer" value="threadedScorer"/>
        <property name="activeListFactory" value="activeList"/>
    </component>
    
    
    <component name="activeList" 
             type="edu.cmu.sphinx.decoder.search.SortingActiveListFactory">
        <property name="logMath" value="logMath"/>
        <property name="absoluteBeamWidth" value="${absoluteBeamWidth}"/>
        <property name="relativeBeamWidth" value="${relativeBeamWidth}"/>
    </component>
    
    <component name="trivialPruner" 
                type="edu.cmu.sphinx.decoder.pruner.SimplePruner"/>
    
    <component name="threadedScorer" 
                type="edu.cmu.sphinx.decoder.scorer.ThreadedAcousticScorer">
        <property name="frontend" value="${frontend}"/>
        <property name="isCpuRelative" value="true"/>
        <property name="numThreads" value="0"/>
        <property name="minScoreablesPerThread" value="10"/>
        <property name="scoreablesKeepFeature" value="true"/>
    </component>
    
    <!-- ******************************************************** -->
    <!-- The linguist  configuration                              -->
    <!-- ******************************************************** -->
    
    <component name="flatLinguist" 
                type="edu.cmu.sphinx.linguist.flat.FlatLinguist">
        <property name="logMath" value="logMath"/>
        <property name="grammar" value="jsgfGrammar"/>
        <property name="acousticModel" value="acousticModelWSJ"/>
        <property name="wordInsertionProbability" 
                value="${wordInsertionProbability}"/>
        <property name="silenceInsertionProbability" 
                value="${silenceInsertionProbability}"/>
        <property name="languageWeight" value="${languageWeight}"/>
        <property name="unitManager" value="unitManager"/>
    </component>

    
    <!-- ******************************************************** -->
    <!-- The Grammar  configuration                               -->
    <!-- ******************************************************** -->

<component name="jsgfGrammar" type="edu.cmu.sphinx.jsapi.JSGFGrammar">
	<property name="dictionary" value="dictionaryWSJ"/>
	<property name="grammarLocation" value="resource:/wavfile.WavFile!/wavfile/"/>
	<property name="grammarName" value="digits"/>
	<property name="logMath" value="logMath"/>
</component>


    <!-- ******************************************************** -->
    <!-- The Dictionary configuration                            -->
    <!-- ******************************************************** -->
    
    <component name="dictionary" 
        type="edu.cmu.sphinx.linguist.dictionary.FullDictionary">
        <property name="dictionaryPath"
	    value="resource:/edu.cmu.sphinx.model.acoustic.TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz/dictionary"/>
        <property name="fillerPath"
	    value="resource:/edu.cmu.sphinx.model.acoustic.TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz/fillerdict"/>
        <property name="addSilEndingPronunciation" value="false"/>
        <property name="unitManager" value="unitManager"/>
    </component>
    
    <component name="dictionaryWSJ" 
        type="edu.cmu.sphinx.linguist.dictionary.FullDictionary">
        <property name="dictionaryPath"
	    value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/>
        <property name="fillerPath"
	    value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/.
	    fillerdict"/>
        <property name="addSilEndingPronunciation" value="false"/>
        <property name="unitManager" value="unitManager"/>
    </component>    
    

    <!-- ******************************************************** -->
    <!-- The acoustic model configuration                         -->
    <!-- ******************************************************** -->

    <component name="acousticModel" 
      type="edu.cmu.sphinx.model.acoustic.TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model">
        <property name="loader" value="sphinx3Loader"/>
        <property name="unitManager" value="unitManager"/>
    </component>

    <component name="sphinx3Loader"
	       type="edu.cmu.sphinx.model.acoustic.TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz.ModelLoader">
	<property name="logMath" value="logMath"/>
        <property name="unitManager" value="unitManager"/>
    </component>
    
    <component name="acousticModelWSJ" 
      type="edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model">
        <property name="loader" value="sphinx3LoaderWSJ"/>
        <property name="unitManager" value="unitManager"/>
    </component>    
    
    <component name="sphinx3LoaderWSJ"
	       type="edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.ModelLoader">
	<property name="logMath" value="logMath"/>
        <property name="unitManager" value="unitManager"/>
    </component>        

    
    <!-- ******************************************************** -->
    <!-- The unit manager configuration                           -->
    <!-- ******************************************************** -->

    <component name="unitManager" 
        type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/>


    <!-- ******************************************************** -->
    <!-- The frontend configuration                               -->
    <!-- ******************************************************** -->
    
    <component name="mfcFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
        <propertylist name="pipeline">
            <item>streamDataSource</item>
            <item>premphasizer</item>
            <item>windower</item>
            <item>fft</item>
            <item>melFilterBank</item>
            <item>dct</item>
            <item>batchCMN</item>
            <item>featureExtraction</item>
        </propertylist>
    </component>
    
    <component name="streamDataSource" 
                type="edu.cmu.sphinx.frontend.util.StreamDataSource">
        <property name="sampleRate" value="16000"/>
	<property name="bitsPerSample" value="16"/>
	<property name="bigEndianData" value="false"/>
	<property name="signedData" value="true"/>
    </component>

    <component name="premphasizer" 
               type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/>
    
    <component name="windower" 
               type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"/>
    
    <component name="fft" 
            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="featureExtraction" 
               type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/>
    
    
    <!-- ******************************************************* -->
    <!--  monitors                                               -->
    <!-- ******************************************************* -->
    
    <component name="memoryTracker" 
                type="edu.cmu.sphinx.instrumentation.MemoryTracker">
        <property name="recognizer" value="${recognizer}"/>
    </component>
    
    <component name="speedTracker" 
                type="edu.cmu.sphinx.instrumentation.SpeedTracker">
        <property name="recognizer" value="${recognizer}"/>
        <property name="frontend" value="${frontend}"/>
        <property name="showTimers" value="false"/>
    </component>
    

    <!-- ******************************************************* -->
    <!--  Miscellaneous components                               -->
    <!-- ******************************************************* -->
    
    <component name="logMath" type="edu.cmu.sphinx.util.LogMath">
        <property name="logBase" value="1.0001"/>
        <property name="useAddTable" value="true"/>
    </component>
    
</config>

