質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

0回答

532閲覧

Windowsフォームでの音声認識のエラーについて

north

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2018/07/24 08:12

編集2022/01/12 10:55

お世話になっております。
現在下記の記事を参考に音声認識のプログラムを組み込んでいるのですが

音声認識

recognizerRule.Recognizer.Recognizer = recoperson;
のところでハンドルされていない例外 HRESULT からの例外:0x80045014
というエラーが出てなぜそうなるのか原因が分からず悩んでおります。
恐らくrecopersonがnullになっていたのでこれだと思っているのですがなぜnullになってしまうのかというところで詰まっています。

原因、対策をご教示いただけたらと思います。

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using DxLibDLL;//DxLibを使用 11using CoreTweet; //CoreTweetを使用 12using System.IO;//FileInfoを使用 13using SpeechLib; //音声認識用 14 15namespace DesctopMascot 16{ 17 public partial class Form1 : Form 18 { 19 private int[] modelNum; 20 private string[] modelName; 21 private string[] modelPass; 22 private int modelHandle; 23 private int cameraHandle; 24 private int soundHandle; 25 private int nowModelIndex; 26 private int attachIndex; 27 private float totalTime; 28 private float playTime; 29 private const float playSpeed = 0.48f; 30 private int motionNum; 31 private const int maxNum = 2; 32 private Tokens token; 33 private int NowInput, EdgeInput, PrevInput; 34 private int Catch; 35 private int CatchMouseX, CatchMouseY; 36 private DX.VECTOR Catch3DModelPosition; 37 private DX.VECTOR Catch3DHitPosition; 38 private DX.VECTOR Catch2DHitPosition; 39 private DX.VECTOR scale; 40 private float rot; 41 private int musicIndex; 42 private SpeechLib.SpInProcRecoContext recognizerRule; //音声認識オブジェクト 43 private SpeechLib.ISpeechRecoGrammar recognizerGrammarRule; //音声認識のための言語モデル 44 private SpeechLib.ISpeechGrammarRule recognizerGrammarRuleGrammarRule; ////音声認識のための言語モデルのルールのトップレベルオブジェクト 45 private enum ModelNum 46 { 47 KAEDE, 48 RIN 49 } 50 51 private enum MusicNum 52 { 53 KOIKAZE 54 } 55 56 private enum MotionNum 57 { 58 FUYU, 59 FUYU2, 60 KOIKAZE 61 } 62 63 public Form1() 64 { 65 InitializeComponent(); 66 67 //マウスのホイール動作の追加 68 MouseWheel += new MouseEventHandler(Form1_MouseWheel); 69 70 71 ClientSize = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); //画面サイズの設定 72 Text = "DesktopMascot"; //ウインドウの名前を設定 73 AllowDrop = true; //ドラッグ&ドロップを許可 74 75 token = Tokens.Create(""); //twitterアカウントの認証 76 77 DX.SetOutApplicationLogValidFlag(DX.FALSE); //Log.txtを生成しないように設定 78 DX.SetUserWindow(Handle); //DxLibの親ウインドウをこのフォームに設定 79 DX.SetZBufferBitDepth(24); //Zバッファの精度を変更 80 DX.DxLib_Init(); //DxLibの初期化処理 81 DX.SetDrawScreen(DX.DX_SCREEN_BACK); //描画先を裏画面に設定 82 83 modelHandle = DX.MV1LoadModel(modelPass[(int)ModelNum.KAEDE]); 84 cameraHandle = 0; 85 nowModelIndex = 0; 86 attachIndex = DX.MV1AttachAnim(modelHandle, motionNum, -1, DX.FALSE); 87 totalTime = DX.MV1GetAttachAnimTotalTime(modelHandle, attachIndex); 88 playTime = 0.0f; 89 scale = DX.MV1GetScale(modelHandle); 90 NowInput = 0; 91 EdgeInput = 0; 92 PrevInput = 0; 93 Catch = 0; 94 musicIndex = 0; 95 soundHandle = 0; 96 97 OnseiNinshiki(); 98 } 99 100 public void MainLoop() 101 { 102 DX.ClearDrawScreen();//裏画面を消す 103 104 DX.DrawBox(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, DX.GetColor(1, 1, 1), DX.TRUE);//背景を設定(透過させる) 105 106 playTime += playSpeed; 107 108 //モーションの再生位置が終端まで来たら最初に戻す 109 if (playTime >= totalTime) 110 { 111 playTime = 0.0f; 112 } 113 114 DX.MV1SetAttachAnimTime(modelHandle, attachIndex, playTime);//モーションの再生位置を設定 115 116 ModelMove(); 117 118 if (cameraHandle > 0) 119 { 120 // VMDカメラモーションのパラメータをDXライブラリの設定に反映させる 121 //SetupVMDCameraMotionParam(cameraHandle, playTime); 122 } 123 if (soundHandle > 0 && DX.CheckSoundMem(soundHandle) == 0) 124 { 125 DX.DeleteSoundMem(soundHandle); 126 } 127 128 if (modelHandle != 0) 129 { 130 DX.MV1DrawModel(modelHandle);//3Dモデルの描画 131 } 132 133 //ESCキーを押したら終了 134 if (DX.CheckHitKey(DX.KEY_INPUT_ESCAPE) != 0) 135 { 136 Close(); 137 } 138 139 DX.ScreenFlip();//裏画面を表画面にコピー 140 } 141 142 private void Form1_FormClosed(object sender, FormClosedEventArgs e) 143 { 144 DX.DxLib_End();//DxLibの終了処理 145 } 146 147 private void OnseiNinshiki() 148 { 149 bool hit = false; 150 //ルール認識 音声認識オブジェクトの生成 151 recognizerRule = new SpeechLib.SpInProcRecoContext(); 152 foreach(SpObjectToken recoperson in recognizerRule.Recognizer.GetRecognizers()) 153 { 154 string language = recoperson.GetAttribute("Language"); 155 //日本語かチェック 156 if(language == "411") 157 { 158 recognizerRule.Recognizer.Recognizer = recoperson; 159 hit = true; 160 break; 161 } 162 } 163 if(!hit) 164 { 165 MessageBox.Show("日本語認識が利用できません。\r\n日本語音声認識 MSSpeech_SR_ja-JP_TELE をインストールしてください。\r\n"); 166 } 167 recognizerRule.Recognizer.AudioInput = CreateMicrofon(); 168 169 //音声認識イベントでデリゲートによるコールバックを受ける 170 //認識の途中 171 recognizerRule.Hypothesis += delegate (int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult result) 172 { 173 string strText = result.PhraseInfo.GetText(0, -1, true); 174 }; 175 176 //認識完了 177 recognizerRule.Recognition += delegate (int streamNumber, object streamPosition, SpeechLib.SpeechRecognitionType srt, SpeechLib.ISpeechRecoResult isrr) 178 { 179 string strText = isrr.PhraseInfo.GetText(0, -1, true); 180 MessageBox.Show(this, strText, "メニュー", MessageBoxButtons.OK, MessageBoxIcon.Information); 181 }; 182 //ストリームに何かデータが来た(?) 183 this.recognizerRule.StartStream += delegate (int streamNumber, object streamPosition) 184 { 185 MessageBox.Show("おはよう", "メニュー", MessageBoxButtons.OK, MessageBoxIcon.Information); 186 }; 187 //認識失敗 188 this.recognizerRule.FalseRecognition += 189 delegate (int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult isrr) 190 { 191 MessageBox.Show("--ERROR!--", "メニュー", MessageBoxButtons.OK, MessageBoxIcon.Information); 192 }; 193 194 //言語モデルの作成 195 recognizerGrammarRule = recognizerRule.CreateGrammar(0); 196 recognizerGrammarRule.Reset(0); 197 198 //言語モデルのルールのトップレベルを作成する 199 recognizerGrammarRuleGrammarRule = recognizerGrammarRule.Rules.Add("TopLevelRule", SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic); 200 //文字列の追加. 201 recognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "りんごください"); 202 recognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "バナナください"); 203 recognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "らんらんるー"); 204 recognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "私がムスカ大佐だ"); 205 206 //ルールを反映させる。 207 recognizerGrammarRule.Rules.Commit(); 208 209 //音声認識開始。(トップレベルのオブジェクトの名前で SpeechRuleState.SGDSActive を指定する.) 210 recognizerGrammarRule.CmdSetRuleState("TopLevelRule", SpeechRuleState.SGDSActive); 211 } 212 213 //マイクから読み取るため、マイク用のデバイスを指定する. 214 private SpeechLib.SpObjectToken CreateMicrofon() 215 { 216 SpeechLib.SpObjectTokenCategory objAudioTokenCategory = new SpeechLib.SpObjectTokenCategory(); 217 objAudioTokenCategory.SetId(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\AudioInput", false); 218 SpeechLib.SpObjectToken objAudioToken = new SpeechLib.SpObjectToken(); 219 objAudioToken.SetId(objAudioTokenCategory.Default, @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\AudioInput", false); 220 return objAudioToken; 221 } 222 } 223}

文字数オーバーになるため関係ないと思われるところは省略しています。
どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/07/24 08:14

あなたの書いたソースコードを提示してください。編集で、<code>を押して、’’’の枠の中にコピペしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問