我正在尝试Sphinx4
在 Java 中使用来自InputStream
网络的输入。目前,我的程序设置为将从网络传入的任意数量的数据包读取到一个名为all_data
. 从中我创建了一个ByteArrayInputStream
. 我希望能够将其传递给 Sphinx 以使其被识别。
我到目前为止的代码是:
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 上的示例),效果很好!
我将以下内容添加到我的 roila.confg.xml 文件中:
<component name="streamDataSource" type="edu.cmu.sphinx.frontend.util.StreamDataSource">
<property name="sampleRate" value="16000" />
<property name="bigendianData" value="false" />
</component>
在我添加它之前,我得到了一个空指针异常,但之后streamDataSource
被拾取。
感谢您提供任何帮助 - 我最终希望能够做的是识别数据,因为如果这样做可以更轻松地处理此数据,则会不断输入数据。