Windows.Медиафайлы.SpeechSynthesis.Конструктор SpeechSynthesizer выдает исключение «файл не найден»

#c# #uwp #sapi

#c# #uwp #sapi

Вопрос:

Многие пользователи моего приложения UWP попадают System.IO.FileNotFoundException в Windows.Media.SpeechSynthesis.SpeechSynthesizer..ctor()

Код вызывает конструктор по умолчанию Windows.Media.SpeechSynthesis.SpeechSynthesizer

 private SpeechSynthesizer _speechSynthesizer = new SpeechSynthesizer();
 

Я получил следующую трассировку стека для одного пользователя, другие также сообщают о подобной трассировке стека. Я не попадаю в это исключение на своем локальном компьютере, поэтому не могу отлаживать дальше.

Есть идеи, как я могу это отладить или исправить?

 System.IO.FileNotFoundException
The system cannot find the file specified.

at System.Runtime.InteropServices.McgMarshal.ActivateInstance(String)   0x17b
   at Windows.Media.SpeechSynthesis.SpeechSynthesizer..ctor()   0x1c
   at SampleReader.TtsHelper.TtsHelper..ctor(TtsData, MediaElement)   0x6f
   at SampleReader.UIPages.Reader.<InitializeReader>d__45.MoveNext()   0xfb
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   0x21
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__7_0(Object)   0x1e
   at System.Action`1.Invoke(T)   0x28
   at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()   0x33
   at System.Runtime.InteropServices.McgMarshal.ThrowOnExternalCallFailed(Int32, RuntimeTypeHandle)   0x21
   at __Interop.ComCallHelpers.Call(__ComObject, RuntimeTypeHandle, Int32)   0xb8
   at __Interop.ForwardComStubs.Stub_19[TThis](__ComObject, Int32)   0x24
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object, UnhandledErrorDetectedEventArgs)   0x3d
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   0x21
   at Microsoft.AppCenter.Utils.ApplicationLifecycleHelper.<.ctor>b__17_1(Object, UnhandledErrorDetectedEventArgs)   0x75
   at System.EventHandler`1.Invoke(Object, TEventArgs)   0x2e
   at __Interop.Intrinsics.HasThisCall__24[TArg0](Object, IntPtr, Object, TArg0)   0x36
   at Sample Reader!<BaseAddress> 0x110b4f0
 

Ответ №1:

Я протестировал приведенный выше код и столкнулся с тем же исключением (файл не найден).

Вы могли бы позволить своим пользователям проверить, включена ли функция распознавания речи на локальном компьютере (введите распознавание речи в поле поиска). И проверьте, позволяет ли используемый язык (например, английский (США)) использовать речь (откройте Настройки> Время и язык> Язык> Предпочтительные языки, выберите Английский (США)> Параметры). Если функция распознавания речи не поддерживается, ее необходимо включить.

Вы можете попробовать включить эту функцию двумя способами:

  1. Найдите свой язык в разделе Язык (Настройки> Время и язык), нажмите Параметры, нажмите кнопку Загрузить в разделе Речь, чтобы включить функцию речи для языка.
  2. Откройте Speech (Настройки> Время и язык), нажмите Добавить голоса в разделе Управление голосами, выберите необходимый язык для добавления.

Комментарии:

1. Большое спасибо, что нашли время ответить на этот вопрос. У меня есть несколько вопросов — [1.] Поиск «Распознавание речи» не дает никакого результата — imgur.com/8P4Sb93 [2.] Из вашего описания похоже, что если голос TTS не загружен, то возникает эта ошибка, поэтому загрузка любого голоса TTS должна помочь? Потому что я нигде не смог найти «функцию распознавания речи»? [3.] Какая у вас версия Windows, потому что я создал новую виртуальную машину Win 10 1909, и на ней был установлен TTS voice для языка по умолчанию (или вы что-нибудь сделали, чтобы удалить TTS voices)?

2. Я бы либо проверил SpeechSynthesizer. DefaultVoice или SpeechSynthesizer по умолчанию. Все голоса. Подсчитайте, есть ли какие-либо установленные голоса.

3. Сборка ОС — 19041.508, а версия на моем компьютере — 2004. Моя машина была сброшена, и я никогда не удаляю свои голоса TTS. Причина, по которой вы не можете выполнить поиск функции, заключается в том, что слово, которое я дал, было написано неправильно. Правильное написание — это распознавание речи . Я очень сожалею об этом. Вы также можете найти распознавание речи Windows с помощью панели управления , ссылаясь на помощь вашему компьютеру в распознавании вашего голоса в документе .

4. Вы должны убедиться, что включена речь ( Настройки> Время и язык> Язык> Предпочтительные языки> Английский> Параметры> Речь ) вашего языка (например, английского).