#c_sharp
Здравствуйте, при работе с распознаванием речи возникает ошибка. Код программы: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Speech; using System.Speech.Recognition; using System.Speech.Synthesis; using System.Diagnostics; namespace VoiceRecognizationDemoApp { public partial class Form1 : Form { SpeechSynthesizer ss = new SpeechSynthesizer(); PromptBuilder pb = new PromptBuilder(); SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); Choices clist; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { clist = new Choices(); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; button2.Enabled = true; clist.Add(new string[] { "hello", "how are you", "what is the current time", "open chrome", "thank you", "close"}); Grammar gr = new Grammar(new GrammarBuilder(clist)); try { sre.RequestRecognizerUpdate(); sre.LoadGrammar(gr); sre.SpeechRecognized += sre_SpeechRecognized; sre.SetInputToDefaultAudioDevice(); sre.RecognizeAsync(RecognizeMode.Multiple); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } } private void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { switch (e.Result.Text.ToString()) { case "hello": ss.SpeakAsync("Hello Mihail"); break; case "how are you": ss.SpeakAsync("i am doing great Mihail. How about you?"); break; case "what is the current time": ss.SpeakAsync("current time is" + DateTime.Now.ToLongTimeString()); break; case "thank you": ss.SpeakAsync("not at all"); break; case "open chrome": Process.Start("chrome", "http://www.google.com/"); break; case "close": Application.Exit(); break; } textBox1.Text += e.Result.Text.ToString() + Environment.NewLine; } private void button2_Click(object sender, EventArgs e) { sre.RecognizeAsyncStop(); button1.Enabled = true; button2.Enabled = false; } } } Для работы с речью скачивал Microsoft Speech SDK 5.1 и Microsoft Speech API 5.1. Думаю что проблема находится именно в них. Делал все по примеру на Youtube. Прошу помочь. Ошибка возникает здесь: stack trace: Поток 'vshost.LoadReference' (0x1f34) завершился с кодом 0 (0x0). "VoiceRecognizationDemoApp.vshost.exe" (Управляемый (v4.0.30319)): Загружен "C:\Users\Михаил\documents\visual studio 2012\Projects\VoiceRecognizationDemoApp\VoiceRecognizationDemoApp\bin\Debug\VoiceRecognizationDemoApp.exe", Символы загружены. Поток '<Без имени>' (0x39c) завершился с кодом 0 (0x0). Первый этап обработки исключения типа "System.Runtime.InteropServices.COMException" в System.Speech.dll Первый этап обработки исключения типа "System.NullReferenceException" в System.Speech.dll Поток 'vshost.RunParkingWindow' (0x9a0) завершился с кодом 0 (0x0). Поток '<Без имени>' (0x1a68) завершился с кодом 0 (0x0). Программа "[8644] VoiceRecognizationDemoApp.vshost.exe: Трассировка программы" завершилась с кодом 0 (0x0). Программа "[8644] VoiceRecognizationDemoApp.vshost.exe: Управляемый (v4.0.30319)" завершилась с кодом 0 (0x0). Убрал catch(Exception ex) Вот что вышло: Жму "Продолжить" возникает другое исключение: Запускаю от администратора. Всеравно появляется ошибка: Подробная информация об использовании оперативной (JIT) отладки вместо данного диалогового окна содержится в конце этого сообщения. ************** Текст исключения ************** System.Runtime.InteropServices.COMException (0x80004005): В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL. в System.Speech.Recognition.RecognizerBase.Initialize(SapiRecognizer recognizer, Boolean inproc) в System.Speech.Recognition.SpeechRecognitionEngine.get_RecoBase() в System.Speech.Recognition.SpeechRecognitionEngine.RequestRecognizerUpdate() в VoiceRecognizationDemoApp.Form1.button1_Click(Object sender, EventArgs e) в c:\Users\Михаил\Documents\Visual Studio 2012\Projects\VoiceRecognizationDemoApp\VoiceRecognizationDemoApp\Form1.cs:строка 45 в System.Windows.Forms.Control.OnClick(EventArgs e) в System.Windows.Forms.Button.OnClick(EventArgs e) в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ButtonBase.WndProc(Message& m) в System.Windows.Forms.Button.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Загруженные сборки ************** mscorlib Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.34014 built by: FX45W81RTMGDR CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- VoiceRecognizationDemoApp Версия сборки: 1.0.0.0 Версия Win32: 1.0.0.0 CodeBase: file:///C:/Users/%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB/Documents/Visual%20Studio%202012/Projects/VoiceRecognizationDemoApp/VoiceRecognizationDemoApp/bin/Debug/VoiceRecognizationDemoApp.exe ---------------------------------------- System.Windows.Forms Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.34250 built by: FX452RTMGDR CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.34239 built by: FX452RTMGDR CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Speech Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Speech/v4.0_4.0.0.0__31bf3856ad364e35/System.Speech.dll ---------------------------------------- System.Configuration Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Xml Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.34230 built by: FX452RTMGDR CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- mscorlib.resources Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll ---------------------------------------- System.Windows.Forms.resources Версия сборки: 4.0.0.0 Версия Win32: 4.0.30319.36213 built by: FX452RTMLDR CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll ************** Оперативная отладка (JIT) ************** Для подключения оперативной (JIT) отладки файл .config данного приложения или компьютера (machine.config) должен иметь значение jitDebugging, установленное в секции system.windows.forms. Приложение также должно быть скомпилировано с включенной отладкой. Например: При включенной отладке JIT любое необрабатываемое исключение пересылается отладчику JIT, зарегистрированному на данном компьютере, вместо того чтобы обрабатываться данным диалоговым окном.
Ответы
Ответ 1
catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } Убираешь эту дрянь и дебажишь. Заодно увидишь нормальный stack trace, а не информацию об успешном завершении. И попробуй запустить программу с правами администратора.Ответ 2
Попробуйте SpeechRecognitionEngine явно инициализировать, с указанием языка, текст то у вас английский, а язык де-факто наверняка русский :) SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")); Описание
Комментариев нет:
Отправить комментарий