Java에서 Sphinx4
을 입력하고 네트워크를 통해 InputStream
의 입력을 사용하려고합니다. 현재 내 프로그램은 네트워크에서 들어오는 임의의 수의 패킷을 all_data
이라는 배열로 읽도록 설정되어 있습니다. 그로부터 ByteArrayInputStream
을 만듭니다. 내가 할 수 있기를 바랄 수있는 것은 그것을 인식하기 위해 스핑크스에 전달하는 것입니다.Sphinx4에서 StreamDataSource 사용
내가 지금까지 가지고있는 코드입니다 : 내가 입력으로 마이크를 사용하는 경우
InputStream audioToPlay = new ByteArrayInputStream(all_data);
ConfigurationManager cm;
cm = new ConfigurationManager(BTsend.class.getResource("roila.config.xml"));
System.out.println("Loading Recognizer...");
Recognizer recognizer = (Recognizer) cm.lookup("recognizer");
recognizer.allocate();
StreamDataSource streamDataSource = (StreamDataSource) cm.lookup("streamDataSource");
streamDataSource.setInputStream(audioToPlay, "Main Stream");
System.out.println("Start speaking.\n");
Result result = recognizer.recognize();
if (result != null)
{
String resultText = result.getBestResultNoFiller();
System.out.println("You said: " + resultText + "\n");
}
else
{
System.out.println("I can't hear what you said.\n");
//break;
}
이 동일한 코드가 작동합니다. 다음 샘플을 수행하는 모든 것을 기초로합니다 : http://roila.org/wp-content/uploads/2010/04/roila_java.txt. 이 코드는 작동하며, 내가 한 모든 것은 마이크를 StreamDataSource
으로 바꾸고 작동 시키려고했습니다.
불행히도 내가 시도한 결과는 항상 null을 반환하지만 마이크 입력 (위의 샘플은 roila.org 참조)을 사용하면 멋지게 작동합니다! 내가 널 포인터 예외를 받고했지만 이후 streamDataSource
이 포착되고 그것을 추가하기 전에
<component name="streamDataSource" type="edu.cmu.sphinx.frontend.util.StreamDataSource">
<property name="sampleRate" value="16000" />
<property name="bigendianData" value="false" />
</component>
:
나는 내 roila.confg.xml 파일에 다음을 추가했다.어떤 도움을 주실 수 있습니까? 궁극적으로 할 수 있기를 원하는 것은 데이터를 처리하는 과정에서 데이터가 계속 들어 오면 인식됩니다. 당신이 대신 마이크 구성 요소의 프론트 엔드 파이프 라인의 구성 요소 목록에 추가해야 xml 파일로 구성 요소를 추가 옆에
NullPointerException에 문제가있는 경우 NullPointerException에서 스택 추적을 제공하는 방법을 배웁니다. 문제에 대한 모든 중요한 정보는 스택 트레이스에 포함되어 있습니다. 스택 트레이스를 읽는 것만으로도됩니다. –