0

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は拾われています。

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

4

1 に答える 1

1

コンポーネントを xml ファイルに追加するだけでなく、microphone コンポーネントの代わりにフロントエンド パイプラインのコンポーネントのリストにも追加する必要があります。

<component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd">
    <propertylist name="pipeline">
        <item>streamDataSource </item>
        <item>dataBlocker</item>
        <item>....</item>
        <item>featureExtraction </item>
    </propertylist>
</component>

その変更を忘れたのではないかと思います。

于 2013-06-27T07:55:20.350 に答える