.netspeechsynthesizer

.NET SpeechSynthesizer throws System.NullReferenceException


I can't seem to find any solutions to my problem anywhere.

I am trying to use SpeechSynthesizer in my application but anything that I try (including code from the Microsoft documentation) but nothing seems to work. The code that I am using is:

using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
    // Configure the audio output.   
    synth.SetOutputToDefaultAudioDevice();

    // Speak a string synchronously.  
    synth.Speak("test");
}

I am using the following namespaces

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;

I got the code from the Microsoft .NET documentation here: LINK

The code throws a System.NullReferenceException at synth.SetOutputToDefaultAudioDevice(); and when I comment the line out it throws it here too synth.Speak("test");

The stack trace says that it is from the System.Speech dll or at least I think it is anyway; I'm not sure. A link to the stack trace is:

   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

There appear to be other questions that are related to this, and so my question does not appear to be a simple duplicate of other NRE related questions. Here are some similar questions that may help provide an answer:


Solution

  • It took a while but I found an answer. I didn't have System.Speech installed in the Manage NuGet Packages section. I just added the DLL from Add a project reference but it was not installed so it was throwing the NullReferenceException. For anyone else who has this problem you must install the NuGet package by going to Project > Manage NuGet Packages > Browse then search System.Speech in the search bar, click on the package with the .NET icon and press Install.

    Also thanks for everyone who tried to help :)