#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:
Я протестировал приведенный выше код и столкнулся с тем же исключением (файл не найден).
Вы могли бы позволить своим пользователям проверить, включена ли функция распознавания речи на локальном компьютере (введите распознавание речи в поле поиска). И проверьте, позволяет ли используемый язык (например, английский (США)) использовать речь (откройте Настройки> Время и язык> Язык> Предпочтительные языки, выберите Английский (США)> Параметры). Если функция распознавания речи не поддерживается, ее необходимо включить.
Вы можете попробовать включить эту функцию двумя способами:
- Найдите свой язык в разделе Язык (Настройки> Время и язык), нажмите Параметры, нажмите кнопку Загрузить в разделе Речь, чтобы включить функцию речи для языка.
- Откройте 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. Вы должны убедиться, что включена речь ( Настройки> Время и язык> Язык> Предпочтительные языки> Английский> Параметры> Речь ) вашего языка (например, английского).