package com.noga.njexl.testing.speech;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.result.WordResult;
import java.io.IOError;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by noga on 14/08/15.
*/
public class SpeechRecognizer {
public static final String PATH = "resource:/edu/cmu/sphinx/models/%s/" ;
public static final String AcousticModelPath = PATH + "%s" ;
public static final String DictPath = PATH + "cmudict-%s.dict" ;
public static final String LanguageModelPath = PATH + "%s.lm.bin" ;
Configuration configuration ;
public SpeechRecognizer(String lang){
// only lower-case
lang = lang.toLowerCase() ;
configuration = new Configuration();
// Set path to acoustic model.
configuration.setAcousticModelPath(String.format(AcousticModelPath,lang,lang));
// Set path to dictionary.
configuration.setDictionaryPath(String.format(DictPath,lang,lang,lang));
// Set language model.
configuration.setLanguageModelPath(String.format(LanguageModelPath,lang,lang,lang));
}
public List<String> recognize() throws Exception {
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
// Start recognition process pruning previously cached data.
recognizer.startRecognition(true);
System.out.println(">>>>Talk now...");
SpeechResult result = recognizer.getResult();
// Pause recognition process. It can be resumed then with startRecognition(false).
recognizer.stopRecognition();
System.out.println("<<<<<Talking Done...");
List<String> words = new ArrayList<>();
List<WordResult> results = result.getWords();
System.out.println(result.getHypothesis());
for (WordResult wordResult : results ){
words.add( wordResult.getWord().getSpelling() );
}
return words ;
}
}