private void Initialize() { this.GetSessionAndSenseManager(); this.audioSource = this.session.CreateAudioSource(); pxcmStatus sts = this.session.CreateImpl <PXCMSpeechRecognition>(this.descs[0], out this.recognition); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("Could not create audio source."); } // 音声入力デバイスを設定する //PXCMAudioSource.DeviceInfo dinfo = (PXCMAudioSource.DeviceInfo)deviceInfos[FInAudioDevice[0]]; //FLogger.Log(LogType.Debug, dinfo.name); //this.audioSource.SetDevice(dinfo); for (int i = 0; i < deviceInfos.Count; i++) { PXCMAudioSource.DeviceInfo dinfo = deviceInfos[i]; if (dinfo.name.Equals(FInAudioDevice[0])) { this.audioSource.SetDevice(dinfo); } } // set language for (int i = 0; i < profileInfos.Count; i++) { PXCMSpeechRecognition.ProfileInfo pinfo = profileInfos[i]; if (pinfo.language.ToString().Equals(FInLanguage[0])) { this.recognition.SetProfile(pinfo); } } // set dictation mode sts = this.recognition.SetDictation(); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("Could not set dictation mode. " + sts.ToString()); } PXCMSpeechRecognition.Handler handler = new PXCMSpeechRecognition.Handler(); handler.onRecognition = OnRecognition; sts = this.recognition.StartRec(this.audioSource, handler); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("Could not start recording."); } this.initialized = true; }
// 音声認識を初期化する private void InitializeSpeechRecognition() { pxcmStatus sts; var session = senseManager.QuerySession(); // 音声入力デバイスを作成する audioSource = session.CreateAudioSource(); if (audioSource == null) { throw new Exception("音声入力デバイスの作成に失敗しました"); } // 音声入力デバイスを列挙する TextDesc.Text = ""; TextDesc.Text += "音声入力デバイス\n"; PXCMAudioSource.DeviceInfo device = null; audioSource.ScanDevices(); for (int i = 0;; ++i) { PXCMAudioSource.DeviceInfo dinfo; sts = audioSource.QueryDeviceInfo(i, out dinfo); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } // 音声入力デバイス名を表示する TextDesc.Text += "\t" + dinfo.name + "\n"; // 最初のデバイスを使う if (i == 0) { device = dinfo; } } // 音声入力デバイスを設定する sts = audioSource.SetDevice(device); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("音声入力デバイスの設定に失敗しました"); } // 音声認識エンジンを列挙する TextDesc.Text += "音声認識エンジン\n"; PXCMSession.ImplDesc inDesc = new PXCMSession.ImplDesc(); PXCMSession.ImplDesc outDesc = null; PXCMSession.ImplDesc desc = null; inDesc.cuids[0] = PXCMSpeechRecognition.CUID; for (int i = 0; ; ++i) { // 音声認識エンジンを取得する sts = session.QueryImpl(inDesc, i, out outDesc); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } // 音声認識エンジン名称を表示する TextDesc.Text += "\t" + outDesc.friendlyName + "\n"; // 最初の音声認識エンジンを使う if (i == 0) { desc = outDesc; } } // 音声認識エンジンオブジェクトを作成する sts = session.CreateImpl <PXCMSpeechRecognition>(desc, out recognition); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("音声認識エンジンオブジェクトの作成に失敗しました"); } // 対応言語を列挙する PXCMSpeechRecognition.ProfileInfo profile = null; for (int j = 0;; ++j) { // 音声認識エンジンが持っているプロファイルを取得する PXCMSpeechRecognition.ProfileInfo pinfo; sts = recognition.QueryProfile(j, out pinfo); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } // 対応言語を表示する TextDesc.Text += "\t\t" + LanguageToString(pinfo.language) + "\n"; // 英語のエンジンを使う(日本語対応時には日本語に変更する) if (pinfo.language == PXCMSpeechRecognition.LanguageType.LANGUAGE_US_ENGLISH) { profile = pinfo; } } if (profile == null) { throw new Exception("選択した音声認識エンジンが見つかりませんでした"); } // 使用する言語を設定する sts = recognition.SetProfile(profile); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("音声認識エンジンオブジェクトの設定に失敗しました"); } // コマンドモードを設定する SetCommandMode(); // 音声認識の通知ハンドラを作成する PXCMSpeechRecognition.Handler handler = new PXCMSpeechRecognition.Handler(); handler.onRecognition = OnRecognition; // 音声認識を開始する sts = recognition.StartRec(audioSource, handler); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { throw new Exception("音声認識の開始に失敗しました"); } }