I'm still relatively new to Java. I tried to find a solution, but I think I donβt know enough Java, but I even know exactly what I should look for.
I wanted to try playing with voice recognition, so I downloaded the source code for CMU Sphinx-4 and compiled it. As soon as I had everything that was, I could just launch the attached demos. Then I created a directory (/ Jarvis /) for my code in the directory that contains the Sphinx-4 directory. The Sphinx-4 source directory has a long chain of directories leading to the demos I played with (/Sphinx4-1.0beta6/src/apps/edu/cmu/sphinx/demo/). The demo folder contains the HelloWorld directory, which contains the source code for a simple program for using the Sphinx-4 functions. My first goal is to get a copy of this demo working in a directory that I installed for my own code. So I made a copy of the HelloWorld files and put them in my Jarvis directory. Renamed and changed the code so that everything that used to be HelloWorld is now Jarvis. Unfortunately, my problem is not as simple as the problems with names, but there are ways to search for packages.
In Java, I mainly used only "javac example.java" to compile code in the past. I suppose that in this case I might need something more, but I donβt know for sure. When I try to compile in this way, I get errors:
Jarvis.java:15: error: package edu.cmu.sphinx.frontend.util does not exist import edu.cmu.sphinx.frontend.util.Microphone; ^ Jarvis.java:16: error: package edu.cmu.sphinx.recognizer does not exist import edu.cmu.sphinx.recognizer.Recognizer; ^ Jarvis.java:17: error: package edu.cmu.sphinx.result does not exist import edu.cmu.sphinx.result.Result; ^ Jarvis.java:18: error: package edu.cmu.sphinx.util.props does not exist import edu.cmu.sphinx.util.props.ConfigurationManager; ^ Jarvis.java:28: error: cannot find symbol ConfigurationManager cm; ^ symbol: class ConfigurationManager location: class Jarvis Jarvis.java:31: error: cannot find symbol cm = new ConfigurationManager(args[0]); ^ symbol: class ConfigurationManager location: class Jarvis Jarvis.java:33: error: cannot find symbol cm = new ConfigurationManager(Jarvis.class.getResource("jarvis.config.xml")); ^ symbol: class ConfigurationManager location: class Jarvis Jarvis.java:36: error: cannot find symbol Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); ^ symbol: class Recognizer location: class Jarvis Jarvis.java:36: error: cannot find symbol Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); ^ symbol: class Recognizer location: class Jarvis Jarvis.java:40: error: cannot find symbol Microphone microphone = (Microphone) cm.lookup("microphone"); ^ symbol: class Microphone location: class Jarvis Jarvis.java:40: error: cannot find symbol Microphone microphone = (Microphone) cm.lookup("microphone"); ^ symbol: class Microphone location: class Jarvis Jarvis.java:53: error: cannot find symbol Result result = recognizer.recognize(); ^ symbol: class Result location: class Jarvis 12 errors
So, I want to include these missing packages. I understand that this is due to the way the paths are defined in the code, but I do not know enough about Java, but I know exactly how to define these paths. I suppose to change something else in the code? Should I configure compilation differently? It would be useful only to press in the right direction.
Below I have included 4 files that were originally obtained from the HelloWorld demo, in which I made minor changes to the names.
Thank you for your time!
Jarvis.java:
package jarvis.jarvis; 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; /** * A simple HelloWorld demo showing a simple speech application built using Sphinx-4. This application uses the Sphinx-4 * endpointer, which automatically segments incoming audio into utterances and silences. */ public class Jarvis { public static void main(String[] args) { ConfigurationManager cm; if (args.length > 0) { cm = new ConfigurationManager(args[0]); } else { cm = new ConfigurationManager(Jarvis.class.getResource("jarvis.config.xml")); } Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); recognizer.allocate(); // start the microphone or exit if the programm if this is not possible 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 )"); // loop the recognition until the programm exits. 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"); } } } }
jarvis.config.xml:
<?xml version="1.0" encoding="UTF-8"?> <config> <property name="logLevel" value="WARNING"/> <property name="absoluteBeamWidth" value="-1"/> <property name="relativeBeamWidth" value="1E-80"/> <property name="wordInsertionProbability" value="1E-36"/> <property name="languageWeight" value="8"/> <property name="frontend" value="epFrontEnd"/> <property name="recognizer" value="recognizer"/> <property name="showCreations" value="false"/> <component name="recognizer" type="edu.cmu.sphinx.recognizer.Recognizer"> <property name="decoder" value="decoder"/> <propertylist name="monitors"> <item>accuracyTracker </item> <item>speedTracker </item> <item>memoryTracker </item> </propertylist> </component> <component name="decoder" 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="flatLinguist"/> <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.PartitionActiveListFactory"> <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}"/> </component> <component name="flatLinguist" type="edu.cmu.sphinx.linguist.flat.FlatLinguist"> <property name="logMath" value="logMath"/> <property name="grammar" value="jsgfGrammar"/> <property name="acousticModel" value="wsj"/> <property name="wordInsertionProbability" value="${wordInsertionProbability}"/> <property name="languageWeight" value="${languageWeight}"/> <property name="unitManager" value="unitManager"/> </component> <component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar"> <property name="dictionary" value="dictionary"/> <property name="grammarLocation" value="resource:/edu/cmu/sphinx/demo/jarvis/"/> <property name="grammarName" value="jarvis"/> <property name="logMath" value="logMath"/> </component> <component name="dictionary" type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> <property name="dictionaryPath" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/> <property name="fillerPath" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/noisedict"/> <property name="addSilEndingPronunciation" value="false"/> <property name="allowMissingWords" value="false"/> <property name="unitManager" value="unitManager"/> </component> <component name="wsj" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.TiedStateAcousticModel"> <property name="loader" value="wsjLoader"/> <property name="unitManager" value="unitManager"/> </component> <component name="wsjLoader" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader"> <property name="logMath" value="logMath"/> <property name="unitManager" value="unitManager"/> <property name="location" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz"/> </component> <component name="unitManager" type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/> <component name="frontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"> <propertylist name="pipeline"> <item>microphone </item> <item>preemphasizer </item> <item>windower </item> <item>fft </item> <item>melFilterBank </item> <item>dct </item> <item>liveCMN </item> <item>featureExtraction </item> </propertylist> </component> <component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"> <propertylist name="pipeline"> <item>microphone </item> <item>dataBlocker </item> <item>speechClassifier </item> <item>speechMarker </item> <item>nonSpeechDataFilter </item> <item>preemphasizer </item> <item>windower </item> <item>fft </item> <item>melFilterBank </item> <item>dct </item> <item>liveCMN </item> <item>featureExtraction </item> </propertylist> </component> <component name="dataBlocker" type="edu.cmu.sphinx.frontend.DataBlocker"> </component> <component name="speechClassifier" type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier"> <property name="threshold" value="13"/> </component> <component name="nonSpeechDataFilter" type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/> <component name="speechMarker" type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker" > <property name="speechTrailer" value="50"/> </component> <component name="preemphasizer" type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/> <component name="windower" type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"> </component> <component name="fft" type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"> </component> <component name="melFilterBank" type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"> </component> <component name="dct" type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/> <component name="liveCMN" type="edu.cmu.sphinx.frontend.feature.LiveCMN"/> <component name="featureExtraction" type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/> <component name="microphone" type="edu.cmu.sphinx.frontend.util.Microphone"> <property name="closeBetweenUtterances" value="false"/> </component> <component name="accuracyTracker" type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker"> <property name="recognizer" value="${recognizer}"/> <property name="showAlignedResults" value="false"/> <property name="showRawResults" value="false"/> </component> <component name="memoryTracker" type="edu.cmu.sphinx.instrumentation.MemoryTracker"> <property name="recognizer" value="${recognizer}"/> <property name="showSummary" value="false"/> <property name="showDetails" value="false"/> </component> <component name="speedTracker" type="edu.cmu.sphinx.instrumentation.SpeedTracker"> <property name="recognizer" value="${recognizer}"/> <property name="frontend" value="${frontend}"/> <property name="showSummary" value="true"/> <property name="showDetails" value="false"/> </component> <component name="logMath" type="edu.cmu.sphinx.util.LogMath"> <property name="logBase" value="1.0001"/> <property name="useAddTable" value="true"/> </component> </config>
jarvis.gram:
jarvis.Manifest
Main-Class: jarvis.Jarvis Class-Path: ../sphinx4-1.0beta6/lib/sphinx4.jar ../sphinx4-1.0beta6/lib/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar