title: Append the Grammar file of Speech Recognition in java dynamically
body: <p>I am trying to make simple Java code to convert Speech to Text using Sphinx.
  I am done with my code but facing problem while creating Grammar file. The Grammar file seems to be very large, is there any way to create Grammar file that can append new words which are not present in it, dynamically as I speak.
  Java file of my code is this :</p>
  
  <pre><code>package test;
  
  import edu.cmu.sphinx.frontend.util.Microphone;
  import edu.cmu.sphinx.recognizer.Recognizer;
  import edu.cmu.sphinx.result.Result;
  import edu.cmu.sphinx.util.props.ConfigurationManager;
  
  
  public class HelloWorld
  {
    public static void main(String[] args)
    {
      ConfigurationManager cm;
  
      if (args.length &gt; 0)
        cm = new ConfigurationManager(args[0]);
      else {
        cm = new ConfigurationManager(HelloWorld.class.getResource("helloworld.config.xml"));
      }
  
      Recognizer recognizer = (Recognizer)cm.lookup("recognizer");
      recognizer.allocate();
  
      Microphone microphone = (Microphone)cm.lookup("microphone");
      if (!(microphone.startRecording())) {
        System.out.println("Cannot start microphone.");
        recognizer.deallocate();
        System.exit(1);
      }
  
      System.out.println("Say: (Good morning | Hello) ( Bhiksha | Evandro | Paul | Philip | Rita | Will )");
      while (true)
      {
        System.out.println("Start speaking. Press Ctrl-C to quit.\n");
  
        Result result = recognizer.recognize();
  
        if (result != null) {
          String resultText = result.getBestFinalResultNoFiller();
  
          System.out.println("You said: " + resultText + '\n');
        } else {
          System.out.println("I can't hear what you said.\n");
        }
      }
    }
  }
  </code></pre>
  
  <p>And the xml file is:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  
  &lt;!--
     Sphinx-4 Configuration file
  --&gt;
  
  &lt;!-- ******************************************************** --&gt;
  &lt;!--  an4 configuration file                             --&gt;
  &lt;!-- ******************************************************** --&gt;
  
  &lt;config&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- frequently tuned properties                              --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;property name="logLevel" value="WARNING"/&gt;
  
      &lt;property name="absoluteBeamWidth"  value="-1"/&gt;
      &lt;property name="relativeBeamWidth"  value="1E-80"/&gt;
      &lt;property name="wordInsertionProbability" value="1E-36"/&gt;
      &lt;property name="languageWeight"     value="8"/&gt;
  
      &lt;property name="frontend" value="epFrontEnd"/&gt;
      &lt;property name="recognizer" value="recognizer"/&gt;
      &lt;property name="showCreations" value="false"/&gt;
  
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- word recognizer configuration                            --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="recognizer" type="edu.cmu.sphinx.recognizer.Recognizer"&gt;
          &lt;property name="decoder" value="decoder"/&gt;
          &lt;propertylist name="monitors"&gt;
              &lt;item&gt;accuracyTracker &lt;/item&gt;
              &lt;item&gt;speedTracker &lt;/item&gt;
              &lt;item&gt;memoryTracker &lt;/item&gt;
          &lt;/propertylist&gt;
      &lt;/component&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The Decoder   configuration                              --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="decoder" type="edu.cmu.sphinx.decoder.Decoder"&gt;
          &lt;property name="searchManager" value="searchManager"/&gt;
      &lt;/component&gt;
  
      &lt;component name="searchManager"
          type="edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager"&gt;
          &lt;property name="logMath" value="logMath"/&gt;
          &lt;property name="linguist" value="flatLinguist"/&gt;
          &lt;property name="pruner" value="trivialPruner"/&gt;
          &lt;property name="scorer" value="threadedScorer"/&gt;
          &lt;property name="activeListFactory" value="activeList"/&gt;
      &lt;/component&gt;
  
  
      &lt;component name="activeList"
               type="edu.cmu.sphinx.decoder.search.PartitionActiveListFactory"&gt;
          &lt;property name="logMath" value="logMath"/&gt;
          &lt;property name="absoluteBeamWidth" value="${absoluteBeamWidth}"/&gt;
          &lt;property name="relativeBeamWidth" value="${relativeBeamWidth}"/&gt;
      &lt;/component&gt;
  
      &lt;component name="trivialPruner"
                  type="edu.cmu.sphinx.decoder.pruner.SimplePruner"/&gt;
  
      &lt;component name="threadedScorer"
                  type="edu.cmu.sphinx.decoder.scorer.ThreadedAcousticScorer"&gt;
          &lt;property name="frontend" value="${frontend}"/&gt;
      &lt;/component&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The linguist  configuration                              --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="flatLinguist"
                  type="edu.cmu.sphinx.linguist.flat.FlatLinguist"&gt;
          &lt;property name="logMath" value="logMath"/&gt;
          &lt;property name="grammar" value="jsgfGrammar"/&gt;
          &lt;property name="acousticModel" value="wsj"/&gt;
          &lt;property name="wordInsertionProbability"
                  value="${wordInsertionProbability}"/&gt;
          &lt;property name="languageWeight" value="${languageWeight}"/&gt;
          &lt;property name="unitManager" value="unitManager"/&gt;
      &lt;/component&gt;
  
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The Grammar  configuration                               --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="jsgfGrammar" type="edu.cmu.sphinx.jsapi.JSGFGrammar"&gt;
          &lt;property name="dictionary" value="dictionary"/&gt;
          &lt;property name="grammarLocation"
               value="resource:/edu/cmu/sphinx/demo/helloworld/"/&gt;
          &lt;property name="grammarName" value="hello"/&gt;
      &lt;property name="logMath" value="logMath"/&gt;
      &lt;/component&gt;
  
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The Dictionary configuration                            --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="dictionary"
          type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"&gt;
          &lt;property name="dictionaryPath"
       value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/&gt;
          &lt;property name="fillerPath"
       value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/fillerdict"/&gt;
          &lt;property name="addSilEndingPronunciation" value="false"/&gt;
          &lt;property name="allowMissingWords" value="false"/&gt;
          &lt;property name="unitManager" value="unitManager"/&gt;
      &lt;/component&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The acoustic model configuration                         --&gt;
      &lt;!-- ******************************************************** --&gt;
      &lt;component name="wsj"
                 type="edu.cmu.sphinx.linguist.acoustic.tiedstate.TiedStateAcousticModel"&gt;
          &lt;property name="loader" value="wsjLoader"/&gt;
          &lt;property name="unitManager" value="unitManager"/&gt;
      &lt;/component&gt;
  
      &lt;component name="wsjLoader" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader"&gt;
          &lt;property name="logMath" value="logMath"/&gt;
          &lt;property name="unitManager" value="unitManager"/&gt;
          &lt;property name="location" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz"/&gt;
          &lt;property name="modelDefinition" value="etc/WSJ_clean_13dCep_16k_40mel_130Hz_6800Hz.4000.mdef"/&gt;
          &lt;property name="dataLocation" value="cd_continuous_8gau/"/&gt;
      &lt;/component&gt;
  
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The unit manager configuration                           --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="unitManager"
          type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The frontend configuration                               --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="frontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"&gt;
          &lt;propertylist name="pipeline"&gt;
              &lt;item&gt;microphone &lt;/item&gt;
              &lt;item&gt;preemphasizer &lt;/item&gt;
              &lt;item&gt;windower &lt;/item&gt;
              &lt;item&gt;fft &lt;/item&gt;
              &lt;item&gt;melFilterBank &lt;/item&gt;
              &lt;item&gt;dct &lt;/item&gt;
              &lt;item&gt;liveCMN &lt;/item&gt;
              &lt;item&gt;featureExtraction &lt;/item&gt;
          &lt;/propertylist&gt;
      &lt;/component&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The live frontend configuration                          --&gt;
      &lt;!-- ******************************************************** --&gt;
      &lt;component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"&gt;
          &lt;propertylist name="pipeline"&gt;
              &lt;item&gt;microphone &lt;/item&gt;
              &lt;item&gt;dataBlocker &lt;/item&gt;
              &lt;item&gt;speechClassifier &lt;/item&gt;
              &lt;item&gt;speechMarker &lt;/item&gt;
              &lt;item&gt;nonSpeechDataFilter &lt;/item&gt;
              &lt;item&gt;preemphasizer &lt;/item&gt;
              &lt;item&gt;windower &lt;/item&gt;
              &lt;item&gt;fft &lt;/item&gt;
              &lt;item&gt;melFilterBank &lt;/item&gt;
              &lt;item&gt;dct &lt;/item&gt;
              &lt;item&gt;liveCMN &lt;/item&gt;
              &lt;item&gt;featureExtraction &lt;/item&gt;
          &lt;/propertylist&gt;
      &lt;/component&gt;
  
      &lt;!-- ******************************************************** --&gt;
      &lt;!-- The frontend pipelines                                   --&gt;
      &lt;!-- ******************************************************** --&gt;
  
      &lt;component name="dataBlocker" type="edu.cmu.sphinx.frontend.DataBlocker"&gt;
          &lt;!--&lt;property name="blockSizeMs" value="10"/&gt;--&gt;
      &lt;/component&gt;
  
      &lt;component name="speechClassifier"
                 type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier"&gt;
          &lt;property name="threshold" value="13"/&gt;
      &lt;/component&gt;
  
      &lt;component name="nonSpeechDataFilter"
                 type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/&gt;
  
      &lt;component name="speechMarker"
                 type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker" &gt;
          &lt;property name="speechTrailer" value="50"/&gt;
      &lt;/component&gt;
  
  
      &lt;component name="preemphasizer"
                 type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/&gt;
  
      &lt;component name="windower"
                 type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"&gt;
      &lt;/component&gt;
  
      &lt;component name="fft"
              type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"&gt;
      &lt;/component&gt;
  
      &lt;component name="melFilterBank"
          type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"&gt;
      &lt;/component&gt;
  
      &lt;component name="dct"
              type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/&gt;
  
      &lt;component name="liveCMN"
                 type="edu.cmu.sphinx.frontend.feature.LiveCMN"/&gt;
  
      &lt;component name="featureExtraction"
                 type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/&gt;
  
      &lt;component name="microphone"
                 type="edu.cmu.sphinx.frontend.util.Microphone"&gt;
          &lt;property name="closeBetweenUtterances" value="false"/&gt;
      &lt;/component&gt;
  
  
      &lt;!-- ******************************************************* --&gt;
      &lt;!--  monitors                                               --&gt;
      &lt;!-- ******************************************************* --&gt;
  
      &lt;component name="accuracyTracker"
                  type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker"&gt;
          &lt;property name="recognizer" value="${recognizer}"/&gt;
          &lt;property name="showAlignedResults" value="false"/&gt;
          &lt;property name="showRawResults" value="false"/&gt;
      &lt;/component&gt;
  
      &lt;component name="memoryTracker"
                  type="edu.cmu.sphinx.instrumentation.MemoryTracker"&gt;
          &lt;property name="recognizer" value="${recognizer}"/&gt;
      &lt;property name="showSummary" value="false"/&gt;
      &lt;property name="showDetails" value="false"/&gt;
      &lt;/component&gt;
  
      &lt;component name="speedTracker"
                  type="edu.cmu.sphinx.instrumentation.SpeedTracker"&gt;
          &lt;property name="recognizer" value="${recognizer}"/&gt;
          &lt;property name="frontend" value="${frontend}"/&gt;
      &lt;property name="showSummary" value="true"/&gt;
      &lt;property name="showDetails" value="false"/&gt;
      &lt;/component&gt;
  
  
      &lt;!-- ******************************************************* --&gt;
      &lt;!--  Miscellaneous components                               --&gt;
      &lt;!-- ******************************************************* --&gt;
  
      &lt;component name="logMath" type="edu.cmu.sphinx.util.LogMath"&gt;
          &lt;property name="logBase" value="1.0001"/&gt;
          &lt;property name="useAddTable" value="true"/&gt;
      &lt;/component&gt;
  
  &lt;/config&gt;
  </code></pre>
  
  <p>and the demo Grammar file is : </p>
  
  <pre><code>#JSGF V1.0;
  
  /**
   * JSGF Grammar for Hello World example
   */
  
  grammar hello;
  
  public &lt;greet&gt; = (Good morning | Hello) ( Bhiksha | Evandro | Paul | Philip | Rita | Will );
  </code></pre>