0

私のプロジェクトで音声制御を使用するために kinect のオーディオ ストリームにアクセスする際に問題があります。これまでのところ、オーディオ ストリームからの応答はありません。最新のkinect sdkパックがインストールされたxnaを使用しています。

私が使用しているコードは、xna で音声制御を使用する SDK のサンプルからのものですが、コンソール アプリケーションです。

何らかの理由でオーディオストリームが開始されていないと思われるリスナーイベントはトリガーされていませんか?

どんな助けでも大歓迎です。

このコードはInitializeKinect()私のプログラムのセクションにあります:

 // Obtain the KinectAudioSource to do audio capture
        KinectAudioSource source = kinectSensor.AudioSource;
        source.EchoCancellationMode = EchoCancellationMode.None; // No AEC for this sample
        source.AutomaticGainControlEnabled = false; // Important to turn this off for speech recognition
        source.Start();
        RecognizerInfo ri = GetKinectRecognizer();

        if (ri == null)
        {
            lol = "Could not find Kinect speech recognizer. Please refer to the sample requirements";
        }

        lol = "Using: {0}"+ ri.Name;

        // NOTE: Need to wait 4 seconds for device to be ready right after initialization

        using (var sre = new SpeechRecognitionEngine(ri.Id))
        {
            var colors = new Choices();
            colors.Add("Kinect");
            colors.Add("test center ");
            colors.Add("left");
            colors.Add("right");
            colors.Add("indirect controls");
            colors.Add("gesture control");
            colors.Add("exit application");

            var gb = new GrammarBuilder { Culture = ri.Culture };

            // Specify the culture to match the recognizer in case we are running in a different culture.                                 
            gb.Append(colors);

            // Create the actual Grammar instance, and then load it into the speech recognizer.
            var g = new Grammar(gb);
            sre.LoadGrammar(g);
            sre.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(sre_SpeechHypothesized);
            sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sre_SpeechRecognized);
            sre.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(sre_SpeechRecognitionRejected);

            using (Stream s = source.Start())
            {

                sre.SetInputToAudioStream(
                    s, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
                sre.RecognizeAsync(RecognizeMode.Multiple);
            }
        }
4

1 に答える 1

0

これはあなたの問題かもしれません。

using (var sre = new SpeechRecognitionEngine(ri.Id))
{
}

usingブロックの終わりに到達すると、sreが閉じられます。認識は非同期であるため、usingブロックはほぼ瞬時に閉じます。代わりに、これを実行してみて、機能するかどうかを確認してください。

var sre = new SpeechRecognitionEngine(ri.Id)
//...

そしてsre.Dispose()、より適切な時間に電話してください。

于 2013-04-23T20:12:16.067 に答える