0

Пишу простейшее приложение с распознаванием речи, один и тот же код работает на .NET 4.8, но не работает на .NET 6.0. В строке SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine(cultureInfo); возникает ошибка System.NullReferenceException. В .NET 4.8 в этой строке ошибки не возникает. Что необходимо поменять, чтобы код заработал на .NET 6.0?

using Microsoft.Speech.Recognition;
using System.Globalization;

namespace SpeechRecognition {     public partial class Form1 : Form     {         static Label label;         public Form1()         {             InitializeComponent();         }

static void _SpeechRecognized(object sender, SpeechRecognizedEventArgs e)         {             if (e.Result.Confidence > 0.82) label.Text = e.Result.Text;         }

private void Form1_Shown(object sender, EventArgs e)         {             label = label1;

CultureInfo cultureInfo = new CultureInfo("ru-ru");             SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine(cultureInfo);             speechRecognitionEngine.SetInputToDefaultAudioDevice();

speechRecognitionEngine.SpeechRecognized +=                 new EventHandler<SpeechRecognizedEventArgs>(_SpeechRecognized);

Choices numbers = new Choices();             numbers.Add(new string[] { "один", "два", "три", "четыре", "пять" });

GrammarBuilder grammarBuilder = new GrammarBuilder();             grammarBuilder.Append(numbers);

Grammar grammar = new Grammar(grammarBuilder);             speechRecognitionEngine.LoadGrammar(grammar);

speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);         }     } }

  • https://ru.stackoverflow.com/q/413041/422180 – Aarnihauta Jan 29 '23 at 16:45
  • new CultureInfo("ru-RU"); – aepot Jan 29 '23 at 18:07
  • В случае .NET 4.8 в этой строке в переменной speechRecognitionEngine также записан null - неправда, конструктор не может вернуть null, это даже теоретически невозможно. Вы просто отладчиком на следующую строчку кода перейдите, а то смотрите в ещё неприсвоенную переменную. – aepot Jan 29 '23 at 18:12
  • @aepot, ru-RU автоматически подставляется. – Дмитрий Jan 29 '23 at 21:40
  • Стек вызовов при возникновении ошибки покажите. – user7860670 Jan 29 '23 at 21:42
  • @user7860670, Microsoft.Speech.Internal.ObjectTokens.RegistryDataKey.HKEYfromRegKey(Microsoft.Win32.RegistryKey)     Microsoft.Speech.Internal.ObjectTokens.RegistryDataKey.RootHKEYFromRegPath(string)     Microsoft.Speech.Internal.ObjectTokens.RegistryDataKey.Open(string, bool)     Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()     Microsoft.Speech.Recognition.SpeechRecognitionEngine.SpeechRecognitionEngine(System.Globalization.CultureInfo)     SpeechRecognition.Form1.Form1_Shown(object, System.EventArgs) в Form1.cs – Дмитрий Jan 29 '23 at 22:50
  • Не в комментарий, отредактируйте сам вопрос. Выложите полный трейс туда. – aepot Jan 29 '23 at 23:00

0 Answers0