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
は拾われています。
どんな助けでも大歓迎です - 私が最終的にやりたいことは、これを処理しやすくするイベントでデータが継続的に入ってくるので認識されます.