.NET SpeechSynthesizer 抛出 System.NullReferenceException
.NET SpeechSynthesizer throws System.NullReferenceException
我似乎无法在任何地方找到解决我的问题的方法。
我正在尝试在我的应用程序中使用 SpeechSynthesizer,但我尝试的所有方法(包括 Microsoft 文档中的代码)似乎都不起作用。我使用的代码是:
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
// Configure the audio output.
synth.SetOutputToDefaultAudioDevice();
// Speak a string synchronously.
synth.Speak("test");
}
我正在使用以下命名空间
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Threading;
using Process = System.Diagnostics.Process;
using System.Speech.Recognition;
using System.Media;
using System.IO;
using System.Speech.Synthesis;
我从此处的 Microsoft .NET 文档中获取了代码:
LINK
代码在 synth.SetOutputToDefaultAudioDevice();
处抛出一个 System.NullReferenceException,当我注释掉该行时,它也会在此处抛出 synth.Speak("test");
堆栈跟踪表明它来自 System.Speech dll 或者至少我认为它是无论如何;我不确定。堆栈跟踪的 link 是:
at System.Speech.Internal.ObjectTokens.RegistryDataKey.HKEYfromRegKey(RegistryKey regKey)
at System.Speech.Internal.ObjectTokens.RegistryDataKey.RootHKEYFromRegPath(String rootPath)
at System.Speech.Internal.ObjectTokens.RegistryDataKey.Open(String registryPath, Boolean fCreateIfNotExist)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory.Create(String sCategoryId)
at System.Speech.Internal.ObjectTokens.SAPICategories.DefaultDeviceOut()
at System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speechSynthesizer)
at System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer()
at System.Speech.Synthesis.SpeechSynthesizer.get_Voice()
at SampleSynthesis.Program.Main(String[] args) in C:\Users\Sonic\Desktop\test\Program.cs:line 26
似乎还有其他与此相关的问题,因此我的问题似乎不是其他 NRE 相关问题的简单重复。以下是一些可能有助于提供答案的类似问题:
- Nullreference in microsoft.speech...
- NullReferenceException with SpeechSynthesizer in Unity
花了一段时间,但我找到了答案。我没有在“管理 NuGet 包”部分安装 System.Speech。我刚刚从 Add a project reference
添加了 DLL,但它没有安装,所以它抛出了 NullReferenceException。对于遇到此问题的任何其他人,您必须通过转至 Project > Manage NuGet Packages > Browse
安装 NuGet 包,然后在搜索栏中搜索 System.Speech
,单击带有 .NET 图标的包并按安装。
也感谢所有试图提供帮助的人:)
我似乎无法在任何地方找到解决我的问题的方法。
我正在尝试在我的应用程序中使用 SpeechSynthesizer,但我尝试的所有方法(包括 Microsoft 文档中的代码)似乎都不起作用。我使用的代码是:
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
// Configure the audio output.
synth.SetOutputToDefaultAudioDevice();
// Speak a string synchronously.
synth.Speak("test");
}
我正在使用以下命名空间
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Threading;
using Process = System.Diagnostics.Process;
using System.Speech.Recognition;
using System.Media;
using System.IO;
using System.Speech.Synthesis;
我从此处的 Microsoft .NET 文档中获取了代码: LINK
代码在 synth.SetOutputToDefaultAudioDevice();
处抛出一个 System.NullReferenceException,当我注释掉该行时,它也会在此处抛出 synth.Speak("test");
堆栈跟踪表明它来自 System.Speech dll 或者至少我认为它是无论如何;我不确定。堆栈跟踪的 link 是:
at System.Speech.Internal.ObjectTokens.RegistryDataKey.HKEYfromRegKey(RegistryKey regKey)
at System.Speech.Internal.ObjectTokens.RegistryDataKey.RootHKEYFromRegPath(String rootPath)
at System.Speech.Internal.ObjectTokens.RegistryDataKey.Open(String registryPath, Boolean fCreateIfNotExist)
at System.Speech.Internal.ObjectTokens.ObjectTokenCategory.Create(String sCategoryId)
at System.Speech.Internal.ObjectTokens.SAPICategories.DefaultDeviceOut()
at System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speechSynthesizer)
at System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer()
at System.Speech.Synthesis.SpeechSynthesizer.get_Voice()
at SampleSynthesis.Program.Main(String[] args) in C:\Users\Sonic\Desktop\test\Program.cs:line 26
似乎还有其他与此相关的问题,因此我的问题似乎不是其他 NRE 相关问题的简单重复。以下是一些可能有助于提供答案的类似问题:
- Nullreference in microsoft.speech...
- NullReferenceException with SpeechSynthesizer in Unity
花了一段时间,但我找到了答案。我没有在“管理 NuGet 包”部分安装 System.Speech。我刚刚从 Add a project reference
添加了 DLL,但它没有安装,所以它抛出了 NullReferenceException。对于遇到此问题的任何其他人,您必须通过转至 Project > Manage NuGet Packages > Browse
安装 NuGet 包,然后在搜索栏中搜索 System.Speech
,单击带有 .NET 图标的包并按安装。
也感谢所有试图提供帮助的人:)