SpeechSynthesizer.SelectVoice() Fails with “No mat

2019-01-29 00:41发布

I am modifying Scott Hanselman's BabySmash code to support other languages.

  1. I installed the speech platform and a new language per these steps.
  2. The language now shows up in the registry:

    enter image description here

  3. The language can now be selected and played by Windows:

    enter image description here

  4. System.Speech.Synthesis.SpeechSynthesizer.GetInstalledVoices() now returns the voice.

  5. However SelectVoice() in the code below throws the error "System.ArgumentException: Cannot set voice. No matching voice is installed or the voice was disabled."
string phrase = null;
SpeechSynthesizer speech = new SpeechSynthesizer();
CultureInfo keyboardCulture = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Culture;
InstalledVoice neededVoice = speech.GetInstalledVoices(keyboardCulture).FirstOrDefault();
if (neededVoice == null)
{
    phrase = "Unsupported Language";
}
else if (!neededVoice.Enabled)
{
    phrase = "Voice Disabled";
}
else
{
    speech.SelectVoice(neededVoice.VoiceInfo.Name);
}

speech.Speak(phrase);
  1. I've tried upgrading to C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Speech.dll.

  2. I've verified that the versions of Microsoft.Speech.dll and the language pack match.

    enter image description here

  3. This code works for the default voices I've already had installed.

  4. In desperation, I've even tried invoking System.Speech.Internal.Synthesis.VoiceSynthesis.GetVoice() directly through reflection, but same exact error.

I would greatly appreciate any help you can provide! Thanks.

4条回答
对你真心纯属浪费
2楼-- · 2019-01-29 00:59

Another solution is to install (x64) bits version of Microsoft Speech Platform SDK and Microsoft Server Speech Platform Runtime. I think that you had installed (x86) bits of both and the plataform try to read it in (x64) bits.

I had the same problem that you but on the contrary and this works to me!

查看更多
男人必须洒脱
3楼-- · 2019-01-29 01:05

changing the user identity to Localsystem solve my problem ! enter image description here

查看更多
霸刀☆藐视天下
4楼-- · 2019-01-29 01:13

ha ha I feel special: this post on Python actually solved my problem: build configuration platform needs to be x64, not Any CPU!

查看更多
贪生不怕死
5楼-- · 2019-01-29 01:17

In my case Instead of the library System.Speech.Synthesis i need to use Microsoft.Speech.Synthesis. For that we need to go to Solution Explorer on VisualStudio --> References and Browse for Microsoft.Speech.dll

using Microsoft.Speech.Synthesis;

After that you will have other Runtime Languages available.

        SpeechSynthesizer synth = new SpeechSynthesizer();    

        // Output information about all of the installed voices. 
        foreach (InstalledVoice voice in synth.GetInstalledVoices())
        {
            VoiceInfo info = voice.VoiceInfo;

            Console.WriteLine(" Name:          " + info.Name);
            Console.WriteLine(" Culture:       " + info.Culture);
            Console.WriteLine(" Age:           " + info.Age);
            Console.WriteLine(" Gender:        " + info.Gender);
            Console.WriteLine(" Description:   " + info.Description);
            Console.WriteLine(" ID:            " + info.Id);
        }
查看更多
登录 后发表回答