2016-07-20 6 views
1

ContinuousRecognitionSession.StartAsyncメソッドでこの例外が発生し続ける:「操作がオブジェクトの現在の状態のため有効ではありません」 SpeechRecognizerオブジェクトが「アイドル」状態の場合でも以下のコードスニペット例外:オブジェクトの現在の状態のため、操作が無効です。 UWPアプリケーションの音声認識装置オブジェクト

if (SpeechRecognizer.State == SpeechRecognizerState.Idle) 
    { 
      await SpeechRecognizer.ContinuousRecognitionSession.StartAsync(); 
    } 

がここにあるhttps://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/enable-continuous-dictationその音声認識がStartAsync()を呼び出すために「アイドル」状態である必要があります言及しました。ここで何が間違っていますか?

+0

投稿したコードは間違いなく正しいです。これらのコードでのみ問題を再現するのは難しいです。あなたは[mcve]を共有していただけますか?また、公式の[音声認識と合成のサンプル](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SpeechRecognitionAndSynthesis)で試してみましたか?同じ問題がありますか? –

+0

私は他の部分のコードがこれで何かをしなければならないとは思わない。これは、ボタンをクリックするだけのコードです。私は、連続音声認識を開始するためにStartAsync()を呼びたいクリックの簡単なボタンを持っています。あなたが共有している他のサンプルもチェックしたところ、同じコードが見つかりました。 –

+0

デバッグが混在している(管理対象とネイティブがオンの場合)この例外が発生します。サンプルコードにこの問題はありません。 –

答えて

1

StartAsyncメソッドを呼び出そうとしたときにこの例外が発生しましたが、ここに問題がない可能性があります。あなたが見たように、公式のサンプルでは、​​このコードも使用されています。

私はあなたのコードの他の部分を持っていないので、この例外の原因を言うのは難しいです。 Continuous dictationの手順に従って、Speech recognition and synthesis sampleを参照して独自の方法を実装することをお勧めします。

ここではいくつかの重要なポイントは以下のとおりです。あなたが連続認識イベントハンドラでアプリのUIを更新した場合

  • は、UIスレッドのディスパッチャを取得します。
  • 音声認識装置を初期化します。
  • 組み込みディクテーションの文法をコンパイルします。 音声認識では、認識可能な語彙を定義するために少なくとも1つの制約が必要です。制約が指定されていない場合は、あらかじめ定義されたディクテーション文法が使用されます。 Speech recognitionを参照してください。
  • 認識イベントのイベントリスナーを設定します。あなたの問題を引き起こす可能性があります

そして、もう一つ考えられる理由は、初期化に制約をコンパイル不足しています。音声認識を開始する前にSpeechRecognizer.CompileConstraintsAsync methodに電話する必要があります。

参考書:

CompileConstraintsAsyncはいつも何の制約がConstraintsプロパティで指定されていない場合でも、RecognizeAsyncまたはRecognizeWithUIAsync前に呼び出さなければなりません。

初期化でawait speechRecognizer.CompileConstraintsAsync();が見つからなかった場合、認識セッションを開始するときにはOperation is not valid due to the current state of the object.が例外となります。

+0

Page_LoadingイベントでCompileConstraintAsyc()を呼び出したので、このクリックイベントでは呼び出さなかった。ここでもう一度呼び出すと問題は解決しました。ありがとうJay :) –

関連する問題