C#、コンピューターまたはSystem.Speechとの会話

最近、C#プログラマーである私は、コントロールパネルで音声認識などの機能を見つけました。 言語を英語に変更し、オンにして、コンピューターと一晩中話しました。 午前中、もちろん電卓を書くことにしました。 .Net'ovskieライブラリにこだわって、System.Speechが見つかりました。 有望に思えた。



ライブラリには3つの名前空間がありました。 画像

音声の認識と合成、さらに重要ではない何かのために



合成



まず、Synthesisを扱いましょう。Speakボタンを使って簡単なメモ帳を書きます。

textBoxTextおよびbuttonSpeakをフォームに追加します。 コードで、System.Speech.Synthesisを接続し、フォームにオブジェクトを作成します



SpeechSynthesizer ss = new SpeechSynthesizer();







フレーズを読み取るためのコードにボタンのハンドラーをハングアップします。



ss.Volume = 100;// 0 100

ss.Rate = 0;// -10 10

ss.SpeakAsync(textBoxText.Text);








ところで、非同期読み取り中に、速度と音量を変更できます。 Speak()のみを記述できますが、読み取り中にプログラム全体がハングします。 次に、フォームに別のボタンsaveToWavを追加します。 ここでは明るさと速度も調整しますが、Speak()の前にss.SetOutputToWaveFile(/ * file path * /)を記述します。

楽しい部分は次のとおりです。



認識



この機能を使用するには、英語のWindows 7 / Vistaが必要です。


System.Speech.Recognitionを接続し、次の形式で変数を宣言します。



private SpeechRecognitionEngine sr;







さらに数行のあいまいなコードをフォームコンストラクターにコピーします。



sr.SetInputToDefaultAudioDevice();//

GrammarBuilder grammarBuilder = new GrammarBuilder();

grammarBuilder.Append(new Choices("left", "right", "up", "down"));//

sr.UnloadAllGrammars();

sr.LoadGrammar(Grammar(grammarBuilder));// ""

sr.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(SpeechRecognized);//

sr.RecognizeAsync(RecognizeMode.Multiple);//








SpeechRecognizedイベントでは、次のように記述します。



MessageBox.Show("Recognized phrase: " + e.Result.Text);







現在、ロシア語の大きなアクセントなしでフレーズ「左」、「右」、「上」、「下」を発音すると、対応するメッセージが表示されます。

しかし、あなたが非常に強調して発音した場合、私たちのプログラムはいくつかのオプションを認識します。 これにはSpeechHypothesizedイベントがあります。 ハンドラーを追加します。



sr.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);







メッセージも表示します。



MessageBox.Show("Hypothesized phrase: " + e.Result.Text);







これでプログラムは指定されたコマンドを認識できるようになりましたが、それはすでに悪くはありませんが、そのようなコマンドが多数ある場合や、たとえば変更できる場合(たとえば、「タブ番号5を開く」)、または音声コントロールでメモ帳を作成したい場合...

一般に、別のオブジェクトを作成する必要があります。



private DictationGrammar dictationGrammar;







コンストラクター内:



dictationGrammar = new DictationGrammar();

sr.LoadGrammar(dictationGrammar);








これで、プログラムはすべての英語のテキストを認識できます。 この機能は、フランス語、スペイン語、ドイツ語、日本語、中国語でも利用できます。 しかし、残念ながら私はそれらを話しません(



PSインターフェイスを英語にする必要があることを思い出させてください。そうしないと、文法辞書は作成されません。



All Articles